mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Check the audio buffer size just in case.
This way we definitely won't overfill it.
This commit is contained in:
parent
f095ac656b
commit
936f34a6b7
5 changed files with 18 additions and 3 deletions
|
@ -867,6 +867,7 @@ int _PsmfPlayerFillRingbuffer(PsmfPlayer *psmfplayer) {
|
|||
int addMax = std::max(2048 * 100, tempbufSize);
|
||||
do {
|
||||
size = std::min(psmfplayer->mediaengine->getRemainSize(), tempbufSize);
|
||||
size = std::min(psmfplayer->mediaengine->getAudioRemainSize(), size);
|
||||
size = std::min(psmfplayer->streamSize - psmfplayer->readSize, size);
|
||||
if (size <= 0)
|
||||
break;
|
||||
|
@ -891,13 +892,13 @@ int _PsmfPlayerSetPsmfOffset(PsmfPlayer *psmfplayer, const char * filename, int
|
|||
if (offset > 0)
|
||||
pspFileSystem.SeekFile(psmfplayer->filehandle, offset, FILEMOVE_BEGIN);
|
||||
u8* buf = psmfplayer->tempbuf;
|
||||
u32 tempbufSize = sizeof(psmfplayer->tempbuf);
|
||||
int tempbufSize = (int)sizeof(psmfplayer->tempbuf);
|
||||
int size = (int)pspFileSystem.ReadFile(psmfplayer->filehandle, buf, 2048);
|
||||
int mpegoffset = bswap32(*(u32*)(buf + PSMF_STREAM_OFFSET_OFFSET));
|
||||
psmfplayer->readSize = size - mpegoffset;
|
||||
psmfplayer->streamSize = bswap32(*(u32*)(buf + PSMF_STREAM_SIZE_OFFSET));
|
||||
psmfplayer->fileoffset = offset + mpegoffset;
|
||||
psmfplayer->mediaengine->loadStream(buf, 2048, std::max(2048 * 500, (int)tempbufSize));
|
||||
psmfplayer->mediaengine->loadStream(buf, 2048, std::max(2048 * 500, tempbufSize));
|
||||
_PsmfPlayerFillRingbuffer(psmfplayer);
|
||||
psmfplayer->psmfPlayerLastTimestamp = psmfplayer->mediaengine->getLastTimeStamp();
|
||||
}
|
||||
|
|
|
@ -683,6 +683,15 @@ int MediaEngine::getRemainSize() {
|
|||
return std::max(m_pdata->getRemainSize() - m_decodingsize - 2048, 0);
|
||||
}
|
||||
|
||||
int MediaEngine::getAudioRemainSize() {
|
||||
if (!m_demux) {
|
||||
// No audio, so it can't be full, return video instead.
|
||||
return getRemainSize();
|
||||
}
|
||||
|
||||
return m_demux->getRemainSize();
|
||||
}
|
||||
|
||||
int MediaEngine::getAudioSamples(u32 bufferPtr) {
|
||||
if (!Memory::IsValidAddress(bufferPtr)) {
|
||||
ERROR_LOG_REPORT(ME, "Ignoring bad audio decode address %08x during video playback", bufferPtr);
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
|
||||
u8 *getFrameImage();
|
||||
int getRemainSize();
|
||||
int getAudioRemainSize();
|
||||
|
||||
bool stepVideo(int videoPixelMode);
|
||||
int writeVideoImage(u32 bufferPtr, int frameWidth = 512, int videoPixelMode = 3);
|
||||
|
|
|
@ -61,7 +61,7 @@ int MpegDemux::readPesHeader(PesHeader &pesHeader, int length, int startCode) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
if ((c & 0xC0) == 0x40) {
|
||||
if ((c & 0xC0) == 0x40) {
|
||||
read8();
|
||||
c = read8();
|
||||
length -= 2;
|
||||
|
|
|
@ -19,6 +19,10 @@ public:
|
|||
// return its framesize
|
||||
int getNextaudioFrame(u8** buf, int *headerCode1, int *headerCode2);
|
||||
|
||||
inline int getRemainSize() {
|
||||
return m_len - m_readSize;
|
||||
}
|
||||
|
||||
void DoState(PointerWrap &p);
|
||||
|
||||
private:
|
||||
|
|
Loading…
Add table
Reference in a new issue