multimedia/mediatomb: Fix building with libmp4v2.

Signed-off-by: Heinz Wiesinger <pprkut@slackbuilds.org>
This commit is contained in:
Heinz Wiesinger 2012-10-09 11:00:37 +02:00 committed by dsomero
parent eef95f8c3f
commit 8bb58d729b
2 changed files with 191 additions and 1 deletions

View file

@ -0,0 +1,187 @@
diff -urN old/src/metadata/libmp4v2_handler.cc new/src/metadata/libmp4v2_handler.cc
--- old/src/metadata/libmp4v2_handler.cc 2012-04-05 01:46:26.000000000 +0200
+++ new/src/metadata/libmp4v2_handler.cc 2012-04-05 02:01:24.000000000 +0200
@@ -65,29 +65,28 @@
static void addMetaField(metadata_fields_t field, MP4FileHandle mp4, Ref<CdsItem> item)
{
String value;
- char* mp4_retval = NULL;
- u_int16_t track;
- u_int16_t total_tracks;
-
Ref<StringConverter> sc = StringConverter::i2i();
+ const MP4Tags* new_tags = MP4TagsAlloc();
+
+ if (!MP4TagsFetch(new_tags, mp4))
+ return;
+
switch (field)
{
case M_TITLE:
- MP4GetMetadataName(mp4, &mp4_retval);
+ value = new_tags->name;
break;
case M_ARTIST:
- MP4GetMetadataArtist(mp4, &mp4_retval);
+ value = new_tags->artist;
break;
case M_ALBUM:
- MP4GetMetadataAlbum(mp4, &mp4_retval);
+ value = new_tags->album;
break;
case M_DATE:
- MP4GetMetadataYear(mp4, &mp4_retval);
- if (mp4_retval)
+ value = new_tags->releaseDate;
+ if (value.length() > 0)
{
- value = mp4_retval;
- free(mp4_retval);
if (string_ok(value))
value = value + "-01-01";
else
@@ -95,34 +94,31 @@
}
break;
case M_GENRE:
- MP4GetMetadataGenre(mp4, &mp4_retval);
+ value = new_tags->genre;
break;
case M_DESCRIPTION:
- MP4GetMetadataComment(mp4, &mp4_retval);
+ value = new_tags->comments;
break;
case M_TRACKNUMBER:
- MP4GetMetadataTrack(mp4, &track, &total_tracks);
- if (track > 0)
+ if (new_tags->track)
{
- value = String::from(track);
- item->setTrackNumber((int)track);
+ value = String::from(new_tags->track->index);
+ item->setTrackNumber((int)new_tags->track->index);
}
else
+ {
+ MP4TagsFree( new_tags );
return;
+ }
break;
default:
+ MP4TagsFree( new_tags );
return;
}
- if ((field != M_DATE) && (field != M_TRACKNUMBER) &&
- (mp4_retval))
- {
- value = mp4_retval;
- free(mp4_retval);
- }
-
+ MP4TagsFree( new_tags );
value = trim_string(value);
-
+
if (string_ok(value))
{
item->setMetadata(MT_KEYS[field].upnp, sc->convert(value));
@@ -190,14 +186,19 @@
}
#if defined(HAVE_MAGIC)
- u_int8_t *art_data;
- u_int32_t art_data_len;
+ void *art_data = 0;
+ u_int32_t art_data_len = 0;
String art_mimetype;
+
+ const MP4Tags* new_tags = MP4TagsAlloc();
+ MP4TagsFetch(new_tags, mp4);
+ if (new_tags->artworkCount)
+ {
+ art_data = new_tags->artwork->data;
+ art_data_len = new_tags->artwork->size;
+ }
#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT
- if (MP4GetMetadataCoverArtCount(mp4) &&
- MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len))
-#else
- MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len);
+ if (new_tags->artworkCount && art_data_len > 0)
#endif
{
if (art_data)
@@ -211,11 +212,10 @@
}
catch (Exception ex)
{
- free(art_data);
+ MP4TagsFree(new_tags);
throw ex;
}
- free(art_data);
if (art_mimetype != _(MIMETYPE_DEFAULT))
{
Ref<CdsResource> resource(new CdsResource(CH_MP4));
@@ -225,6 +225,7 @@
}
}
}
+ MP4TagsFree(new_tags);
#endif
MP4Close(mp4);
}
@@ -249,26 +250,35 @@
if (ctype != ID3_ALBUM_ART)
throw _Exception(_("LibMP4V2Handler: got unknown content type: ") + ctype);
+
+ const MP4Tags* new_tags = MP4TagsAlloc();
+ if (MP4TagsFetch(new_tags, mp4))
+ {
#ifdef HAVE_MP4_GET_METADATA_COVER_ART_COUNT
- if (!MP4GetMetadataCoverArtCount(mp4))
- throw _Exception(_("LibMP4V2Handler: resource has no album art information"));
+ if (!new_tags->artworkCount)
+ throw _Exception(_("LibMP4V2Handler: resource has no album art information"));
#endif
- u_int8_t *art_data;
- u_int32_t art_data_len;
- if (MP4GetMetadataCoverArt(mp4, &art_data, &art_data_len))
- {
- if (art_data)
+ void *art_data = 0;
+ u_int32_t art_data_len;
+
+ const MP4TagArtwork* art = new_tags->artwork;
+ art_data = art->data;
+ art_data_len = art->size;
+ if (art)
{
- *data_size = (off_t)art_data_len;
- Ref<IOHandler> h(new MemIOHandler((void *)art_data, art_data_len));
- free(art_data);
- return h;
+ if (art_data)
+ {
+ *data_size = (off_t)art_data_len;
+ Ref<IOHandler> h(new MemIOHandler(art_data, art_data_len));
+ MP4TagsFree(new_tags);
+ return h;
+ }
}
+ MP4TagsFree(new_tags);
}
-
throw _Exception(_("LibMP4V2Handler: could not serve album art "
- "for file") + item->getLocation() +
- " - embedded image not found");
+ "for file") + item->getLocation() +
+ " - embedded image not found");
}
#endif // HAVE_LIBMP4V2
De binära filerna old/src/metadata/.libmp4v2_handler.cc.swp och new/src/metadata/.libmp4v2_handler.cc.swp skiljer

View file

@ -24,7 +24,7 @@
PRGNAM=mediatomb
VERSION=0.12.1
BUILD=${BUILD:-3}
BUILD=${BUILD:-4}
TAG=${TAG:-_SBo}
if [ -z "$ARCH" ]; then
@ -81,6 +81,9 @@ chmod -R u+w,go+r-w,a-s .
patch -p1 -i $CWD/libav_0.7_support.patch
patch -p1 -i $CWD/libavformat.patch
# Fix building with new libmp4v2
patch -p1 -i $CWD/mediatomb-0.12.1-libmp4v2_191_p479.patch
# Fix compiling with gcc 4.7
patch -p1 -i $CWD/mediatomb-0.12.1-gcc46.patch
patch -p1 -i $CWD/mediatomb-0.12.1-gcc47.patch