diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index d57fd335ae..85483805f4 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -86,8 +86,39 @@ struct StreamInfo int num; }; +typedef std::map StreamInfoMap; + // Internal structure -struct MpegContextSimple { +struct MpegContext { + void DoState(PointerWrap &p) { + p.Do(defaultFrameWidth); + p.Do(videoFrameCount); + p.Do(audioFrameCount); + p.Do(endOfAudioReached); + p.Do(endOfVideoReached); + p.Do(videoPixelMode); + p.Do(mpegMagic); + p.Do(mpegVersion); + p.Do(mpegRawVersion); + p.Do(mpegOffset); + p.Do(mpegStreamSize); + p.Do(mpegFirstTimestamp); + p.Do(mpegLastTimestamp); + p.Do(mpegFirstDate); + p.Do(mpegLastDate); + p.Do(mpegRingbufferAddr); + p.Do(mpegStreamAddr); + p.DoArray(esBuffers, NUM_ES_BUFFERS); + p.Do(avc); + p.Do(avcRegistered); + p.Do(atracRegistered); + p.Do(pcmRegistered); + p.Do(isAnalyzed); + p.Do(streamMap); + mediaengine->DoState(p); + p.DoMarker("MpegContext"); + } + u32 defaultFrameWidth; int videoFrameCount; int audioFrameCount; @@ -113,17 +144,6 @@ struct MpegContextSimple { bool pcmRegistered; bool isAnalyzed; -}; -typedef std::map StreamInfoMap; - -struct MpegContext : public MpegContextSimple { - void DoState(PointerWrap &p) { - p.Do(*this); - p.Do(streamMap); - // Media engine has nothing exotic. - p.Do(*mediaengine); - p.DoMarker("MpegContext"); - } StreamInfoMap streamMap; MediaEngine *mediaengine; diff --git a/Core/HLE/scePsmf.cpp b/Core/HLE/scePsmf.cpp index 5452799683..f54ff71c43 100644 --- a/Core/HLE/scePsmf.cpp +++ b/Core/HLE/scePsmf.cpp @@ -56,7 +56,14 @@ class PsmfStream; // we read it manually. // TODO: Change to work directly with the data in RAM instead of this // JPSCP-esque class. -struct PsmfSimple { +typedef std::map PsmfStreamMap; +class Psmf { +public: + Psmf(u32 data); + ~Psmf(); + u32 getNumStreams() { return 2; } + void DoState(PointerWrap &p); + u32 magic; u32 version; u32 streamOffset; @@ -82,14 +89,6 @@ struct PsmfSimple { int videoHeight; int audioChannels; int audioFrequency; -}; -typedef std::map PsmfStreamMap; -class Psmf : public PsmfSimple { -public: - Psmf(u32 data); - ~Psmf(); - u32 getNumStreams() { return 2; } - void DoState(PointerWrap &p); PsmfStreamMap streamMap; }; @@ -125,7 +124,8 @@ public: } void DoState(PointerWrap &p) { - p.Do(*this); + p.Do(type); + p.Do(channel); } int type; @@ -178,7 +178,28 @@ Psmf::~Psmf() { } void Psmf::DoState(PointerWrap &p) { - p.Do(*this); + p.Do(magic); + p.Do(version); + p.Do(streamOffset); + p.Do(streamSize); + p.Do(headerOffset); + p.Do(streamDataTotalSize); + p.Do(presentationStartTime); + p.Do(presentationEndTime); + p.Do(streamDataNextBlockSize); + p.Do(streamDataNextInnerBlockSize); + p.Do(numStreams); + + p.Do(currentStreamNum); + p.Do(currentAudioStreamNum); + p.Do(currentVideoStreamNum); + + p.Do(EPMapOffset); + p.Do(EPMapEntriesNum); + p.Do(videoWidth); + p.Do(videoHeight); + p.Do(audioChannels); + p.Do(audioFrequency); int n = (int) streamMap.size(); p.Do(n); diff --git a/Core/HW/MediaEngine.h b/Core/HW/MediaEngine.h index 599125668a..9d6443d225 100644 --- a/Core/HW/MediaEngine.h +++ b/Core/HW/MediaEngine.h @@ -72,6 +72,18 @@ public: int readLength() { return readLength_; } void setReadLength(int len) { readLength_ = len; } + void DoState(PointerWrap &p) { + p.Do(fakeMode_); + p.Do(bufferAddr_); + p.Do(mpegStreamSize_); + p.Do(mpegOffset_); + p.Do(readLength_); + p.Do(videoWidth_); + p.Do(videoHeight_); + p.Do(fakeFrameCounter_); + p.DoMarker("MediaEngine"); + } + private: bool fakeMode_; u32 bufferAddr_;