Commit 7da31a80 authored by Aurelien Jacobs's avatar Aurelien Jacobs

Split ff_set_mpeg4_time() and move the non mpeg4 specific part

into mpegvideo_enc.c.

Originally committed as revision 9577 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 153696a6
......@@ -2259,25 +2259,12 @@ void ff_mpeg4_stuffing(PutBitContext * pbc)
}
/* must be called before writing the header */
void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){
int time_div, time_mod;
assert(s->current_picture_ptr->pts != AV_NOPTS_VALUE);
s->time= s->current_picture_ptr->pts*s->avctx->time_base.num;
time_div= s->time/s->avctx->time_base.den;
time_mod= s->time%s->avctx->time_base.den;
void ff_set_mpeg4_time(MpegEncContext * s){
if(s->pict_type==B_TYPE){
s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
assert(s->pb_time > 0 && s->pb_time < s->pp_time);
ff_mpeg4_init_direct_mv(s);
}else{
s->last_time_base= s->time_base;
s->time_base= time_div;
s->pp_time= s->time - s->last_non_b_time;
s->last_non_b_time= s->time;
assert(picture_number==0 || s->pp_time > 0);
s->time_base= s->time/s->avctx->time_base.den;
}
}
......
......@@ -834,7 +834,7 @@ int16_t *h263_pred_motion(MpegEncContext * s, int block, int dir,
int *px, int *py);
void mpeg4_pred_ac(MpegEncContext * s, DCTELEM *block, int n,
int dir);
void ff_set_mpeg4_time(MpegEncContext * s, int picture_number);
void ff_set_mpeg4_time(MpegEncContext * s);
void mpeg4_encode_picture_header(MpegEncContext *s, int picture_number);
#ifdef CONFIG_ENCODERS
void h263_encode_init(MpegEncContext *s);
......
......@@ -2671,6 +2671,21 @@ static int estimate_qp(MpegEncContext *s, int dry_run){
return 0;
}
/* must be called before writing the header */
static void set_frame_distances(MpegEncContext * s){
assert(s->current_picture_ptr->pts != AV_NOPTS_VALUE);
s->time= s->current_picture_ptr->pts*s->avctx->time_base.num;
if(s->pict_type==B_TYPE){
s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
assert(s->pb_time > 0 && s->pb_time < s->pp_time);
}else{
s->pp_time= s->time - s->last_non_b_time;
s->last_non_b_time= s->time;
assert(s->picture_number==0 || s->pp_time > 0);
}
}
static int encode_picture(MpegEncContext *s, int picture_number)
{
int i;
......@@ -2685,7 +2700,9 @@ static int encode_picture(MpegEncContext *s, int picture_number)
/* we need to initialize some time vars before we can encode b-frames */
// RAL: Condition added for MPEG1VIDEO
if (s->codec_id == CODEC_ID_MPEG1VIDEO || s->codec_id == CODEC_ID_MPEG2VIDEO || (s->h263_pred && !s->h263_msmpeg4))
ff_set_mpeg4_time(s, s->picture_number); //FIXME rename and use has_b_frames or similar
set_frame_distances(s);
if(ENABLE_MPEG4_ENCODER && s->codec_id == CODEC_ID_MPEG4)
ff_set_mpeg4_time(s);
s->me.scene_change_score=0;
......
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