[FFmpeg-devel] [PATCH] libavformat/mov.c: export vendor id as metadata

Gyan Doshi ffmpeg at gyani.pro
Wed Nov 18 07:53:49 EET 2020



On 18-11-2020 02:41 am, Thierry Foucu wrote:
> ---
>   libavformat/mov.c | 24 ++++++++++++++++++++++--
>   1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index 2b90e31170..1f9163d658 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -2095,6 +2095,8 @@ static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
>       uint8_t codec_name[32] = { 0 };
>       int64_t stsd_start;
>       unsigned int len;
> +    int32_t id = 0;
> +    char vendor_id[5];
>   
>       /* The first 16 bytes of the video sample description are already
>        * read in ff_mov_read_stsd_entries() */
> @@ -2102,7 +2104,15 @@ static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
>   
>       avio_rb16(pb); /* version */
>       avio_rb16(pb); /* revision level */
> -    avio_rb32(pb); /* vendor */
> +    id = avio_rb32(pb); /* vendor */
> +    if (id != 0) {
> +        vendor_id[0] = (id >> 24) & 0xff;
> +        vendor_id[1] = (id >> 16) & 0xff;
> +        vendor_id[2] = (id >>  8) & 0xff;
> +        vendor_id[3] = (id >>  0) & 0xff;
> +        vendor_id[4] = 0;
> +        av_dict_set(&st->metadata, "vendor_id", vendor_id, 0);
> +    }
>       avio_rb32(pb); /* temporal quality */
>       avio_rb32(pb); /* spatial quality */
>   
> @@ -2150,10 +2160,20 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb,
>   {
>       int bits_per_sample, flags;
>       uint16_t version = avio_rb16(pb);
> +    int32_t id = 0;
> +    char vendor_id[5];
>       AVDictionaryEntry *compatible_brands = av_dict_get(c->fc->metadata, "compatible_brands", NULL, AV_DICT_MATCH_CASE);
>   
>       avio_rb16(pb); /* revision level */
> -    avio_rb32(pb); /* vendor */
> +    id = avio_rb32(pb); /* vendor */
> +    if (id != 0) {
> +        vendor_id[0] = (id >> 24) & 0xff;
> +        vendor_id[1] = (id >> 16) & 0xff;
> +        vendor_id[2] = (id >>  8) & 0xff;
> +        vendor_id[3] = (id >>  0) & 0xff;
> +        vendor_id[4] = 0;
> +        av_dict_set(&st->metadata, "vendor_id", vendor_id, 0);
> +    }

Seems fine.

But you likely have to update many FATE refs. FATE fails. See 
https://patchwork.ffmpeg.org/check/20508/
This automated check stops with the first failure. So check for all 
tests with '-k'

Regards,
Gyan


More information about the ffmpeg-devel mailing list