From 241378e43748e18bb20c29eb885d839882d827f2 Mon Sep 17 00:00:00 2001 From: George Paton Date: Sun, 18 Jun 2023 12:39:56 +1000 Subject: [PATCH] Revert to old packetin loop, set granulePosition after each packet read in --- src/modules/video/theora/TheoraVideoStream.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/src/modules/video/theora/TheoraVideoStream.cpp b/src/modules/video/theora/TheoraVideoStream.cpp index ff48e9526..a54ccb42d 100644 --- a/src/modules/video/theora/TheoraVideoStream.cpp +++ b/src/modules/video/theora/TheoraVideoStream.cpp @@ -229,21 +229,18 @@ void TheoraVideoStream::threadedFillBackBuffer(double dt) failedSeek = true; } - if (packet.granulepos > 0) { - th_decode_ctl(decoder, TH_DECCTL_SET_GRANPOS, &packet.granulepos, sizeof(packet.granulepos)); - } - - // TODO: Should be checking the result of th_decode_packetin th_decode_ycbcr_out(decoder, bufferinfo); hasFrame = true; - // Decode the current packet for the frame ogg_int64_t decoderPosition; - th_decode_packetin(decoder, &packet, &decoderPosition); + do + { + if (demuxer.readPacket(packet)) + return; - // Prepare the next packet for the next frame - if (demuxer.readPacket(packet)) - return; + if (packet.granulepos > 0) + th_decode_ctl(decoder, TH_DECCTL_SET_GRANPOS, &packet.granulepos, sizeof(packet.granulepos)); + } while (th_decode_packetin(decoder, &packet, &decoderPosition) != 0); lastFrame = nextFrame; nextFrame = th_granule_time(decoder, decoderPosition);