From 27e8a9a79d7ba06181daa497456f5a11261655e3 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 ad7fede8..83583cc3 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 part 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;