This patch improves MP4 compilation handling. The compilation field is empty, even for iTunes created files that are marked as having a compilation; from looking at the source to the mp4ff library I think it is a library limitation. The patch sets this field to "0" or "1", and fixes a bug introduced by thor's commit that caused all tracks to be marked as part of a compilation with "Unknown Artist".

Please commit this to CVS prior to 0.17 since what is in CVS doesn't work very well (but at least it compiles :) ).

Lonnie Hutchinson wrote:

I'm looking into the mp4ff_meta_get_compilation() issue.

[EMAIL PROTECTED] wrote:

----------------------------------------------------------------------------

Changes committed by thor on Mon Feb  7 19:52:23 2005

Modified Files:
  in mythmusic/mythmusic:
       metaiomp4.cpp playbackbox.cpp Log Message:

Hack-around to let metaiomp4.cpp compile with current Metadata constructor.
If someone has actual mp4/aac files and can figure out what the
mp4ff_meta_get_compilation() method sets as the char * value, this could be
made much better.
Check that curMeta exists before firing up the metadata editor (no more
segfaults from "i" when browsing the tree and nothing is playing).


----------------------------------------------------------------------------



------------------------------------------------------------------------

_______________________________________________
mythtv-commits mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-commits



_______________________________________________ mythtv-dev mailing list [email protected] http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev


Index: mythmusic/metaiomp4.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythmusic/mythmusic/metaiomp4.cpp,v
retrieving revision 1.2
diff -u -d -w -r1.2 metaiomp4.cpp
--- mythmusic/metaiomp4.cpp     7 Feb 2005 19:52:23 -0000       1.2
+++ mythmusic/metaiomp4.cpp     8 Feb 2005 02:06:16 -0000
@@ -107,7 +107,7 @@
       fclose(callback_data.file);
       return false;
     }
-    mp4ff_mdata->tags = (mp4ff_tag_t*)malloc(6 * sizeof(mp4ff_tag_t));
+    mp4ff_mdata->tags = (mp4ff_tag_t*)malloc(7 * sizeof(mp4ff_tag_t));
     if (!mp4ff_mdata) {
       free(mp4_cb);
       free(mp4ff_mdata);
@@ -150,7 +150,10 @@
     mp4ff_mdata->tags[5].value = (char*)malloc(128);
     snprintf(mp4ff_mdata->tags[5].value, 128, "%d", mdata->Track());
 
-    mp4ff_mdata->count = 6;
+    mp4ff_mdata->tags[6].item = "compilation";
+    mp4ff_mdata->tags[6].value = (char*)(mdata->Compilation() ? "1" : "0");
+
+    mp4ff_mdata->count = 7;
 
     mp4ff_meta_update(mp4_cb, mp4ff_mdata);
 
@@ -268,15 +271,11 @@
 
     if (mp4ff_meta_get_compilation(mp4_ifile, &char_storage))
     {
-        //
-        //  Does the returned char_storage tell us anything?
-        //  I dunno?
-        //
-
-        compilation = true;
+        compilation = (0 == strncmp("1", char_storage, 1));
         free(char_storage);
     }
 
+
     //
     //  Find the AAC track inside this mp4 which we need to do to find the
     //  length
@@ -337,14 +336,16 @@
     metadataSanityCheck(&artist, &album, &title, &genre);
 
     Metadata *retdata = new Metadata(filename, 
-                                     "",
                                      artist, 
+                                     compilation ? artist : "",
                                      album, 
                                      title, 
                                      genre,
                                      year, 
                                      tracknum, 
                                      length,
+                                     0, 0, 0,
+                                     "",
                                      compilation);
 
     //retdata->setComposer(writer);
_______________________________________________
mythtv-dev mailing list
[email protected]
http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev

Reply via email to