summaryrefslogtreecommitdiff
path: root/src/internal/video/kitvideo.c
diff options
context:
space:
mode:
authorTuomas Virtanen <katajakasa@gmail.com>2018-09-29 18:46:08 +0300
committerTuomas Virtanen <katajakasa@gmail.com>2018-09-29 18:46:08 +0300
commit108948c94a9ee7b115b0448fb3051e5666eec0f3 (patch)
treeb2cb558e34b1b376303cb157db73a1ac621da9e1 /src/internal/video/kitvideo.c
parent41c8ad5142e4de9b6c667840b9b5b4b66be3f71e (diff)
Improved frameskip
Diffstat (limited to 'src/internal/video/kitvideo.c')
-rw-r--r--src/internal/video/kitvideo.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/internal/video/kitvideo.c b/src/internal/video/kitvideo.c
index 350d3c5..d0dd74b 100644
--- a/src/internal/video/kitvideo.c
+++ b/src/internal/video/kitvideo.c
@@ -12,7 +12,7 @@
#include "kitchensink/internal/video/kitvideo.h"
#include "kitchensink/internal/utils/kitlog.h"
-#define KIT_VIDEO_SYNC_THRESHOLD 0.01
+#define KIT_VIDEO_SYNC_THRESHOLD 0.02
enum AVPixelFormat supported_list[] = {
AV_PIX_FMT_YUV420P,
@@ -248,6 +248,7 @@ int Kit_GetVideoDecoderData(Kit_Decoder *dec, SDL_Texture *texture) {
assert(dec != NULL);
assert(texture != NULL);
+ Kit_VideoPacket *next_packet = NULL;
Kit_VideoPacket *packet = Kit_PeekDecoderOutput(dec);
if(packet == NULL) {
return 0;
@@ -261,15 +262,24 @@ int Kit_GetVideoDecoderData(Kit_Decoder *dec, SDL_Texture *texture) {
return 0;
} else if(packet->pts < sync_ts - KIT_VIDEO_SYNC_THRESHOLD) {
// Video is lagging, skip until we find a good PTS to continue from.
+ LOG("V LAG %f < %f\n", packet->pts, sync_ts - KIT_VIDEO_SYNC_THRESHOLD);
+ Kit_AdvanceDecoderOutput(dec);
while(packet != NULL) {
- Kit_AdvanceDecoderOutput(dec);
- free_out_video_packet_cb(packet);
- packet = Kit_PeekDecoderOutput(dec);
+ next_packet = Kit_PeekDecoderOutput(dec);
+
+ // If next packet is valid, remove this one and jump to next.
+ if(next_packet != NULL) {
+ Kit_AdvanceDecoderOutput(dec);
+ free_out_video_packet_cb(packet);
+ packet = next_packet;
+ }
+
+ // If we still have NULL packet, stop here.
if(packet == NULL) {
break;
- } else {
- dec->clock_pos = packet->pts;
}
+
+ dec->clock_pos = packet->pts;
if(packet->pts > sync_ts - KIT_VIDEO_SYNC_THRESHOLD) {
break;
}