summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohns <johns98@gmx.net>2015-03-10 10:38:00 +0100
committerJohns <johns98@gmx.net>2015-03-10 10:38:00 +0100
commit28555643a539722cefb22e2fe2e9b8dc5c41ad1a (patch)
tree6aed9de5517ea5c64cfbe90dbc519719ffa91ac6
parent2866e328c6f6117af51903c3ed4cb1bb108b88ce (diff)
downloadvdr-plugin-softhddevice-28555643a539722cefb22e2fe2e9b8dc5c41ad1a.tar.gz
vdr-plugin-softhddevice-28555643a539722cefb22e2fe2e9b8dc5c41ad1a.tar.bz2
Add automatic frame rate detection for older ffmpeg versions.
-rw-r--r--ChangeLog1
-rw-r--r--video.c14
2 files changed, 12 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index c088b1d..69ad582 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
User johns
Date:
+ Add automatic frame rate detection for older ffmpeg versions.
Fix bug: destroyed vdpau surfaces still used in queue.
Fix bug: need signed char, if compiler has unsigned chars.
Try smaller audio puffer, if default size fails.
diff --git a/video.c b/video.c
index 59d56a1..e0de70d 100644
--- a/video.c
+++ b/video.c
@@ -457,10 +457,18 @@ static void VideoSetPts(int64_t * pts_p, int interlaced,
// FIXME: using framerate as workaround for av_frame_get_pkt_duration
//
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(56,13,100)
- // FIXME: need frame rate for older versions
- duration = interlaced ? 40 : 20; // 50Hz -> 20ms default
+ // version for older ffmpeg without framerate
+ if (video_ctx->time_base.num && video_ctx->time_base.den) {
+ duration =
+ (video_ctx->ticks_per_frame * 1000 * video_ctx->time_base.num) /
+ video_ctx->time_base.den;
+ } else {
+ duration = interlaced ? 40 : 20; // 50Hz -> 20ms default
+ }
+ Debug(4, "video: %d/%d %" PRIx64 " -> %d\n", video_ctx->time_base.den,
+ video_ctx->time_base.num, av_frame_get_pkt_duration(frame), duration);
#else
- if (video_ctx->framerate.num != 0 && video_ctx->framerate.den != 0) {
+ if (video_ctx->framerate.num && video_ctx->framerate.den) {
duration = 1000 * video_ctx->framerate.den / video_ctx->framerate.num;
} else {
duration = interlaced ? 40 : 20; // 50Hz -> 20ms default