[FFmpeg-devel] [PATCH] libavformat/mov.c: export vendor id as metadata
Gyan Doshi
ffmpeg at gyani.pro
Wed Nov 18 10:30:08 EET 2020
On 18-11-2020 12:16 pm, Thierry Foucu wrote:
> On Tue, Nov 17, 2020 at 9:54 PM Gyan Doshi <ffmpeg at gyani.pro> wrote:
>
>>
>> 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'
>>
> Thanks.
> I did look at the error but it does not seem related to this patch.
> Looking at it, i'm not sure how adding vendor ID could break a RGB24 in
> matroska.
The test demuxes a MOV and transcodes streams to MKV. Since your patch
adds a metadata entry, that changes the metadata written to the output.
Gyan
More information about the ffmpeg-devel
mailing list