diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2015-07-12 22:34:59 +0300 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2015-07-12 22:34:59 +0300 |
commit | ddd86e4747f2e33bf6b6e0926e158c8998e05eb3 (patch) | |
tree | 901996083e1c3716b6d48a4a68ef07e0f3e188e0 /libavcodec/mpegvideo_parser.c | |
parent | 547848f71184274f25b23e1bdacfffe80f1fdf34 (diff) | |
parent | ab05ed4c322ed0488ac9b5d2ef5d4ffa55a946a7 (diff) |
Merge commit 'ab05ed4c322ed0488ac9b5d2ef5d4ffa55a946a7'
* commit 'ab05ed4c322ed0488ac9b5d2ef5d4ffa55a946a7':
mpegvideo_parser: export pixel format and dimensions
Conflicts:
libavcodec/mpegvideo_parser.c
Merged-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavcodec/mpegvideo_parser.c')
-rw-r--r-- | libavcodec/mpegvideo_parser.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libavcodec/mpegvideo_parser.c b/libavcodec/mpegvideo_parser.c index cbea9b6cec..f5ac63f21c 100644 --- a/libavcodec/mpegvideo_parser.c +++ b/libavcodec/mpegvideo_parser.c @@ -47,6 +47,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, int set_dim_ret = 0; int bit_rate = 0; int vbv_delay = 0; + int chroma_format; + enum AVPixelFormat pix_fmt = AV_PIX_FMT_NONE; //FIXME replace the crap with get_bits() s->repeat_pict = 0; @@ -70,6 +72,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, set_dim_ret = ff_set_dimensions(avctx, pc->width, pc->height); did_set_size=1; } + pix_fmt = AV_PIX_FMT_YUV420P; frame_rate_index = buf[3] & 0xf; pc->frame_rate = avctx->framerate = ff_mpeg12_frame_rate_tab[frame_rate_index]; bit_rate = (buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6); @@ -91,6 +94,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, pc->progressive_sequence = buf[1] & (1 << 3); avctx->has_b_frames= !(buf[5] >> 7); + chroma_format = (buf[1] >> 1) & 3; + switch (chroma_format) { + case 1: pix_fmt = AV_PIX_FMT_YUV420P; break; + case 2: pix_fmt = AV_PIX_FMT_YUV422P; break; + case 3: pix_fmt = AV_PIX_FMT_YUV444P; break; + } + pc->width = (pc->width & 0xFFF) | (horiz_size_ext << 12); pc->height = (pc->height& 0xFFF) | ( vert_size_ext << 12); bit_rate = (bit_rate&0x3FFFF) | (bit_rate_ext << 18); @@ -155,6 +165,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s, ((avctx->codec_id == AV_CODEC_ID_MPEG1VIDEO && bit_rate != 0x3FFFF) || vbv_delay != 0xFFFF)) { avctx->bit_rate = 400*bit_rate; } + + if (pix_fmt != AV_PIX_FMT_NONE) { + s->format = pix_fmt; + s->width = s->coded_width = pc->width; + s->height = s->coded_height = pc->height; + } + #if FF_API_AVCTX_TIMEBASE if (avctx->framerate.num) avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); |