Browse Source

Revert to old packetin loop, set granulePosition after each packet read in

George Paton 2 years ago
parent
commit
241378e437
1 changed files with 7 additions and 10 deletions
  1. 7 10
      src/modules/video/theora/TheoraVideoStream.cpp

+ 7 - 10
src/modules/video/theora/TheoraVideoStream.cpp

@@ -229,21 +229,18 @@ void TheoraVideoStream::threadedFillBackBuffer(double dt)
 			failedSeek = true;
 			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);
 		th_decode_ycbcr_out(decoder, bufferinfo);
 		hasFrame = true;
 		hasFrame = true;
 
 
-		// Decode the current packet for the frame
 		ogg_int64_t decoderPosition;
 		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;
 		lastFrame = nextFrame;
 		nextFrame = th_granule_time(decoder, decoderPosition);
 		nextFrame = th_granule_time(decoder, decoderPosition);