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);