[FFmpeg-cvslog] libavfilter/decimate: Add pts of first frame to all frames.
Carl Eugen Hoyos
git at videolan.org
Thu Oct 31 14:35:57 CET 2013
ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Thu Oct 31 00:33:51 2013 +0100| [e4b0a77021a25fd538ef14791e31c06950d5ff1f] | committer: Carl Eugen Hoyos
libavfilter/decimate: Add pts of first frame to all frames.
Fixes ticket #3019
Reviewed-by: Clément Bœsch
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e4b0a77021a25fd538ef14791e31c06950d5ff1f
---
libavfilter/vf_decimate.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/libavfilter/vf_decimate.c b/libavfilter/vf_decimate.c
index 034d524..5efafe9 100644
--- a/libavfilter/vf_decimate.c
+++ b/libavfilter/vf_decimate.c
@@ -43,6 +43,7 @@ typedef struct {
AVFrame **clean_src; ///< frame queue for the clean source
int got_frame[2]; ///< frame request flag for each input stream
double ts_unit; ///< timestamp units for the output frames
+ int64_t start_pts; ///< base for output timestamps
uint32_t eof; ///< bitmask for end of stream
int hsub, vsub; ///< chroma subsampling values
int depth;
@@ -210,11 +211,14 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in)
av_frame_free(&dm->queue[i].frame);
} else {
AVFrame *frame = dm->queue[i].frame;
+ if (frame->pts != AV_NOPTS_VALUE && dm->start_pts == AV_NOPTS_VALUE)
+ dm->start_pts = frame->pts;
if (dm->ppsrc) {
av_frame_free(&frame);
frame = dm->clean_src[i];
}
- frame->pts = outlink->frame_count * dm->ts_unit;
+ frame->pts = outlink->frame_count * dm->ts_unit +
+ (dm->start_pts == AV_NOPTS_VALUE ? 0 : dm->start_pts);
ret = ff_filter_frame(outlink, frame);
if (ret < 0)
break;
@@ -259,7 +263,7 @@ static int config_input(AVFilterLink *inlink)
static av_cold int decimate_init(AVFilterContext *ctx)
{
- const DecimateContext *dm = ctx->priv;
+ DecimateContext *dm = ctx->priv;
AVFilterPad pad = {
.name = av_strdup("main"),
.type = AVMEDIA_TYPE_VIDEO,
@@ -285,6 +289,8 @@ static av_cold int decimate_init(AVFilterContext *ctx)
return AVERROR(EINVAL);
}
+ dm->start_pts = AV_NOPTS_VALUE;
+
return 0;
}
More information about the ffmpeg-cvslog
mailing list