mirror of
https://github.com/xenia-project/FFmpeg.git
synced 2024-11-24 12:09:55 +00:00
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
This commit is contained in:
parent
ec7ab610d5
commit
5bb5c1dc86
@ -171,11 +171,12 @@ int avfilter_config_links(AVFilterContext *filter)
|
|||||||
static void dprintf_picref(void *ctx, AVFilterPicRef *picref, int end)
|
static void dprintf_picref(void *ctx, AVFilterPicRef *picref, int end)
|
||||||
{
|
{
|
||||||
dprintf(ctx,
|
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,
|
||||||
picref->data [0], picref->data [1], picref->data [2], picref->data [3],
|
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->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" : "");
|
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->cur_pic = avfilter_default_get_video_buffer(link, dst->min_perms, link->w, link->h);
|
||||||
link->srcpic = picref;
|
link->srcpic = picref;
|
||||||
link->cur_pic->pts = link->srcpic->pts;
|
link->cur_pic->pts = link->srcpic->pts;
|
||||||
|
link->cur_pic->pos = link->srcpic->pos;
|
||||||
link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect;
|
link->cur_pic->pixel_aspect = link->srcpic->pixel_aspect;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -105,6 +105,7 @@ typedef struct AVFilterPicRef
|
|||||||
int h; ///< image height
|
int h; ///< image height
|
||||||
|
|
||||||
int64_t pts; ///< presentation timestamp in units of 1/AV_TIME_BASE
|
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
|
AVRational pixel_aspect; ///< pixel aspect ratio
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@ void avfilter_default_start_frame(AVFilterLink *link, AVFilterPicRef *picref)
|
|||||||
if(out) {
|
if(out) {
|
||||||
out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h);
|
out->outpic = avfilter_get_video_buffer(out, AV_PERM_WRITE, out->w, out->h);
|
||||||
out->outpic->pts = picref->pts;
|
out->outpic->pts = picref->pts;
|
||||||
|
out->outpic->pos = picref->pos;
|
||||||
out->outpic->pixel_aspect = picref->pixel_aspect;
|
out->outpic->pixel_aspect = picref->pixel_aspect;
|
||||||
avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
|
avfilter_start_frame(out, avfilter_ref_pic(out->outpic, ~0));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user