OSDN Git Service

Read bits_per_coded_sample from V_MS/VFW/FOURCC mkv files.
authorCarl Eugen Hoyos <cehoyos@ag.or.at>
Tue, 25 Feb 2014 23:02:51 +0000 (00:02 +0100)
committerCarl Eugen Hoyos <cehoyos@ag.or.at>
Tue, 25 Feb 2014 23:02:51 +0000 (00:02 +0100)
Fixes ticket #3425.

libavformat/matroskadec.c

index f91688b..8c0ccb0 100644 (file)
@@ -1605,6 +1605,7 @@ static int matroska_read_header(AVFormatContext *s)
         uint32_t fourcc = 0;
         AVIOContext b;
         char* key_id_base64 = NULL;
+        int bit_depth = -1;
 
         /* Apply some sanity checks. */
         if (track->type != MATROSKA_TRACK_TYPE_VIDEO &&
@@ -1708,6 +1709,7 @@ static int matroska_read_header(AVFormatContext *s)
             && track->codec_priv.size >= 40
             && track->codec_priv.data != NULL) {
             track->ms_compat = 1;
+            bit_depth = AV_RL16(track->codec_priv.data + 14);
             fourcc = AV_RL32(track->codec_priv.data + 16);
             codec_id = ff_codec_get_id(ff_codec_bmp_tags, fourcc);
             extradata_offset = 40;
@@ -1879,6 +1881,8 @@ static int matroska_read_header(AVFormatContext *s)
 
             st->codec->codec_type = AVMEDIA_TYPE_VIDEO;
             st->codec->codec_tag  = fourcc;
+            if (bit_depth >= 0)
+                st->codec->bits_per_coded_sample = bit_depth;
             st->codec->width  = track->video.pixel_width;
             st->codec->height = track->video.pixel_height;
             av_reduce(&st->sample_aspect_ratio.num,