diff options
author | John Stebbins <stebbins@jetheaddev.com> | 2011-08-25 12:36:13 -0700 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2011-08-25 12:41:45 -0700 |
commit | 0d802ac54e86aee587f5e9917a2eefbfecd73571 (patch) | |
tree | 0701e22e6a3ddf139652615995f2a6a9e7b8335c /libavcodec/vc1_parser.c | |
parent | 1cf82cab0840d669198ea76ab0363aa661950647 (diff) | |
download | ffmpeg-0d802ac54e86aee587f5e9917a2eefbfecd73571.tar.gz |
vc1: fix VC-1 Pulldown handling.
Pulldown flags are being set incorrectly and AVFrame->repeat_pict is not
being set. Also, skipped frames exit header parsing too early and do not
set pulldown flags appropriately. Ticks_per_frame needs to be set and
time_base adjusted so player can extend frame duration by a field time.
This fixes problems encountered when attempting to transcode HD-DVD EVOB
files with HandBrake. Also makes these files play smoothly in avplay.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
Diffstat (limited to 'libavcodec/vc1_parser.c')
-rw-r--r-- | libavcodec/vc1_parser.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/libavcodec/vc1_parser.c b/libavcodec/vc1_parser.c index 27ff1bdaa3..c4c15b326d 100644 --- a/libavcodec/vc1_parser.c +++ b/libavcodec/vc1_parser.c @@ -45,6 +45,7 @@ static void vc1_extract_headers(AVCodecParserContext *s, AVCodecContext *avctx, vpc->v.s.avctx = avctx; vpc->v.parse_only = 1; next = buf; + s->repeat_pict = 0; for(start = buf, end = buf + buf_size; next < end; start = next){ int buf2_size, size; @@ -73,6 +74,20 @@ static void vc1_extract_headers(AVCodecParserContext *s, AVCodecContext *avctx, else s->pict_type = vpc->v.s.pict_type; + if (avctx->ticks_per_frame > 1){ + // process pulldown flags + s->repeat_pict = 1; + // Pulldown flags are only valid when 'broadcast' has been set. + // So ticks_per_frame will be 2 + if (vpc->v.rff){ + // repeat field + s->repeat_pict = 2; + }else if (vpc->v.rptfrm){ + // repeat frames + s->repeat_pict = vpc->v.rptfrm * 2 + 1; + } + } + break; } } |