[FFmpeg-devel] [PATCH] mov: extract stsd vendor field in metadata.

Zhenni Huang zhennihuang at google.com
Thu Nov 3 20:48:20 EET 2016


---
 libavformat/mov.c | 25 +++++++++++++++++++++++--
 1 file changed, 23 insertions(+), 2 deletions(-)

diff --git a/libavformat/mov.c b/libavformat/mov.c
index 4222088..2cb041f 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1824,6 +1824,8 @@ static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
     uint8_t codec_name[32];
     int64_t stsd_start;
     unsigned int len;
+    int video_vendor_id = 0;
+    char video_vendor_id_buffer[5];
 
     /* The first 16 bytes of the video sample description are already
      * read in ff_mov_read_stsd_entries() */
@@ -1831,10 +1833,18 @@ static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
 
     avio_rb16(pb); /* version */
     avio_rb16(pb); /* revision level */
-    avio_rb32(pb); /* vendor */
+    video_vendor_id = avio_rb32(pb); /* vendor */
     avio_rb32(pb); /* temporal quality */
     avio_rb32(pb); /* spatial quality */
 
+    /* set video_vendor_id */
+    video_vendor_id_buffer[0] = (video_vendor_id >> 24) & 0xff;
+    video_vendor_id_buffer[1] = (video_vendor_id >> 16) & 0xff;
+    video_vendor_id_buffer[2] = (video_vendor_id >>  8) & 0xff;
+    video_vendor_id_buffer[3] = (video_vendor_id >>  0) & 0xff;
+    video_vendor_id_buffer[4] = 0;
+    av_dict_set(&st->metadata, "vendor_id", video_vendor_id_buffer, 0);
+
     st->codecpar->width  = avio_rb16(pb); /* width */
     st->codecpar->height = avio_rb16(pb); /* height */
 
@@ -1880,9 +1890,20 @@ static void mov_parse_stsd_audio(MOVContext *c, AVIOContext *pb,
     int bits_per_sample, flags;
     uint16_t version = avio_rb16(pb);
     AVDictionaryEntry *compatible_brands = av_dict_get(c->fc->metadata, "compatible_brands", NULL, AV_DICT_MATCH_CASE);
+    int audio_vendor_id = 0;
+    char audio_vendor_id_buffer[5];
 
     avio_rb16(pb); /* revision level */
-    avio_rb32(pb); /* vendor */
+    audio_vendor_id = avio_rb32(pb); /* vendor */
+
+    /* set audio_vendor_id */
+    audio_vendor_id_buffer[0] = (audio_vendor_id >> 24) & 0xff;
+    audio_vendor_id_buffer[1] = (audio_vendor_id >> 16) & 0xff;
+    audio_vendor_id_buffer[2] = (audio_vendor_id >>  8) & 0xff;
+    audio_vendor_id_buffer[3] = (audio_vendor_id >>  0) & 0xff;
+    audio_vendor_id_buffer[4] = 0;
+
+    av_dict_set(&st->metadata, "vendor_id", audio_vendor_id_buffer, 0);
 
     st->codecpar->channels              = avio_rb16(pb); /* channel count */
     st->codecpar->bits_per_coded_sample = avio_rb16(pb); /* sample size */
-- 
2.8.0.rc3.226.g39d4020



More information about the ffmpeg-devel mailing list