Commit 6ff6cff2 authored by Michael Niedermayer's avatar Michael Niedermayer

first coded vs. first displayed pts (segfault & pts fix if b frames are used)

Originally committed as revision 2727 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent ac806113
...@@ -2173,11 +2173,18 @@ void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){ ...@@ -2173,11 +2173,18 @@ void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){
static void mpeg4_encode_gop_header(MpegEncContext * s){ static void mpeg4_encode_gop_header(MpegEncContext * s){
int hours, minutes, seconds; int hours, minutes, seconds;
int64_t time;
put_bits(&s->pb, 16, 0); put_bits(&s->pb, 16, 0);
put_bits(&s->pb, 16, GOP_STARTCODE); put_bits(&s->pb, 16, GOP_STARTCODE);
seconds= s->time/s->time_increment_resolution; if(s->current_picture_ptr->pts){
time= FFMIN(s->reordered_input_picture[1]->pts, s->current_picture_ptr->pts);
time= (time*s->time_increment_resolution + 500*1000)/(1000*1000);
}else
time= av_rescale(s->current_picture_ptr->coded_picture_number*(int64_t)s->avctx->frame_rate_base, s->time_increment_resolution, s->avctx->frame_rate);
seconds= time/s->time_increment_resolution;
minutes= seconds/60; seconds %= 60; minutes= seconds/60; seconds %= 60;
hours= minutes/60; minutes %= 60; hours= minutes/60; minutes %= 60;
hours%=24; hours%=24;
...@@ -2190,7 +2197,7 @@ static void mpeg4_encode_gop_header(MpegEncContext * s){ ...@@ -2190,7 +2197,7 @@ static void mpeg4_encode_gop_header(MpegEncContext * s){
put_bits(&s->pb, 1, !!(s->flags&CODEC_FLAG_CLOSED_GOP)); put_bits(&s->pb, 1, !!(s->flags&CODEC_FLAG_CLOSED_GOP));
put_bits(&s->pb, 1, 0); //broken link == NO put_bits(&s->pb, 1, 0); //broken link == NO
s->last_time_base= s->time_base; s->last_time_base= time / s->time_increment_resolution;
ff_mpeg4_stuffing(&s->pb); ff_mpeg4_stuffing(&s->pb);
} }
......
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