[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