summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobert Nagy <ronag89@gmail.com>2012-04-15 17:12:02 +0200
committerMichael Niedermayer <michaelni@gmx.at>2012-04-17 19:41:16 +0200
commite90dfa6881afccf23a3dc494fa30c58d75945cbc (patch)
treebbd08597e5b7e3e0fd4eec9471f0f36736e2845b
parent7a3d2258a603fa177d688e4b661866bd8782c96c (diff)
downloadffmpeg-streaming-e90dfa6881afccf23a3dc494fa30c58d75945cbc.zip
ffmpeg-streaming-e90dfa6881afccf23a3dc494fa30c58d75945cbc.tar.gz
yadif: Improve pts calculation for is_second.
Tested-by: Robert Nagy <ronag89@gmail.com> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r--libavfilter/vf_yadif.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/libavfilter/vf_yadif.c b/libavfilter/vf_yadif.c
index c31a283..d8e2ad6 100644
--- a/libavfilter/vf_yadif.c
+++ b/libavfilter/vf_yadif.c
@@ -218,9 +218,20 @@ static void return_frame(AVFilterContext *ctx, int is_second)
if (is_second) {
if (yadif->next->pts != AV_NOPTS_VALUE &&
yadif->cur->pts != AV_NOPTS_VALUE) {
- yadif->out->pts =
- (yadif->next->pts&yadif->cur->pts) +
- ((yadif->next->pts^yadif->cur->pts)>>1);
+ uint64_t next_pts = yadif->next->pts;
+ uint64_t cur_pts = yadif->cur->pts;
+ uint64_t prev_pts = yadif->prev->pts;
+
+ uint64_t ft = FFMIN3( cur_pts-prev_pts,
+ next_pts-cur_pts,
+ (next_pts-prev_pts)/2);
+
+ if(next_pts - cur_pts < 2*ft)
+ yadif->out->pts =
+ (next_pts&cur_pts) +
+ ((next_pts^cur_pts)>>1);
+ else
+ yadif->out->pts = cur_pts + ft/2;
} else {
yadif->out->pts = AV_NOPTS_VALUE;
}
OpenPOWER on IntegriCloud