New Ticket     Tickets     Wiki     Browse Source     Timeline     Roadmap     Ticket Reports     Search

Ticket #36282: mediatomb-0.12.1-libmp4v2_191_p479.patch

File mediatomb-0.12.1-libmp4v2_191_p479.patch, 5.8 KB (added by mfourtytwoi@…, 19 months ago)

Patch for using libmp4v2 1.9.1 p479

  • src/metadata/libmp4v2_handler.cc

    diff -urN old/src/metadata/libmp4v2_handler.cc new/src/metadata/libmp4v2_handler.cc
    old new  
    6565static void addMetaField(metadata_fields_t field, MP4FileHandle mp4, Ref<CdsItem> item) 
    6666{ 
    6767    String value; 
    68     char*  mp4_retval = NULL; 
    69     u_int16_t track; 
    70     u_int16_t total_tracks; 
    71   
    7268    Ref<StringConverter> sc = StringConverter::i2i(); 
    7369     
     70    const MP4Tags* new_tags = MP4TagsAlloc(); 
     71 
     72    if (!MP4TagsFetch(new_tags, mp4)) 
     73        return; 
     74 
    7475    switch (field) 
    7576    { 
    7677        case M_TITLE: 
    77             MP4GetMetadataName(mp4, &mp4_retval); 
     78            value = new_tags->name; 
    7879            break; 
    7980        case M_ARTIST: 
    80             MP4GetMetadataArtist(mp4, &mp4_retval); 
     81            value = new_tags->artist; 
    8182            break; 
    8283        case M_ALBUM: 
    83             MP4GetMetadataAlbum(mp4, &mp4_retval); 
     84            value = new_tags->album; 
    8485            break; 
    8586        case M_DATE: 
    86             MP4GetMetadataYear(mp4, &mp4_retval); 
    87             if (mp4_retval) 
     87            value = new_tags->releaseDate; 
     88            if (value.length() > 0) 
    8889            { 
    89                 value = mp4_retval; 
    90                 free(mp4_retval); 
    9190                if (string_ok(value)) 
    9291                    value = value + "-01-01"; 
    9392                else 
     
    9594            } 
    9695            break; 
    9796        case M_GENRE: 
    98             MP4GetMetadataGenre(mp4, &mp4_retval); 
     97            value = new_tags->genre; 
    9998            break; 
    10099        case M_DESCRIPTION: 
    101             MP4GetMetadataComment(mp4, &mp4_retval); 
     100            value = new_tags->comments; 
    102101            break; 
    103102        case M_TRACKNUMBER: 
    104             MP4GetMetadataTrack(mp4, &track, &total_tracks); 
    105             if (track > 0) 
     103            if (new_tags->track) 
    106104            { 
    107                 value = String::from(track); 
    108                 item->setTrackNumber((int)track); 
     105                value = String::from(new_tags->track->index); 
     106                item->setTrackNumber((int)new_tags->track->index); 
    109107            } 
    110108            else 
     109                        { 
     110                            MP4TagsFree( new_tags ); 
    111111                return; 
     112            } 
    112113            break; 
    113114        default: 
     115                        MP4TagsFree( new_tags ); 
    114116            return; 
    115117    } 
    116118 
    117     if ((field != M_DATE) && (field != M_TRACKNUMBER) &&  
    118         (mp4_retval)) 
    119     { 
    120         value = mp4_retval; 
    121         free(mp4_retval); 
    122     } 
    123      
     119        MP4TagsFree( new_tags ); 
    124120    value = trim_string(value); 
    125      
     121 
    126122    if (string_ok(value)) 
    127123    { 
    128124        item->setMetadata(MT_KEYS[field].upnp, sc->convert(value)); 
     
    190186        } 
    191187 
    192188#if defined(HAVE_MAGIC) 
    193         u_int8_t *art_data; 
    194         u_int32_t art_data_len; 
     189        void *art_data = 0; 
     190        u_int32_t art_data_len = 0; 
    195191        String art_mimetype; 
     192 
     193        const MP4Tags* new_tags = MP4TagsAlloc(); 
     194        MP4TagsFetch(new_tags, mp4); 
     195        if (new_tags->artworkCount) 
     196        { 
     197            art_data = new_tags->artwork->data; 
     198            art_data_len = new_tags->artwork->size; 
     199        } 
    196200#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT 
    197         if (MP4GetMetadataCoverArtCount(mp4) &&  
    198             MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len)) 
    199 #else 
    200             MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len); 
     201        if (new_tags->artworkCount && art_data_len > 0)  
    201202#endif 
    202203        { 
    203204            if (art_data) 
     
    211212                } 
    212213                catch (Exception ex) 
    213214                { 
    214                     free(art_data); 
     215                    MP4TagsFree(new_tags); 
    215216                    throw ex; 
    216217                } 
    217218 
    218                 free(art_data); 
    219219                if (art_mimetype != _(MIMETYPE_DEFAULT)) 
    220220                { 
    221221                    Ref<CdsResource> resource(new CdsResource(CH_MP4)); 
     
    225225                } 
    226226            } 
    227227        } 
     228        MP4TagsFree(new_tags); 
    228229#endif 
    229230        MP4Close(mp4); 
    230231    } 
     
    249250 
    250251    if (ctype != ID3_ALBUM_ART) 
    251252        throw _Exception(_("LibMP4V2Handler: got unknown content type: ") + ctype); 
     253 
     254    const MP4Tags* new_tags = MP4TagsAlloc(); 
     255    if (MP4TagsFetch(new_tags, mp4)) 
     256    { 
    252257#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT 
    253     if (!MP4GetMetadataCoverArtCount(mp4)) 
    254         throw _Exception(_("LibMP4V2Handler: resource has no album art information")); 
     258        if (!new_tags->artworkCount) 
     259            throw _Exception(_("LibMP4V2Handler: resource has no album art information")); 
    255260#endif 
    256     u_int8_t *art_data; 
    257     u_int32_t art_data_len; 
    258     if (MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len)) 
    259     { 
    260         if (art_data) 
     261        void *art_data = 0; 
     262        u_int32_t art_data_len; 
     263 
     264        const MP4TagArtwork* art = new_tags->artwork; 
     265        art_data = art->data; 
     266        art_data_len = art->size; 
     267        if (art) 
    261268        { 
    262             *data_size = (off_t)art_data_len; 
    263             Ref<IOHandler> h(new MemIOHandler((void *)art_data, art_data_len)); 
    264             free(art_data); 
    265             return h; 
     269            if (art_data) 
     270            { 
     271                *data_size = (off_t)art_data_len; 
     272                Ref<IOHandler> h(new MemIOHandler(art_data, art_data_len)); 
     273                MP4TagsFree(new_tags); 
     274                return h; 
     275            } 
    266276        } 
     277        MP4TagsFree(new_tags); 
    267278    } 
    268          
    269279    throw _Exception(_("LibMP4V2Handler: could not serve album art " 
    270                            "for file") + item->getLocation() +  
    271                            " - embedded image not found"); 
     280            "for file") + item->getLocation() +  
     281        " - embedded image not found"); 
    272282} 
    273283 
    274284#endif // HAVE_LIBMP4V2