mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
set AVFrame.pts based upon framerate if its 0
detect & warn if the user prvides pts only for some frames, and try to guess the missing ones Originally committed as revision 2812 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
ed7b99bbe2
commit
e51f49487e
@ -2156,10 +2156,9 @@ void ff_mpeg4_stuffing(PutBitContext * pbc)
|
||||
void ff_set_mpeg4_time(MpegEncContext * s, int picture_number){
|
||||
int time_div, time_mod;
|
||||
|
||||
if(s->current_picture_ptr->pts)
|
||||
s->time= (s->current_picture_ptr->pts*s->time_increment_resolution + 500*1000)/(1000*1000);
|
||||
else
|
||||
s->time= av_rescale(picture_number*(int64_t)s->avctx->frame_rate_base, s->time_increment_resolution, s->avctx->frame_rate);
|
||||
assert(s->current_picture_ptr->pts);
|
||||
s->time= (s->current_picture_ptr->pts*s->time_increment_resolution + 500*1000)/(1000*1000);
|
||||
|
||||
time_div= s->time/s->time_increment_resolution;
|
||||
time_mod= s->time%s->time_increment_resolution;
|
||||
|
||||
|
@ -1850,6 +1850,16 @@ static int load_input_picture(MpegEncContext *s, AVFrame *pic_arg){
|
||||
copy_picture_attributes(pic, pic_arg);
|
||||
|
||||
pic->display_picture_number= s->input_picture_number++;
|
||||
if(pic->pts){
|
||||
s->user_specified_pts= pic->pts;
|
||||
}else{
|
||||
if(s->user_specified_pts){
|
||||
pic->pts= s->user_specified_pts + 1000ULL*1000ULL*s->avctx->frame_rate_base / s->avctx->frame_rate;
|
||||
av_log(s->avctx, AV_LOG_INFO, "Warning: AVFrame.pts=0 trying to guess (%Ld)\n", pic->pts);
|
||||
}else{
|
||||
pic->pts= av_rescale(pic->display_picture_number*(int64_t)s->avctx->frame_rate_base, 1000*1000, s->avctx->frame_rate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* shift buffer entries */
|
||||
|
@ -275,6 +275,7 @@ typedef struct MpegEncContext {
|
||||
int picture_number; //FIXME remove, unclear definition
|
||||
int picture_in_gop_number; ///< 0-> first pic in gop, ...
|
||||
int b_frames_since_non_b; ///< used for encoding, relative to not yet reordered input
|
||||
int64_t user_specified_pts;///< last non zero pts from AVFrame which was passed into avcodec_encode_video()
|
||||
int mb_width, mb_height; ///< number of MBs horizontally & vertically
|
||||
int mb_stride; ///< mb_width+1 used for some arrays to allow simple addressng of left & top MBs withoutt sig11
|
||||
int b8_stride; ///< 2*mb_width+1 used for some 8x8 block arrays to allow simple addressng
|
||||
|
Loading…
Reference in New Issue
Block a user