From d6477e808fffd224a666f6d85d257c4a8352b87f Mon Sep 17 00:00:00 2001 From: sum2012 Date: Mon, 8 Jun 2026 23:04:29 +0800 Subject: [PATCH] Fix setAudioStream --- Core/HW/MediaEngine.cpp | 11 +++++++++++ Core/HW/MediaEngine.h | 2 +- Core/HW/MpegDemux.cpp | 10 ++++++++-- Core/HW/MpegDemux.h | 1 + 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Core/HW/MediaEngine.cpp b/Core/HW/MediaEngine.cpp index f5bf6a03c4..32f94d4d7d 100644 --- a/Core/HW/MediaEngine.cpp +++ b/Core/HW/MediaEngine.cpp @@ -569,6 +569,17 @@ bool MediaEngine::setVideoStream(int streamNum, bool force) { return true; } +bool MediaEngine::setAudioStream(int streamNum) { + if (m_audioStream == streamNum) + return true; + + m_audioStream = streamNum; + if (m_demux) { + m_demux->setAudioChannel(streamNum); + } + return true; +} + bool MediaEngine::setVideoDim(int width, int height) { #ifdef USE_FFMPEG diff --git a/Core/HW/MediaEngine.h b/Core/HW/MediaEngine.h index ab1bc93964..6798364d4b 100644 --- a/Core/HW/MediaEngine.h +++ b/Core/HW/MediaEngine.h @@ -69,7 +69,7 @@ public: bool setVideoStream(int streamNum, bool force = false); // TODO: Return false if the stream doesn't exist. - bool setAudioStream(int streamNum) { m_audioStream = streamNum; return true; } + bool setAudioStream(int streamNum); u8 *getFrameImage(); int getRemainSize(); diff --git a/Core/HW/MpegDemux.cpp b/Core/HW/MpegDemux.cpp index ab5dcd5a23..23e089a8d2 100644 --- a/Core/HW/MpegDemux.cpp +++ b/Core/HW/MpegDemux.cpp @@ -187,10 +187,16 @@ bool MpegDemux::skipPackHeader() { return true; } +void MpegDemux::setAudioChannel(int audioChannel) { + if (m_audioChannel != audioChannel) { + m_audioChannel = audioChannel; + m_audioStream.clear(); + } +} + bool MpegDemux::demux(int audioChannel) { - if (audioChannel >= 0) - m_audioChannel = audioChannel; + setAudioChannel(audioChannel); bool looksValid = false; bool needMore = false; diff --git a/Core/HW/MpegDemux.h b/Core/HW/MpegDemux.h index 598e54518b..7f465b2aa0 100644 --- a/Core/HW/MpegDemux.h +++ b/Core/HW/MpegDemux.h @@ -16,6 +16,7 @@ public: bool addStreamData(const u8 *buf, int addSize); bool demux(int audioChannel); + void setAudioChannel(int audioChannel); // return its framesize int getNextAudioFrame(u8 **buf, int *headerCode1, int *headerCode2, s64 *pts = NULL);