[Scummvm-git-logs] scummvm master -> 362bfed2b832c949b5fa9c99cac05f82c423e994

sev- noreply at scummvm.org
Sat Jun 7 18:41:27 UTC 2025


This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
76d4c2137e VIDEO: Make PREBUFFERED_PACKETS a settable variable in MPEGPSDemuxer
4b4b877cf3 VIDEO: Shift timestamps so that the first timestamp is 0
362bfed2b8 QDENGINE: Fix audio delay in mng and rybalka videos


Commit: 76d4c2137e21d0f80d61e2759bf2d38bf3a85a2c
    https://github.com/scummvm/scummvm/commit/76d4c2137e21d0f80d61e2759bf2d38bf3a85a2c
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-06-07T20:41:23+02:00

Commit Message:
VIDEO: Make PREBUFFERED_PACKETS a settable variable in MPEGPSDemuxer

Changed paths:
    video/mpegps_decoder.cpp
    video/mpegps_decoder.h


diff --git a/video/mpegps_decoder.cpp b/video/mpegps_decoder.cpp
index 626a551abd2..155d380df6e 100644
--- a/video/mpegps_decoder.cpp
+++ b/video/mpegps_decoder.cpp
@@ -78,6 +78,10 @@ bool MPEGPSDecoder::loadStream(Common::SeekableReadStream *stream) {
 	return true;
 }
 
+void MPEGPSDecoder::setPrebufferedPackets(int packets) {
+	_demuxer->setPrebufferedPackets(packets);
+}
+
 void MPEGPSDecoder::close() {
 	VideoDecoder::close();
 	_demuxer->close();
@@ -248,7 +252,6 @@ MPEGPSDecoder::PrivateStreamType MPEGPSDecoder::detectPrivateStreamType(Common::
 // should start slightly before the video.
 // --------------------------------------------------------------------------
 
-#define PREBUFFERED_PACKETS 150
 #define AUDIO_THRESHOLD     100
 
 MPEGPSDecoder::MPEGPSDemuxer::MPEGPSDemuxer() {
@@ -286,7 +289,7 @@ bool MPEGPSDecoder::MPEGPSDemuxer::loadStream(Common::SeekableReadStream *stream
 	_stream = stream;
 
 	int queuedPackets = 0;
-	while (queueNextPacket() && queuedPackets < PREBUFFERED_PACKETS) {
+	while (queueNextPacket() && queuedPackets < _prebufferedPackets) {
 		queuedPackets++;
 	}
 
diff --git a/video/mpegps_decoder.h b/video/mpegps_decoder.h
index fcbb3b47166..7a159c086dd 100644
--- a/video/mpegps_decoder.h
+++ b/video/mpegps_decoder.h
@@ -60,6 +60,10 @@ public:
 	bool loadStream(Common::SeekableReadStream *stream);
 	void close();
 
+	// Set the number of prebuffered packets in demuxer
+	// Used only by qdEngine
+	void setPrebufferedPackets(int packets);
+
 protected:
 	void readNextPacket();
 	bool useAudioSync() const { return false; }
@@ -76,6 +80,8 @@ private:
 		Common::SeekableReadStream *getFirstVideoPacket(int32 &startCode, uint32 &pts, uint32 &dts);
 		Common::SeekableReadStream *getNextPacket(uint32 currentTime, int32 &startCode, uint32 &pts, uint32 &dts);
 
+		void setPrebufferedPackets(int packets) { _prebufferedPackets = packets; }
+
 	private:
 		class Packet {
 		public:
@@ -98,6 +104,8 @@ private:
 		Common::Queue<Packet> _audioQueue;
 		// If we come across a non-packetized elementary stream
 		bool _isESStream;
+
+		int _prebufferedPackets = 150;
 	};
 
 	// Base class for handling MPEG streams


Commit: 4b4b877cf30b602d97223b96afb16bb016854847
    https://github.com/scummvm/scummvm/commit/4b4b877cf30b602d97223b96afb16bb016854847
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-06-07T20:41:23+02:00

Commit Message:
VIDEO: Shift timestamps so that the first timestamp is 0

Changed paths:
    video/mpegps_decoder.cpp
    video/mpegps_decoder.h


diff --git a/video/mpegps_decoder.cpp b/video/mpegps_decoder.cpp
index 155d380df6e..734a610cbfa 100644
--- a/video/mpegps_decoder.cpp
+++ b/video/mpegps_decoder.cpp
@@ -300,6 +300,9 @@ void MPEGPSDecoder::MPEGPSDemuxer::close() {
 	delete _stream;
 	_stream = 0;
 
+	_firstAudioPacketPts = 0xFFFFFFFF;
+	_firstVideoPacketPts = 0xFFFFFFFF;
+
 	while (!_audioQueue.empty()) {
 		Packet packet = _audioQueue.pop();
 		delete packet._stream;
@@ -339,6 +342,7 @@ Common::SeekableReadStream *MPEGPSDecoder::MPEGPSDemuxer::getNextPacket(uint32 c
 			// time stamp.
 			usePacket = true;
 		} else {
+			packet._pts -= _firstAudioPacketPts;
 			uint32 packetTime = packet._pts / 90;
 			if (packetTime <= currentTime || packetTime - currentTime < AUDIO_THRESHOLD || _videoQueue.empty()) {
 				// The packet is overdue, or will be soon.
@@ -364,6 +368,10 @@ Common::SeekableReadStream *MPEGPSDecoder::MPEGPSDemuxer::getNextPacket(uint32 c
 	if (!_videoQueue.empty()) {
 		Packet packet = _videoQueue.pop();
 		startCode = packet._startCode;
+
+		if (packet._pts != 0xFFFFFFFF) {
+			packet._pts -= _firstVideoPacketPts;
+		}
 		pts = packet._pts;
 		dts = packet._dts;
 		return packet._stream;
@@ -406,12 +414,16 @@ bool MPEGPSDecoder::MPEGPSDemuxer::queueNextPacket() {
 		if (startCode == kStartCodePrivateStream1 || (startCode >= 0x1C0 && startCode <= 0x1DF)) {
 			// Audio packet
 			_audioQueue.push(Packet(stream, startCode, pts, dts));
+			if (_firstAudioPacketPts == 0xFFFFFFFF)
+				_firstAudioPacketPts = pts;
 			return true;
 		}
 
 		if (startCode >= 0x1E0 && startCode <= 0x1EF) {
 			// Video packet
 			_videoQueue.push(Packet(stream, startCode, pts, dts));
+			if (_firstVideoPacketPts == 0xFFFFFFFF)
+				_firstVideoPacketPts = pts;
 			return true;
 		}
 
diff --git a/video/mpegps_decoder.h b/video/mpegps_decoder.h
index 7a159c086dd..423fec5e239 100644
--- a/video/mpegps_decoder.h
+++ b/video/mpegps_decoder.h
@@ -105,6 +105,9 @@ private:
 		// If we come across a non-packetized elementary stream
 		bool _isESStream;
 
+		uint32 _firstAudioPacketPts = 0xFFFFFFFF;
+		uint32 _firstVideoPacketPts = 0xFFFFFFFF;
+
 		int _prebufferedPackets = 150;
 	};
 


Commit: 362bfed2b832c949b5fa9c99cac05f82c423e994
    https://github.com/scummvm/scummvm/commit/362bfed2b832c949b5fa9c99cac05f82c423e994
Author: Alikhan Balpykov (luxrage1990 at gmail.com)
Date: 2025-06-07T20:41:23+02:00

Commit Message:
QDENGINE: Fix audio delay in mng and rybalka videos

Changed paths:
    engines/qdengine/qdcore/util/WinVideo.cpp


diff --git a/engines/qdengine/qdcore/util/WinVideo.cpp b/engines/qdengine/qdcore/util/WinVideo.cpp
index 14c57aa6a5f..f2835c31234 100644
--- a/engines/qdengine/qdcore/util/WinVideo.cpp
+++ b/engines/qdengine/qdcore/util/WinVideo.cpp
@@ -87,6 +87,14 @@ bool winVideo::open_file(const Common::Path &fname) {
 		return false;
 	}
 
+	// WORKAROUND: Fix lagging audio in mng and rybalka
+	// videos by setting specific number of prebuffered packets
+	// for MPEG-PS demuxer.
+	Common::String gameId = g_engine->getGameId();
+	if (gameId == "mng" || gameId == "rybalka") {
+		_decoder->setPrebufferedPackets(600);
+	}
+
 	if (!_decoder->loadStream(_videostream)) {
 		warning("WinVideo::open: Failed to Load Stream for file '%s'", filename.c_str());
 		_videostream = nullptr;




More information about the Scummvm-git-logs mailing list