1
Description: Fix build against libmp4v2.
3
Forwarded: yes, http://sourceforge.net/p/mediatomb/patches/35/
4
Bug-Debian: http://bugs.debian.org/677958
6
--- a/src/metadata/libmp4v2_handler.cc
7
+++ b/src/metadata/libmp4v2_handler.cc
9
static void addMetaField(metadata_fields_t field, MP4FileHandle mp4, Ref<CdsItem> item)
12
- char* mp4_retval = NULL;
14
- u_int16_t total_tracks;
16
Ref<StringConverter> sc = StringConverter::i2i();
18
+ const MP4Tags* new_tags = MP4TagsAlloc();
20
+ if (!MP4TagsFetch(new_tags, mp4))
26
- MP4GetMetadataName(mp4, &mp4_retval);
27
+ value = new_tags->name;
30
- MP4GetMetadataArtist(mp4, &mp4_retval);
31
+ value = new_tags->artist;
34
- MP4GetMetadataAlbum(mp4, &mp4_retval);
35
+ value = new_tags->album;
38
- MP4GetMetadataYear(mp4, &mp4_retval);
40
+ value = new_tags->releaseDate;
41
+ if (value.length() > 0)
46
value = value + "-01-01";
52
- MP4GetMetadataGenre(mp4, &mp4_retval);
53
+ value = new_tags->genre;
56
- MP4GetMetadataComment(mp4, &mp4_retval);
57
+ value = new_tags->comments;
60
- MP4GetMetadataTrack(mp4, &track, &total_tracks);
62
+ if (new_tags->track)
64
- value = String::from(track);
65
- item->setTrackNumber((int)track);
66
+ value = String::from(new_tags->track->index);
67
+ item->setTrackNumber((int)new_tags->track->index);
71
+ MP4TagsFree( new_tags );
76
+ MP4TagsFree( new_tags );
80
- if ((field != M_DATE) && (field != M_TRACKNUMBER) &&
87
+ MP4TagsFree( new_tags );
88
value = trim_string(value);
93
item->setMetadata(MT_KEYS[field].upnp, sc->convert(value));
97
#if defined(HAVE_MAGIC)
99
- u_int32_t art_data_len;
100
+ void *art_data = 0;
101
+ u_int32_t art_data_len = 0;
104
+ const MP4Tags* new_tags = MP4TagsAlloc();
105
+ MP4TagsFetch(new_tags, mp4);
106
+ if (new_tags->artworkCount)
108
+ art_data = new_tags->artwork->data;
109
+ art_data_len = new_tags->artwork->size;
111
#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT
112
- if (MP4GetMetadataCoverArtCount(mp4) &&
113
- MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len))
115
- MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len);
116
+ if (new_tags->artworkCount && art_data_len > 0)
120
@@ -211,11 +212,10 @@
125
+ MP4TagsFree(new_tags);
130
if (art_mimetype != _(MIMETYPE_DEFAULT))
132
Ref<CdsResource> resource(new CdsResource(CH_MP4));
137
+ MP4TagsFree(new_tags);
141
@@ -249,26 +250,35 @@
143
if (ctype != ID3_ALBUM_ART)
144
throw _Exception(_("LibMP4V2Handler: got unknown content type: ") + ctype);
146
+ const MP4Tags* new_tags = MP4TagsAlloc();
147
+ if (MP4TagsFetch(new_tags, mp4))
149
#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT
150
- if (!MP4GetMetadataCoverArtCount(mp4))
151
- throw _Exception(_("LibMP4V2Handler: resource has no album art information"));
152
+ if (!new_tags->artworkCount)
153
+ throw _Exception(_("LibMP4V2Handler: resource has no album art information"));
155
- u_int8_t *art_data;
156
- u_int32_t art_data_len;
157
- if (MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len))
160
+ void *art_data = 0;
161
+ u_int32_t art_data_len;
163
+ const MP4TagArtwork* art = new_tags->artwork;
164
+ art_data = art->data;
165
+ art_data_len = art->size;
168
- *data_size = (off_t)art_data_len;
169
- Ref<IOHandler> h(new MemIOHandler((void *)art_data, art_data_len));
174
+ *data_size = (off_t)art_data_len;
175
+ Ref<IOHandler> h(new MemIOHandler(art_data, art_data_len));
176
+ MP4TagsFree(new_tags);
180
+ MP4TagsFree(new_tags);
183
throw _Exception(_("LibMP4V2Handler: could not serve album art "
184
- "for file") + item->getLocation() +
185
- " - embedded image not found");
186
+ "for file") + item->getLocation() +
187
+ " - embedded image not found");
190
#endif // HAVE_LIBMP4V2