On Wed,  1 Feb 2017 12:50:51 +0100
Paul B Mahol <one...@gmail.com> wrote:

> Signed-off-by: Paul B Mahol <one...@gmail.com>
> ---
>  libavformat/mov.c | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 9ae4f8c..75e1c9c60 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -3764,6 +3764,25 @@ static int mov_read_keys(MOVContext *c, AVIOContext 
> *pb, MOVAtom atom)
>      return 0;
>  }
>  
> +static int mov_read_xml(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> +{
> +    uint8_t *xml;
> +
> +    if (atom.size < 5)
> +        return 0;
> +
> +    avio_skip(pb, 4);
> +    xml = av_calloc(atom.size - 4 + 1, sizeof(uint8_t));
> +    if (!xml)
> +        return AVERROR(ENOMEM);
> +
> +    avio_read(pb, xml, atom.size - 4);
> +    av_dict_set(&c->fc->metadata, "xml", xml, 0);
> +    av_free(xml);
> +
> +    return 0;
> +}
> +
>  static int mov_read_custom(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>  {
>      int64_t end = avio_tell(pb) + atom.size;
> @@ -5280,6 +5299,12 @@ static int mov_read_default(MOVContext *c, AVIOContext 
> *pb, MOVAtom atom)
>              parse = mov_read_keys;
>          }
>  
> +        if (!parse &&
> +            atom.type == MKTAG('m','e','t','a') &&
> +            a.type == MKTAG('x','m','l',' ')) {
> +            parse = mov_read_xml;
> +        }
> +
>          if (!parse) { /* skip leaf atoms data */
>              avio_skip(pb, a.size);
>          } else {

We had this discussion recently: the metadata AVDictionary should
probably only contain real tags, not other information that's contained
in the format but for which libavformat has no good way to export yet.

There needs to be a concept for distinguishing user-visible tags and
other data.

(You don't want to show a xml dump in a GUI that happens to use ffmpeg,
do you?)
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to