From 5bb5c1dc86e93a681ad6555dc98afec0055b69e5 Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Sat, 13 Mar 2010 11:27:05 +0000 Subject: [PATCH] Add AVFilterPicRef.pos field and make libavfilter propagate stream byte position information, as stored in the pkt.pos, through the filterchain. Note that the pos field is added *non* at the end of the AVFilterPicRef struct, thus breaking ABI compatibility, which is allowed as the API is still considered non-stable. Originally committed as revision 22506 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavfilter/avfilter.c | 6 ++++-- libavfilter/avfilter.h | 1 + libavfilter/defaults.c | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index bcddf24bc..f11d6343c 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -171,11 +171,12 @@ int avfilter_config_links(AVFilterContext *filter) static void dprintf_picref(void *ctx, AVFilterPicRef *picref, int end) { dprintf(ctx, - "picref[%p data[%p, %p, %p, %p] linesize[%d, %d, %d, %d] pts:%"PRId64" a:%d/%d s:%dx%d]%s", + "picref[%p data[%p, %p, %p, %p] linesize[%d, %d, %d, %d] pts:%"PRId64" pos:%"PRId64" a:%d/%d s:%dx%d]%s", picref, picref->data [0], picref->data [1], picref->data [2], picref->data [3], picref->linesize[0], picref->linesize[1], picref->linesize[2], picref->linesize[3], - picref->pts, picref->pixel_aspect.num, picref->pixel_aspect.den, picref->w, picref->h, + picref->pts, picref->pos, + picref->pixel_aspect.num, picref->pixel_aspect.den, picref->w, picref->h, end ? "\n" : ""); } @@ -263,6 +264,7 @@ void avfilter_start_frame(AVFilterLink *link, AVFilterPicRef *picref) link->cur_pic = avfilter_default_get_video_buffer(link, dst->min_perms, link->w, link->h); link->srcpic = picref; link->cur_pic->pts = link->srcpic->pts; + link->cur_pic->pos = link->srcpic->pos; link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect; } else diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 832f421be..f181689d8 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -105,6 +105,7 @@ typedef struct AVFilterPicRef int h; ///< image height int64_t pts; ///< presentation timestamp in units of 1/AV_TIME_BASE + int64_t pos; ///< byte position in stream, -1 if unknown AVRational pixel_aspect; ///< pixel aspect ratio diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c index 85fdffba4..3f5f6e197 100644 --- a/libavfilter/defaults.c +++ b/libavfilter/defaults.c @@ -74,6 +74,7 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref) if(out) { out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h); out->outpic->pts = picref->pts; + out->outpic->pos = picref->pos; out->outpic->pixel_aspect = picref->pixel_aspect; avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0)); } -- 2.11.0