From 0cb16be9f50a7918382c82288d0766a3be79d89d Mon Sep 17 00:00:00 2001 From: Romain Vimont Date: Fri, 9 Nov 2018 21:22:41 +0100 Subject: [PATCH] Assign PTS to the right frame The PTS was read from the socket and set as the current one even before the frame was consumed, so it could be assigned to the previous frame "in advance". Store the PTS for the current frame and the last PTS read from the packet header of the next frame in separate fields. As a side-effect, this fixes the warning on quit: > Application provided invalid, non monotonically increasing dts to > muxer in stream 0: 17164020 >= 17164020 --- app/src/decoder.c | 6 +++++- app/src/decoder.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/decoder.c b/app/src/decoder.c index 80f12dcc..a1dff87b 100644 --- a/app/src/decoder.c +++ b/app/src/decoder.c @@ -40,12 +40,16 @@ static int read_packet(void *opaque, uint8_t *buf, int buf_size) { remaining = decoder->remaining; if (remaining == 0) { + // the previous PTS read is now for the current frame + decoder->pts = decoder->next_pts; + // FIXME what if only half of the header is available? ret = net_recv(decoder->video_socket, header, HEADER_SIZE); if (ret <= 0) return ret; - decoder->pts = from_be(header, 8); + // read the PTS for the next frame + decoder->next_pts = from_be(header, 8); decoder->buffer_info_flags = from_be(header + 8, 4); remaining = from_be(header + 12, 4); } diff --git a/app/src/decoder.h b/app/src/decoder.h index fa1200b4..b502b625 100644 --- a/app/src/decoder.h +++ b/app/src/decoder.h @@ -15,6 +15,7 @@ struct decoder { SDL_Thread *thread; SDL_mutex *mutex; struct recorder *recorder; + uint64_t next_pts; uint64_t pts; uint32_t buffer_info_flags; int remaining;