[FFmpeg-devel] [PATCH 5/6] MOV: episode and season number metadata

Baptiste Coudurier baptiste.coudurier
Mon Nov 23 06:03:06 CET 2009


On 11/22/09 8:14 PM, David Conrad wrote:
> ---
>   libavformat/mov.c    |   14 ++++++++++++++
>   libavformat/movenc.c |   25 +++++++++++++++++++++++++
>   2 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 8c42a7c..dee251d 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -93,6 +93,16 @@ static int mov_metadata_trkn(MOVContext *c, ByteIOContext *pb, unsigned len, con
>       return 0;
>   }
>
> +static int mov_metadata_be32(MOVContext *c, ByteIOContext *pb, unsigned len, const char *key)
> +{

I think mov won't never use le32. I feel mov_metadata_int32 is better, 
what do you think ?

> +    char buf[16];
> +
> +    snprintf(buf, sizeof(buf), "%d", get_be32(pb));
> +    av_metadata_set(&c->fc->metadata, key, buf);
> +
> +    return 0;
> +

I really think av_metadata_set_int could be introduced to factorize this 
code from all demuxers.

>   static int mov_read_udta_string(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
>   {
>   #ifdef MOV_EXPORT_ALL_METADATA
> @@ -122,6 +132,10 @@ static int mov_read_udta_string(MOVContext *c, ByteIOContext *pb, MOVAtom atom)
>       case MKTAG( 't','v','s','h'): key = "show";      break;
>       case MKTAG( 't','v','e','n'): key = "episode_id";break;
>       case MKTAG( 't','v','n','n'): key = "network";   break;
> +    case MKTAG( 't','v','s','n'): key = "season";
> +        parse = mov_metadata_be32; break;
> +    case MKTAG( 't','v','e','s'): key = "episode";
> +        parse = mov_metadata_be32; break;
>       case MKTAG( 't','r','k','n'): key = "track";
>           parse = mov_metadata_trkn; break;
>       }

Humm, the switch is becoming huge, what about adding a table ?

> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index ac6378c..c2b2154 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -1361,6 +1361,29 @@ static int mov_write_trkn_tag(ByteIOContext *pb, MOVMuxContext *mov,
>       return size;
>   }
>
> +static int mov_write_be32_metadata(AVFormatContext *s, ByteIOContext *pb,
> +                                   const char *name, const char *tag)
> +{
> +    AVMetadataTag *t = av_metadata_get(s->metadata, tag, NULL, 0);
> +    int size = 0;
> +    if (t) {
> +        int64_t pos = url_ftell(pb);
> +        put_be32(pb, 0); /* size */
> +        put_tag(pb, name);
> +        {
> +            int64_t pos = url_ftell(pb);
> +            put_be32(pb, 0); /* size */
> +            put_tag(pb, "data");
> +            put_be32(pb, 0);        // 8 bytes empty
> +            put_be32(pb, 0);
> +            put_be32(pb, atoi(t->value));
> +            updateSize(pb, pos);
> +        }
> +        size = updateSize(pb, pos);
> +    }
> +    return size;
> +}

This code is ugly in the first place (where it was copied/pasted from), 
it has to be simplified first.

[...]

-- 
Baptiste COUDURIER
Key fingerprint                 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer                                  http://www.ffmpeg.org



More information about the ffmpeg-devel mailing list