summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohns <johns98@gmx.net>2011-12-20 15:05:35 +0100
committerJohns <johns98@gmx.net>2011-12-20 15:05:35 +0100
commit37192d5b5394a9208a720058f704e433baa70aea (patch)
tree73d9b7e8baeb7e462c81acb09c61ae7845196152
parent8a98257515aa8f8f695f6836c22c0c6a539b982e (diff)
downloadvdr-plugin-softhddevice-37192d5b5394a9208a720058f704e433baa70aea.tar.gz
vdr-plugin-softhddevice-37192d5b5394a9208a720058f704e433baa70aea.tar.bz2
Reorder pts.
-rw-r--r--Todo1
-rw-r--r--codec.c24
-rw-r--r--video.c1
3 files changed, 22 insertions, 4 deletions
diff --git a/Todo b/Todo
index c8f6d09..86b8728 100644
--- a/Todo
+++ b/Todo
@@ -29,6 +29,7 @@ x11:
support fullscreen window
support fullscreen / window toggle
close window should send power button
+ disable cursor
audio/alsa:
video/audio asyncron
diff --git a/codec.c b/codec.c
index f5d4629..c248bd7 100644
--- a/codec.c
+++ b/codec.c
@@ -127,10 +127,17 @@ static int Codec_get_buffer(AVCodecContext * video_ctx, AVFrame * frame)
//Debug(3, "codec: use surface %#010x\n", surface);
frame->type = FF_BUFFER_TYPE_USER;
+#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(53,46,0)
frame->age = 256 * 256 * 256 * 64;
+#endif
frame->data[0] = (void *)(size_t) surface;
- // FIXME: reordered?
+ // reordered frames
+ if (video_ctx->pkt) {
+ frame->pkt_pts = video_ctx->pkt->pts;
+ } else {
+ frame->pkt_pts = AV_NOPTS_VALUE;
+ }
return 0;
}
// VA-API:
@@ -144,12 +151,19 @@ static int Codec_get_buffer(AVCodecContext * video_ctx, AVFrame * frame)
//Debug(3, "codec: use surface %#010x\n", surface);
frame->type = FF_BUFFER_TYPE_USER;
+#if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(53,46,0)
frame->age = 256 * 256 * 256 * 64;
+#endif
// vaapi needs both fields set
frame->data[0] = (void *)(size_t) surface;
frame->data[3] = (void *)(size_t) surface;
- // FIXME: reordered?
+ // reordered frames
+ if (video_ctx->pkt) {
+ frame->pkt_pts = video_ctx->pkt->pts;
+ } else {
+ frame->pkt_pts = AV_NOPTS_VALUE;
+ }
return 0;
}
//Debug(3, "codec: fallback to default get_buffer\n");
@@ -369,7 +383,7 @@ void CodecVideoClose(VideoDecoder * video_decoder)
** ffmpeg 0.9 pkt_dts wild jumping -160 - 340 ms
**
** libav 0.8_pre20111116 pts always AV_NOPTS_VALUE
-** libav 0.8_pre20111116 pkt_pts always 0
+** libav 0.8_pre20111116 pkt_pts always 0 (could be fixed?)
** libav 0.8_pre20111116 pkt_dts wild jumping -160 - 340 ms
*/
void DisplayPts(AVCodecContext * video_ctx, AVFrame * frame)
@@ -389,7 +403,9 @@ void DisplayPts(AVCodecContext * video_ctx, AVFrame * frame)
pts, (int)(pts - last_pts) / 90, video_ctx->time_base.num,
video_ctx->time_base.den, ms_delay);
- last_pts = pts;
+ if (pts != (int64_t) AV_NOPTS_VALUE) {
+ last_pts = pts;
+ }
}
#endif
diff --git a/video.c b/video.c
index b7930b8..8ab650f 100644
--- a/video.c
+++ b/video.c
@@ -1422,6 +1422,7 @@ static enum PixelFormat Vaapi_get_format(VaapiDecoder * decoder,
VaapiCleanup(decoder);
if (getenv("NO_HW")) { // FIXME: make config option
+ Debug(3, "codec: hardware acceleration disabled\n");
goto slow_path;
}