Created
June 6, 2012 16:52
-
-
Save menski/2883234 to your computer and use it in GitHub Desktop.
easytag-2.1.7 patch to work with libmp4v2 2.0.0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff -rupN easytag-2.1.7/src/mp4_header.c easytag-2.1.7-patch/src/mp4_header.c | |
--- easytag-2.1.7/src/mp4_header.c 2011-07-04 02:59:21.000000000 +0200 | |
+++ easytag-2.1.7-patch/src/mp4_header.c 2012-06-06 18:29:54.515139743 +0200 | |
@@ -204,7 +204,7 @@ gboolean Mp4_Header_Read_File_Info (gcha | |
/* Get size of file */ | |
ETFileInfo->size = Get_File_Size(filename); | |
- if ((file = MP4Read(filename, 0)) == MP4_INVALID_FILE_HANDLE ) | |
+ if ((file = MP4Read(filename)) == MP4_INVALID_FILE_HANDLE ) | |
{ | |
gchar *filename_utf8 = filename_to_display(filename); | |
//g_print(_("ERROR while opening file: '%s' (%s)."),filename_utf8,g_strerror(errno)); | |
@@ -218,7 +218,7 @@ gboolean Mp4_Header_Read_File_Info (gcha | |
{ | |
gchar *filename_utf8 = filename_to_display(filename); | |
Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,("Contains no audio track")); | |
- MP4Close(file); | |
+ MP4Close(file,0); | |
g_free(filename_utf8); | |
return FALSE; | |
} | |
@@ -243,7 +243,7 @@ gboolean Mp4_Header_Read_File_Info (gcha | |
ETFileInfo->mode = MP4GetTrackAudioChannels(file, trackId); | |
ETFileInfo->duration = MP4ConvertFromTrackDuration(file, trackId, MP4GetTrackDuration(file, trackId), MP4_SECS_TIME_SCALE); | |
- MP4Close(file); | |
+ MP4Close(file,0); | |
return TRUE; | |
} | |
diff -rupN easytag-2.1.7/src/mp4_tag.c easytag-2.1.7-patch/src/mp4_tag.c | |
--- easytag-2.1.7/src/mp4_tag.c 2011-07-04 02:59:21.000000000 +0200 | |
+++ easytag-2.1.7-patch/src/mp4_tag.c 2012-06-06 18:30:01.565101551 +0200 | |
@@ -80,10 +80,7 @@ gboolean Mp4tag_Read_File_Tag (gchar *fi | |
{ | |
FILE *file; | |
MP4FileHandle mp4file = NULL; | |
- uint16_t track, track_total; | |
- uint16_t disk, disktotal; | |
- u_int8_t *coverArt; | |
- u_int32_t coverSize; | |
+ const MP4Tags *mp4tags; | |
Picture *prev_pic = NULL; | |
#ifdef NEWMP4 | |
gint pic_num; | |
@@ -102,7 +99,7 @@ gboolean Mp4tag_Read_File_Tag (gchar *fi | |
fclose(file); // We close it cause mp4 opens/closes file itself | |
/* Get data from tag */ | |
- mp4file = MP4Read(filename, 0); | |
+ mp4file = MP4Read(filename); | |
if (mp4file == MP4_INVALID_FILE_HANDLE) | |
{ | |
gchar *filename_utf8 = filename_to_display(filename); | |
@@ -112,72 +109,105 @@ gboolean Mp4tag_Read_File_Tag (gchar *fi | |
} | |
/* TODO Add error detection */ | |
- | |
- /********* | |
- * Title * | |
- *********/ | |
- MP4GetMetadataName(mp4file, &FileTag->title); | |
- | |
- /********** | |
- * Artist * | |
- **********/ | |
- MP4GetMetadataArtist(mp4file, &FileTag->artist); | |
- | |
- /********* | |
- * Album * | |
- *********/ | |
- MP4GetMetadataAlbum(mp4file, &FileTag->album); | |
- | |
- /********************** | |
- * Disk / Total Disks * | |
- **********************/ | |
- if (MP4GetMetadataDisk(mp4file, &disk, &disktotal)) | |
- { | |
- if (disk != 0 && disktotal != 0) | |
- FileTag->disc_number = g_strdup_printf("%d/%d",(gint)disk,(gint)disktotal); | |
- else if (disk != 0) | |
- FileTag->disc_number = g_strdup_printf("%d",(gint)disk); | |
- else if (disktotal != 0) | |
- FileTag->disc_number = g_strdup_printf("/%d",(gint)disktotal); | |
- //if (disktotal != 0) | |
- // FileTag->disk_number_total = g_strdup_printf("%d",(gint)disktotal); | |
- } | |
- | |
- /******** | |
- * Year * | |
- ********/ | |
- MP4GetMetadataYear(mp4file, &FileTag->year); | |
- | |
- /************************* | |
- * Track and Total Track * | |
- *************************/ | |
- if (MP4GetMetadataTrack(mp4file, &track, &track_total)) | |
- { | |
- if (track != 0) | |
- FileTag->track = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track); // Just to have numbers like this : '01', '05', '12', ... | |
- if (track_total != 0) | |
- FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)track_total); // Just to have numbers like this : '01', '05', '12', ... | |
- } | |
- | |
- /********* | |
- * Genre * | |
- *********/ | |
- MP4GetMetadataGenre(mp4file, &FileTag->genre); | |
- | |
- /*********** | |
- * Comment * | |
- ***********/ | |
- MP4GetMetadataComment(mp4file, &FileTag->comment); | |
- | |
- /********************** | |
- * Composer or Writer * | |
- **********************/ | |
- MP4GetMetadataWriter(mp4file, &FileTag->composer); | |
- | |
- /***************** | |
- * Encoding Tool * | |
- *****************/ | |
- MP4GetMetadataTool(mp4file, &FileTag->encoded_by); | |
+ mp4tags = MP4TagsAlloc(); | |
+ if (!MP4TagsFetch(mp4tags,mp4file)) { | |
+ gchar *filename_utf8 = filename_to_display(filename); | |
+ Log_Print(LOG_ERROR,_("Error reading tags from %s."),filename_utf8); | |
+ g_free(filename_utf8); | |
+ return FALSE; | |
+ } | |
+ | |
+ /********* | |
+ * Title * | |
+ *********/ | |
+ if (mp4tags->name) | |
+ FileTag->title = strdup(mp4tags->name); | |
+ else | |
+ FileTag->title = NULL; | |
+ | |
+ /********** | |
+ * Artist * | |
+ **********/ | |
+ if (mp4tags->artist) | |
+ FileTag->artist = strdup(mp4tags->artist); | |
+ else | |
+ FileTag->artist = NULL; | |
+ | |
+ /********* | |
+ * Album * | |
+ *********/ | |
+ if (mp4tags->album) | |
+ FileTag->album = strdup(mp4tags->album); | |
+ else | |
+ FileTag->album = NULL; | |
+ | |
+ /********************** | |
+ * Disk / Total Disks * | |
+ **********************/ | |
+ if (mp4tags->disk) | |
+ { | |
+ if (mp4tags->disk->index != 0 && mp4tags->disk->total != 0) | |
+ FileTag->disc_number = g_strdup_printf("%d/%d", | |
+ (gint)mp4tags->disk->index, | |
+ (gint)mp4tags->disk->total); | |
+ else if (mp4tags->disk->index != 0) | |
+ FileTag->disc_number = g_strdup_printf("%d",(gint)mp4tags->disk->index); | |
+ else if (mp4tags->disk->total != 0) | |
+ FileTag->disc_number = g_strdup_printf("/%d",(gint)mp4tags->disk->total); | |
+ //if (disktotal != 0) | |
+ // FileTag->disk_number_total = g_strdup_printf("%d",(gint)disktotal); | |
+ } | |
+ | |
+ /******** | |
+ * Year * | |
+ ********/ | |
+ if (mp4tags->releaseDate) | |
+ FileTag->year = strdup(mp4tags->releaseDate); | |
+ else | |
+ FileTag->year = NULL; | |
+ | |
+ /************************* | |
+ * Track and Total Track * | |
+ *************************/ | |
+ if (mp4tags->track) | |
+ { | |
+ if (mp4tags->track->index != 0) | |
+ FileTag->track = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)mp4tags->track->index); // Just to have numbers like this : '01', '05', '12', ... | |
+ if (mp4tags->track->total != 0) | |
+ FileTag->track_total = g_strdup_printf("%.*d",NUMBER_TRACK_FORMATED_SPIN_BUTTON,(gint)mp4tags->track->total); // Just to have numbers like this : '01', '05', '12', ... | |
+ } | |
+ | |
+ /********* | |
+ * Genre * | |
+ *********/ | |
+ if (mp4tags->genre) | |
+ FileTag->genre = strdup(mp4tags->genre); | |
+ else | |
+ FileTag->genre = NULL; | |
+ | |
+ /*********** | |
+ * Comment * | |
+ ***********/ | |
+ if (mp4tags->comments) | |
+ FileTag->comment = strdup(mp4tags->comments); | |
+ else | |
+ FileTag->comment = NULL; | |
+ | |
+ /********************** | |
+ * Composer or Writer * | |
+ **********************/ | |
+ if (mp4tags->composer) | |
+ FileTag->composer = strdup(mp4tags->composer); | |
+ else | |
+ FileTag->composer = NULL; | |
+ | |
+ /***************** | |
+ * Encoding Tool * | |
+ *****************/ | |
+ if (mp4tags->encodingTool) | |
+ FileTag->encoded_by = strdup(mp4tags->encodingTool); | |
+ else | |
+ FileTag->encoded_by = NULL; | |
/* Unimplemented | |
Tempo / BPM | |
@@ -188,9 +218,7 @@ gboolean Mp4tag_Read_File_Tag (gchar *fi | |
* Picture * | |
***********/ | |
#ifdef NEWMP4 | |
- // There version can handle multiple pictures! | |
- // Version 1.6 of libmp4v2 introduces an index argument for MP4GetMetadataCoverart | |
- for (pic_num = 0; (MP4GetMetadataCoverArt( mp4file, &coverArt, &coverSize,pic_num )); pic_num++) | |
+ for (pic_num = 0; pic_num < mp4tags->artworkCount; pic_num++) | |
#else | |
// There version handle only one picture! | |
if ( MP4GetMetadataCoverArt( mp4file, &coverArt, &coverSize ) ) | |
@@ -205,15 +233,16 @@ gboolean Mp4tag_Read_File_Tag (gchar *fi | |
prev_pic->next = pic; | |
prev_pic = pic; | |
- pic->size = coverSize; | |
- pic->data = coverArt; | |
+ pic->size = mp4tags->artwork[pic_num].size; | |
+ pic->data = mp4tags->artwork[pic_num].data; | |
pic->type = PICTURE_TYPE_FRONT_COVER; | |
pic->description = NULL; | |
} | |
/* Free allocated data */ | |
- MP4Close(mp4file); | |
+ MP4TagsFree(mp4tags); | |
+ MP4Close(mp4file,0); | |
return TRUE; | |
} | |
@@ -234,6 +263,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
gchar *filename_utf8; | |
FILE *file; | |
MP4FileHandle mp4file = NULL; | |
+ const MP4Tags *mp4tags; | |
+ MP4TagDisk disktag; | |
+ MP4TagTrack tracktag; | |
+ MP4TagArtwork artwork; | |
gint error = 0; | |
if (!ETFile || !ETFile->FileTag) | |
@@ -252,23 +285,28 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
fclose(file); | |
/* Open file for writing */ | |
- mp4file = MP4Modify(filename,0,0); | |
+ mp4file = MP4Modify(filename,0); | |
if (mp4file == MP4_INVALID_FILE_HANDLE) | |
{ | |
Log_Print(LOG_ERROR,_("ERROR while opening file: '%s' (%s)."),filename_utf8,_("MP4 format invalid")); | |
return FALSE; | |
} | |
+ mp4tags = MP4TagsAlloc(); | |
+ if (!MP4TagsFetch(mp4tags,mp4file)) { | |
+ Log_Print(LOG_ERROR,_("Error reading tags from %s."),filename_utf8); | |
+ return FALSE; | |
+ } | |
+ | |
/********* | |
* Title * | |
*********/ | |
if (FileTag->title && g_utf8_strlen(FileTag->title, -1) > 0) | |
{ | |
- MP4SetMetadataName(mp4file, FileTag->title); | |
+ MP4TagsSetName(mp4tags, FileTag->title); | |
}else | |
{ | |
- //MP4DeleteMetadataName(mp4file); // Not available on mpeg4ip-1.2 (only in 1.3) | |
- MP4SetMetadataName(mp4file, ""); | |
+ MP4TagsSetName(mp4tags, NULL); | |
} | |
/********** | |
@@ -276,11 +314,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
**********/ | |
if (FileTag->artist && g_utf8_strlen(FileTag->artist, -1) > 0) | |
{ | |
- MP4SetMetadataArtist(mp4file, FileTag->artist); | |
+ MP4TagsSetArtist(mp4tags, FileTag->artist); | |
}else | |
{ | |
- //MP4DeleteMetadataArtist(mp4file); | |
- MP4SetMetadataArtist(mp4file, ""); | |
+ MP4TagsSetArtist(mp4tags, NULL); | |
} | |
/********* | |
@@ -288,11 +325,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
*********/ | |
if (FileTag->album && g_utf8_strlen(FileTag->album, -1) > 0) | |
{ | |
- MP4SetMetadataAlbum(mp4file, FileTag->album); | |
+ MP4TagsSetAlbum(mp4tags, FileTag->album); | |
}else | |
{ | |
- //MP4DeleteMetadataAlbum(mp4file); | |
- MP4SetMetadataAlbum(mp4file, ""); | |
+ MP4TagsSetAlbum(mp4tags, NULL); | |
} | |
/********************** | |
@@ -330,11 +366,12 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
if (FileTag->disc_number_total) | |
disktotal = atoi(FileTag->disc_number_total); | |
*/ | |
- MP4SetMetadataDisk(mp4file, disk, disktotal); | |
+ disktag.index = disk; | |
+ disktag.total = disktotal; | |
+ MP4TagsSetDisk(mp4tags, &disktag); | |
}else | |
{ | |
- //MP4DeleteMetadataDisk(mp4file); | |
- MP4SetMetadataDisk(mp4file, 0, 0); | |
+ MP4TagsSetDisk(mp4tags, NULL); | |
} | |
/******** | |
@@ -342,18 +379,17 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
********/ | |
if (FileTag->year && g_utf8_strlen(FileTag->year, -1) > 0) | |
{ | |
- MP4SetMetadataYear(mp4file, FileTag->year); | |
+ MP4TagsSetReleaseDate(mp4tags, FileTag->year); | |
}else | |
{ | |
- //MP4DeleteMetadataYear(mp4file); | |
- MP4SetMetadataYear(mp4file, ""); | |
+ MP4TagsSetReleaseDate(mp4tags, NULL); | |
} | |
/************************* | |
* Track and Total Track * | |
*************************/ | |
if ( (FileTag->track && g_utf8_strlen(FileTag->track, -1) > 0) | |
- || (FileTag->track_total && g_utf8_strlen(FileTag->track_total, -1) > 0) ) | |
+ || (FileTag->track_total && g_utf8_strlen(FileTag->track_total, -1) > 0 ) ) | |
{ | |
uint16_t track = 0; | |
uint16_t track_total = 0; | |
@@ -361,11 +397,12 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
track = atoi(FileTag->track); | |
if (FileTag->track_total) | |
track_total = atoi(FileTag->track_total); | |
- MP4SetMetadataTrack(mp4file, track, track_total); | |
+ tracktag.index = track; | |
+ tracktag.total = track_total; | |
+ MP4TagsSetTrack(mp4tags, &tracktag); | |
}else | |
+ MP4TagsSetTrack(mp4tags, NULL); | |
{ | |
- //MP4DeleteMetadataTrack(mp4file); | |
- MP4SetMetadataTrack(mp4file, 0, 0); | |
} | |
/********* | |
@@ -373,11 +410,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
*********/ | |
if (FileTag->genre && g_utf8_strlen(FileTag->genre, -1) > 0 ) | |
{ | |
- MP4SetMetadataGenre(mp4file, FileTag->genre); | |
+ MP4TagsSetGenre(mp4tags, FileTag->genre); | |
}else | |
{ | |
- //MP4DeleteMetadataGenre(mp4file); | |
- MP4SetMetadataGenre(mp4file, ""); | |
+ MP4TagsSetGenre(mp4tags, ""); | |
} | |
/*********** | |
@@ -385,11 +421,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
***********/ | |
if (FileTag->comment && g_utf8_strlen(FileTag->comment, -1) > 0) | |
{ | |
- MP4SetMetadataComment(mp4file, FileTag->comment); | |
+ MP4TagsSetComments(mp4tags, FileTag->comment); | |
}else | |
{ | |
- //MP4DeleteMetadataComment(mp4file); | |
- MP4SetMetadataComment(mp4file, ""); | |
+ MP4TagsSetComments(mp4tags, NULL); | |
} | |
/********************** | |
@@ -397,11 +432,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
**********************/ | |
if (FileTag->composer && g_utf8_strlen(FileTag->composer, -1) > 0) | |
{ | |
- MP4SetMetadataWriter(mp4file, FileTag->composer); | |
+ MP4TagsSetComposer(mp4tags, FileTag->composer); | |
}else | |
{ | |
- //MP4DeleteMetadataWriter(mp4file); | |
- MP4SetMetadataWriter(mp4file, ""); | |
+ MP4TagsSetComposer(mp4tags, NULL); | |
} | |
/***************** | |
@@ -409,11 +443,10 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
*****************/ | |
if (FileTag->encoded_by && g_utf8_strlen(FileTag->encoded_by, -1) > 0) | |
{ | |
- MP4SetMetadataTool(mp4file, FileTag->encoded_by); | |
+ MP4TagsSetEncodingTool(mp4tags, FileTag->encoded_by); | |
}else | |
{ | |
- //MP4DeleteMetadataTool(mp4file); | |
- MP4SetMetadataTool(mp4file, ""); | |
+ MP4TagsSetEncodingTool(mp4tags, NULL); | |
} | |
/*********** | |
@@ -423,19 +456,32 @@ gboolean Mp4tag_Write_File_Tag (ET_File | |
// Can handle only one picture... | |
Picture *pic; | |
- //MP4DeleteMetadataCoverArt(mp4file); | |
- MP4SetMetadataCoverArt(mp4file, NULL, 0); | |
+ MP4TagsSetArtwork(mp4tags,0,NULL); | |
for( pic = FileTag->picture; pic; pic = pic->next ) | |
{ | |
if( pic->type == PICTURE_TYPE_FRONT_COVER ) | |
{ | |
- MP4SetMetadataCoverArt(mp4file, pic->data, pic->size); | |
+ artwork.data = pic->data; | |
+ artwork.size = pic->size; | |
+ switch (pic->type) { | |
+ case PICTURE_FORMAT_JPEG: | |
+ artwork.type = MP4_ART_JPEG; | |
+ break; | |
+ case PICTURE_FORMAT_PNG: | |
+ artwork.type = MP4_ART_PNG; | |
+ break; | |
+ default: | |
+ artwork.type = MP4_ART_UNDEFINED; | |
+ } | |
+ MP4TagsSetArtwork(mp4tags, 1, &artwork); | |
} | |
} | |
} | |
- MP4Close(mp4file); | |
+ MP4TagsStore(mp4tags,mp4file); | |
+ MP4TagsFree(mp4tags); | |
+ MP4Close(mp4file,0); | |
if (error) return FALSE; | |
else return TRUE; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment