[easytag/wip/help: 7/18] Implement cover art support for MP4
- From: David King <davidk src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [easytag/wip/help: 7/18] Implement cover art support for MP4
- Date: Fri, 11 Apr 2014 13:08:19 +0000 (UTC)
commit db6d50178a5f1b2e80faed02638a49be89b0a96e
Author: Santtu Lakkala <inz inz fi>
Date: Thu Apr 10 08:32:29 2014 +0300
Implement cover art support for MP4
Adds support for saving cover image into MP4 files, and show the images
tab for them as well. Add G_BEGIN_DECLS and G_END_DECLS in picture.h.
https://bugzilla.gnome.org/show_bug.cgi?id=701506
src/easytag.c | 2 +-
src/mp4_tag.cc | 51 +++++++++++++++++++++++++++++++++++++++++++++++++--
src/picture.h | 2 ++
3 files changed, 52 insertions(+), 3 deletions(-)
---
diff --git a/src/easytag.c b/src/easytag.c
index 86340e6..92a5def 100644
--- a/src/easytag.c
+++ b/src/easytag.c
@@ -4139,7 +4139,7 @@ void Tag_Area_Display_Controls (ET_File *ETFile)
gtk_widget_hide(GTK_WIDGET(URLEntry));
gtk_widget_show (GTK_WIDGET (EncodedByLabel));
gtk_widget_show (GTK_WIDGET (EncodedByEntry));
- et_tag_notebook_hide_images_tab (TagNoteBook);
+ et_tag_notebook_show_images_tab (TagNoteBook);
break;
#endif
diff --git a/src/mp4_tag.cc b/src/mp4_tag.cc
index b26ef8a..2434628 100644
--- a/src/mp4_tag.cc
+++ b/src/mp4_tag.cc
@@ -171,7 +171,23 @@ gboolean Mp4tag_Read_File_Tag (gchar *filename, File_Tag *FileTag)
/***********
* Picture *
***********/
- /* FIXME: Add picture support. */
+ const TagLib::MP4::ItemListMap extra_items = tag->itemListMap ();
+
+ if (extra_items.contains ("covr"))
+ {
+ const TagLib::MP4::Item cover = extra_items["covr"];
+ const TagLib::MP4::CoverArt &art = cover.toCoverArtList ().front ();
+
+ FileTag->picture = Picture_Allocate ();
+
+ FileTag->picture->size = art.data ().size ();
+ FileTag->picture->data = (guchar *)g_memdup (art.data ().data (),
+ art.data ().size ());
+ }
+ else
+ {
+ FileTag->picture = NULL;
+ }
return TRUE;
}
@@ -344,8 +360,39 @@ gboolean Mp4tag_Write_File_Tag (ET_File *ETFile)
/***********
* Picture *
***********/
+ TagLib::MP4::ItemListMap &extra_items = tag->itemListMap ();
+
+ if (FileTag->picture)
+ {
+ Picture_Format pf;
+ TagLib::MP4::CoverArt::Format f;
+
+ pf = Picture_Format_From_Data (FileTag->picture);
+
+ switch (pf)
+ {
+ case PICTURE_FORMAT_JPEG:
+ f = TagLib::MP4::CoverArt::JPEG;
+ break;
+ case PICTURE_FORMAT_PNG:
+ f = TagLib::MP4::CoverArt::PNG;
+ break;
+ case PICTURE_FORMAT_GIF:
+ f = TagLib::MP4::CoverArt::GIF;
+ break;
+ default:
+ g_critical ("Unknown format");
+ f = TagLib::MP4::CoverArt::JPEG;
+ break;
+ }
+
+ TagLib::MP4::CoverArt art (f, TagLib::ByteVector((char *)FileTag->picture->data,
+ FileTag->picture->size));
+
+ extra_items.insert ("covr",
+ TagLib::MP4::Item (TagLib::MP4::CoverArtList ().append (art)));
+ }
- /* FIXME: Add picture support. */
tag->setProperties (fields);
success = mp4file.save () ? TRUE : FALSE;
diff --git a/src/picture.h b/src/picture.h
index 14224fd..caf5616 100644
--- a/src/picture.h
+++ b/src/picture.h
@@ -24,6 +24,7 @@
#include "et_core.h"
+G_BEGIN_DECLS
/***************
* Declaration *
@@ -126,5 +127,6 @@ const gchar *Picture_Mime_Type_String (Picture_Format format);
gboolean Picture_Entry_View_Button_Pressed (GtkTreeView *treeview, GdkEventButton *event, gpointer data);
gboolean Picture_Entry_View_Key_Pressed (GtkTreeView *treeview, GdkEvent *event, gpointer data);
+G_END_DECLS
#endif /* __PICTURE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]