mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
ffplay: add frame duration estimated from frame rate to VideoPicture
Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
105d4748cf
commit
61dd319770
10
ffplay.c
10
ffplay.c
@ -121,6 +121,7 @@ typedef struct PacketQueue {
|
||||
|
||||
typedef struct VideoPicture {
|
||||
double pts; // presentation timestamp for this picture
|
||||
double duration; // estimated duration based on frame rate
|
||||
int64_t pos; // byte position in file
|
||||
SDL_Overlay *bmp;
|
||||
int width, height; /* source height & width */
|
||||
@ -1549,7 +1550,7 @@ static void duplicate_right_border_pixels(SDL_Overlay *bmp) {
|
||||
}
|
||||
}
|
||||
|
||||
static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, int64_t pos, int serial)
|
||||
static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, double duration, int64_t pos, int serial)
|
||||
{
|
||||
VideoPicture *vp;
|
||||
|
||||
@ -1646,6 +1647,7 @@ static int queue_picture(VideoState *is, AVFrame *src_frame, double pts, int64_t
|
||||
SDL_UnlockYUVOverlay(vp->bmp);
|
||||
|
||||
vp->pts = pts;
|
||||
vp->duration = duration;
|
||||
vp->pos = pos;
|
||||
vp->serial = serial;
|
||||
|
||||
@ -1909,9 +1911,11 @@ static int video_thread(void *arg)
|
||||
VideoState *is = arg;
|
||||
AVFrame *frame = av_frame_alloc();
|
||||
double pts;
|
||||
double duration;
|
||||
int ret;
|
||||
int serial = 0;
|
||||
AVRational tb = is->video_st->time_base;
|
||||
AVRational frame_rate = av_guess_frame_rate(is->ic, is->video_st, NULL);
|
||||
|
||||
#if CONFIG_AVFILTER
|
||||
AVFilterGraph *graph = avfilter_graph_alloc();
|
||||
@ -1962,6 +1966,7 @@ static int video_thread(void *arg)
|
||||
last_h = frame->height;
|
||||
last_format = frame->format;
|
||||
last_serial = serial;
|
||||
frame_rate = filt_out->inputs[0]->frame_rate;
|
||||
}
|
||||
|
||||
ret = av_buffersrc_add_frame(filt_in, frame);
|
||||
@ -1987,8 +1992,9 @@ static int video_thread(void *arg)
|
||||
is->frame_last_filter_delay = 0;
|
||||
tb = filt_out->inputs[0]->time_base;
|
||||
#endif
|
||||
duration = (frame_rate.num && frame_rate.den ? av_q2d((AVRational){frame_rate.den, frame_rate.num}) : 0);
|
||||
pts = (frame->pts == AV_NOPTS_VALUE) ? NAN : frame->pts * av_q2d(tb);
|
||||
ret = queue_picture(is, frame, pts, av_frame_get_pkt_pos(frame), serial);
|
||||
ret = queue_picture(is, frame, pts, duration, av_frame_get_pkt_pos(frame), serial);
|
||||
av_frame_unref(frame);
|
||||
#if CONFIG_AVFILTER
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user