summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Sabatini <[email protected]>2010-03-13 11:27:05 +0000
committerStefano Sabatini <[email protected]>2010-03-13 11:27:05 +0000
commit5bb5c1dc86e93a681ad6555dc98afec0055b69e5 (patch)
tree862adeb3f339a1089e030c14c7fcd1e405713e59
parentec7ab610d51508344273dbc38fec4ab6034bf1e2 (diff)
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
-rw-r--r--libavfilter/avfilter.c6
-rw-r--r--libavfilter/avfilter.h1
-rw-r--r--libavfilter/defaults.c1
3 files changed, 6 insertions, 2 deletions
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index bcddf24bcd..f11d6343c3 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 832f421bee..f181689d8e 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 85fdffba44..3f5f6e1976 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));
}