Commit b1aacd56 authored by Anton Khirnov's avatar Anton Khirnov

mpeg4videodec: move t_frame from MpegEncContext to Mpeg4DecContext

parent 03889074
...@@ -70,6 +70,8 @@ typedef struct Mpeg4DecContext { ...@@ -70,6 +70,8 @@ typedef struct Mpeg4DecContext {
int rvlc; int rvlc;
///< could this stream contain resync markers ///< could this stream contain resync markers
int resync_marker; int resync_marker;
///< time distance of first I -> B, used for interlaced b frames
int t_frame;
/* bug workarounds */ /* bug workarounds */
int divx_version; int divx_version;
......
...@@ -1736,7 +1736,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb) ...@@ -1736,7 +1736,7 @@ static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
else else
s->avctx->time_base.num = 1; s->avctx->time_base.num = 1;
s->t_frame = 0; ctx->t_frame = 0;
if (ctx->shape != BIN_ONLY_SHAPE) { if (ctx->shape != BIN_ONLY_SHAPE) {
if (ctx->shape == RECT_SHAPE) { if (ctx->shape == RECT_SHAPE) {
...@@ -2123,14 +2123,14 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb) ...@@ -2123,14 +2123,14 @@ static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
} }
ff_mpeg4_init_direct_mv(s); ff_mpeg4_init_direct_mv(s);
if (s->t_frame == 0) if (ctx->t_frame == 0)
s->t_frame = s->pb_time; ctx->t_frame = s->pb_time;
if (s->t_frame == 0) if (ctx->t_frame == 0)
s->t_frame = 1; // 1/0 protection ctx->t_frame = 1; // 1/0 protection
s->pp_field_time = (ROUNDED_DIV(s->last_non_b_time, s->t_frame) - s->pp_field_time = (ROUNDED_DIV(s->last_non_b_time, ctx->t_frame) -
ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame)) * 2; ROUNDED_DIV(s->last_non_b_time - s->pp_time, ctx->t_frame)) * 2;
s->pb_field_time = (ROUNDED_DIV(s->time, s->t_frame) - s->pb_field_time = (ROUNDED_DIV(s->time, ctx->t_frame) -
ROUNDED_DIV(s->last_non_b_time - s->pp_time, s->t_frame)) * 2; ROUNDED_DIV(s->last_non_b_time - s->pp_time, ctx->t_frame)) * 2;
if (!s->progressive_sequence) { if (!s->progressive_sequence) {
if (s->pp_field_time <= s->pb_field_time || s->pb_field_time <= 1) if (s->pp_field_time <= s->pb_field_time || s->pb_field_time <= 1)
return FRAME_SKIPPED; return FRAME_SKIPPED;
......
...@@ -607,7 +607,6 @@ typedef struct MpegEncContext { ...@@ -607,7 +607,6 @@ typedef struct MpegEncContext {
PutBitContext tex_pb; ///< used for data partitioned VOPs PutBitContext tex_pb; ///< used for data partitioned VOPs
PutBitContext pb2; ///< used for data partitioned VOPs PutBitContext pb2; ///< used for data partitioned VOPs
int mpeg_quant; int mpeg_quant;
int t_frame; ///< time distance of first I -> B, used for interlaced b frames
int padding_bug_score; ///< used to detect the VERY common padding bug in MPEG4 int padding_bug_score; ///< used to detect the VERY common padding bug in MPEG4
/* divx specific, used to workaround (many) bugs in divx5 */ /* divx specific, used to workaround (many) bugs in divx5 */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment