On Wed, Jun 08, 2016 at 04:16:31PM +0200, miniupnp wrote: > Le 08/06/2016 15:37, Michael Niedermayer a écrit : > > On Wed, Jun 08, 2016 at 12:03:10AM +0200, miniupnp wrote: > >>>> On 6/1/16, miniupnp <miniu...@free.fr> wrote: > >>>>> Hello, > >>>>> > >>>>> I'm using the .AU audio file format and noticed that FFmpeg always put 8 > >>>>> zero's in the annotation field. > >>>>> SOX does use the annotation field to put metadata > >>>>> (Title/Author/Album/Genre/Track) > >>>>> > >>>>> I don't think there is any precise specification for this AU annotation > >>>>> field as long as it is a null terminated character string, but what SOX > >>>>> does looks good. > >>>>> > >>>>> Attached are my patches to write metadata to AU files. > >>>> look fine to me. > >>> applied > >>> thx > >> And now is the patch to READ theses metadata in AU files. > >> > >> Regards, > >> > >> Thomas Bernard > >> > >> > >> au.c | 69 > >> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- > >> 1 file changed, 67 insertions(+), 2 deletions(-) > >> 501f81b2747e0758344d189918af2863d76c774d > >> 0001-Read-MetaData-from-AU-Sun-audio-file-header.patch > >> From 10ca03e6a944b6a5385a92d72f633e98a0c1b57f Mon Sep 17 00:00:00 2001 > >> From: Thomas Bernard <miniu...@free.fr> > >> Date: Tue, 7 Jun 2016 00:25:38 +0200 > >> Subject: [PATCH] Read MetaData from AU Sun audio file header > >> > >> recognize title= album= artist= genre= track= > >> --- > >> libavformat/au.c | 69 > >> ++++++++++++++++++++++++++++++++++++++++++++++++++++-- > >> 1 file changed, 67 insertions(+), 2 deletions(-) > >> > >> diff --git a/libavformat/au.c b/libavformat/au.c > >> index 4a0400b..dba2a83 100644 > >> --- a/libavformat/au.c > >> +++ b/libavformat/au.c > >> @@ -66,6 +66,71 @@ static int au_probe(AVProbeData *p) > >> return 0; > >> } > >> > >> +static int au_read_annotation(AVFormatContext *s, int size) > >> +{ > >> + static const char * keys[] = { > >> + "title", > >> + "artist", > >> + "album", > >> + "track", > >> + "genre", > >> + NULL }; > >> + AVIOContext *pb = s->pb; > >> + enum { PARSE_KEY, PARSE_VALUE, PARSE_FINISHED } state = PARSE_KEY; > >> + char c; > >> + AVBPrint bprint; > >> + char * key = NULL; > >> + char * value = NULL; > >> + int i; > >> + > >> + av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); > >> + > >> + while (size-- > 0) { > >> + c = avio_r8(pb); > >> + switch(state) { > >> + case PARSE_KEY: > >> + if (c == '\0') { > >> + state = PARSE_FINISHED; > >> + } else if (c == '=') { > >> + av_bprint_finalize(&bprint, &key); > >> + av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); > >> + state = PARSE_VALUE; > >> + } else { > >> + av_bprint_chars(&bprint, c, 1); > >> + } > >> + break; > >> + case PARSE_VALUE: > >> + if (c == '\0' || c == '\n') { > >> + if (av_bprint_finalize(&bprint, &value) != 0) { > >> + av_log(s, AV_LOG_ERROR, "Memory error while parsing > >> AU metadata.\n"); > >> + } else { > >> + av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); > >> + for (i = 0; keys[i] != NULL && key != NULL; i++) { > >> + if (av_strcasecmp(keys[i], key) == 0) { > >> + av_dict_set(&(s->metadata), keys[i], value, > >> AV_DICT_DONT_STRDUP_VAL); > >> + av_freep(&key); > >> + value = NULL; > >> + } > >> + } > >> + } > >> + if (key != NULL) av_freep(&key); > >> + if (value != NULL) av_freep(&value); > > redundant if() > > I was not sure of what av_freep(&key) does when key==NULL. > > here is the patch, plus a potential memory leak fix.
> au.c | 69 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- > 1 file changed, 67 insertions(+), 2 deletions(-) > 7d31a805e88e97900e5bcc78962afb280a89ebf6 > 0001-Read-MetaData-from-AU-Sun-audio-file-header.patch > From 10ca03e6a944b6a5385a92d72f633e98a0c1b57f Mon Sep 17 00:00:00 2001 > From: Thomas Bernard <miniu...@free.fr> > Date: Tue, 7 Jun 2016 00:25:38 +0200 > Subject: [PATCH 1/2] Read MetaData from AU Sun audio file header > > recognize title= album= artist= genre= track= patches applied [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Dictatorship naturally arises out of democracy, and the most aggravated form of tyranny and slavery out of the most extreme liberty. -- Plato
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel