aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <stefano.sabatini-lala@poste.it>2010-03-13 11:27:07 +0000
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2010-03-13 11:27:07 +0000
commitbb4095133fa124305afda9b5ef02f595c6674a3f (patch)
treef5b41d6dc0ad8862c06983c7cd8ca4378addb161
parent5bb5c1dc86e93a681ad6555dc98afec0055b69e5 (diff)
downloadffmpeg-bb4095133fa124305afda9b5ef02f595c6674a3f.tar.gz
Make ffplay pass the packet.pos information to the filterchain, get it
again from the filterchain and pass it back to output_picture2(). Originally committed as revision 22507 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--ffplay.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/ffplay.c b/ffplay.c
index f5c9b1304e..f80a71e07e 100644
--- a/ffplay.c
+++ b/ffplay.c
@@ -1594,6 +1594,7 @@ static int input_request_frame(AVFilterLink *link)
av_free_packet(&pkt);
picref->pts = pts;
+ picref->pos = pkt.pos;
picref->pixel_aspect = priv->is->video_st->codec->sample_aspect_ratio;
avfilter_start_frame(link, avfilter_ref_pic(picref, ~0));
avfilter_draw_slice(link, 0, link->h, 1);
@@ -1657,7 +1658,7 @@ static int output_query_formats(AVFilterContext *ctx)
}
static int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame,
- int64_t *pts)
+ int64_t *pts, int64_t *pos)
{
AVFilterPicRef *pic;
@@ -1669,6 +1670,7 @@ static int get_filtered_video_frame(AVFilterContext *ctx, AVFrame *frame,
frame->opaque = pic;
*pts = pic->pts;
+ *pos = pic->pos;
memcpy(frame->data, pic->data, sizeof(frame->data));
memcpy(frame->linesize, pic->linesize, sizeof(frame->linesize));
@@ -1695,7 +1697,7 @@ static int video_thread(void *arg)
{
VideoState *is = arg;
AVFrame *frame= avcodec_alloc_frame();
- int64_t pts_int;
+ int64_t pts_int, pos;
double pts;
int ret;
@@ -1748,7 +1750,7 @@ static int video_thread(void *arg)
while (is->paused && !is->videoq.abort_request)
SDL_Delay(10);
#if CONFIG_AVFILTER
- ret = get_filtered_video_frame(filt_out, frame, &pts_int);
+ ret = get_filtered_video_frame(filt_out, frame, &pts_int, &pos);
#else
ret = get_video_frame(is, frame, &pts_int, &pkt);
#endif
@@ -1761,7 +1763,7 @@ static int video_thread(void *arg)
pts = pts_int*av_q2d(is->video_st->time_base);
#if CONFIG_AVFILTER
- ret = output_picture2(is, frame, pts, -1); /* fixme: unknown pos */
+ ret = output_picture2(is, frame, pts, pos);
#else
ret = output_picture2(is, frame, pts, pkt.pos);
av_free_packet(&pkt);