mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-13 18:55:08 +00:00
mpegvideo_parser: export pixel format and dimensions
This commit is contained in:
parent
9f4c7397a2
commit
ab05ed4c32
@ -44,6 +44,8 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
int top_field_first, repeat_first_field, progressive_frame;
|
int top_field_first, repeat_first_field, progressive_frame;
|
||||||
int horiz_size_ext, vert_size_ext, bit_rate_ext;
|
int horiz_size_ext, vert_size_ext, bit_rate_ext;
|
||||||
int did_set_size=0;
|
int did_set_size=0;
|
||||||
|
int chroma_format;
|
||||||
|
enum AVPixelFormat pix_fmt = AV_PIX_FMT_NONE;
|
||||||
//FIXME replace the crap with get_bits()
|
//FIXME replace the crap with get_bits()
|
||||||
s->repeat_pict = 0;
|
s->repeat_pict = 0;
|
||||||
|
|
||||||
@ -65,6 +67,7 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
ff_set_dimensions(avctx, pc->width, pc->height);
|
ff_set_dimensions(avctx, pc->width, pc->height);
|
||||||
did_set_size=1;
|
did_set_size=1;
|
||||||
}
|
}
|
||||||
|
pix_fmt = AV_PIX_FMT_YUV420P;
|
||||||
frame_rate_index = buf[3] & 0xf;
|
frame_rate_index = buf[3] & 0xf;
|
||||||
pc->frame_rate = avctx->framerate = ff_mpeg12_frame_rate_tab[frame_rate_index];
|
pc->frame_rate = avctx->framerate = ff_mpeg12_frame_rate_tab[frame_rate_index];
|
||||||
avctx->bit_rate = ((buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6))*400;
|
avctx->bit_rate = ((buf[4]<<10) | (buf[5]<<2) | (buf[6]>>6))*400;
|
||||||
@ -85,6 +88,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
pc->progressive_sequence = buf[1] & (1 << 3);
|
pc->progressive_sequence = buf[1] & (1 << 3);
|
||||||
avctx->has_b_frames= !(buf[5] >> 7);
|
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 |=(horiz_size_ext << 12);
|
pc->width |=(horiz_size_ext << 12);
|
||||||
pc->height |=( vert_size_ext << 12);
|
pc->height |=( vert_size_ext << 12);
|
||||||
avctx->bit_rate += (bit_rate_ext << 18) * 400;
|
avctx->bit_rate += (bit_rate_ext << 18) * 400;
|
||||||
@ -138,6 +148,13 @@ static void mpegvideo_extract_headers(AVCodecParserContext *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
the_end: ;
|
the_end: ;
|
||||||
|
|
||||||
|
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 FF_API_AVCTX_TIMEBASE
|
||||||
if (avctx->framerate.num)
|
if (avctx->framerate.num)
|
||||||
avctx->time_base = av_inv_q(avctx->framerate);
|
avctx->time_base = av_inv_q(avctx->framerate);
|
||||||
|
Loading…
Reference in New Issue
Block a user