From 5ce82bc028d6194ec3e99bc06f5b7d2a713c5e35 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 5 Mar 2013 08:39:32 +0800 Subject: [PATCH 1/5] IMPL Some Mpeg ref https://github.com/hrydgard/ppsspp/issues/508 please help to check whether I IMPL correctly --- Core/HLE/sceMpeg.cpp | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 18911d68a643..f60258c73691 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -77,6 +77,7 @@ static const int MPEG_HEADER_BUFFER_MINIMUM_SIZE = 2048; static const int NUM_ES_BUFFERS = 2; static const int PSP_ERROR_MPEG_NO_DATA = 0x80618001; +static const int PSP_ERROR_MPEG_INVALID_VALUE = 0x806101fe; static const int TPSM_PIXEL_STORAGE_MODE_16BIT_BGR5650 = 0X00; static const int TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888 = 0X03; @@ -1324,6 +1325,31 @@ u32 sceMpegQueryUserdataEsSize(u32 mpeg, u32 esSizeAddr, u32 outSizeAddr) return -1; } +u32 sceMpegAvcResourceGetAvcDecTopAddr(u32 mpeg) +{ + ERROR_LOG(HLE, "UNIMPL sceMpegAvcResourceGetAvcDecTopAddr(%08x)", mpeg); + return 0x12345678; +} + +u32 sceMpegAvcResourceFinish(u32 mpeg) +{ + return 0; +} + +u32 sceMpegAvcResourceGetAvcEsBuf(u32 mpeg) +{ + ERROR_LOG(HLE, "UNIMPL sceMpegAvcResourceGetAvcEsBuf(%08x)", mpeg); + return 0; +} + +u32 sceMpegAvcResourceInit(u32 mpeg) +{ + ERROR_LOG(HLE, "UNIMPL sceMpegAvcResourceInit(%08x)", mpeg); + if (mpeg != 1) { + return ERROR_MPEG_INVALID_VALUE; + } + return 0; +} /* MP3 */ int sceMp3Decode(u32 mp3, u32 outPcmPtr) @@ -1695,6 +1721,10 @@ const HLEFunction sceMpeg[] = {0xC02CF6B5,WrapI_UUU,"sceMpegQueryPcmEsSize"}, {0xC45C99CC,WrapU_UUU,"sceMpegQueryUserdataEsSize"}, {0x234586AE,WrapU_UUI,"sceMpegChangeGetAvcAuMode"}, + {0x63B9536A,WrapU_U,"sceMpegAvcResourceGetAvcDecTopAddr"}, + {0x8160a2fe,WrapU_U,"sceMpegAvcResourceFinish"}, + {0xaf26bb01,WrapU_U,"sceMpegAvcResourceGetAvcEsBuf"}, + {0xfcbdb5ad,WrapU_U,"sceMpegAvcResourceInit"}, }; const HLEFunction sceMp3[] = From fd50dc3a9d539de110a80e9d6b928c4d11bad6aa Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 5 Mar 2013 09:12:47 +0800 Subject: [PATCH 2/5] Add a comment that it's just a random address --- Core/HLE/sceMpeg.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index f60258c73691..a48f88d051db 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -1328,6 +1328,7 @@ u32 sceMpegQueryUserdataEsSize(u32 mpeg, u32 esSizeAddr, u32 outSizeAddr) u32 sceMpegAvcResourceGetAvcDecTopAddr(u32 mpeg) { ERROR_LOG(HLE, "UNIMPL sceMpegAvcResourceGetAvcDecTopAddr(%08x)", mpeg); +// it's just a random address return 0x12345678; } From a79713b8c403937e5374c06be43ca4c7d6244d8a Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 5 Mar 2013 09:18:21 +0800 Subject: [PATCH 3/5] Add a debug log for sceMpegAvcResourceFinish --- Core/HLE/sceMpeg.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index a48f88d051db..127fce7f60ab 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -1334,6 +1334,7 @@ u32 sceMpegAvcResourceGetAvcDecTopAddr(u32 mpeg) u32 sceMpegAvcResourceFinish(u32 mpeg) { + DEBUG_LOG(HLE,"sceMpegAvcResourceFinish(%08x)", mpeg); return 0; } From 03841486e16f86d7ccd323c374cc96b428e4aef6 Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 5 Mar 2013 10:01:45 +0800 Subject: [PATCH 4/5] Handle ringbufferAddr =0 in sceMpegCreate --- Core/HLE/sceMpeg.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 127fce7f60ab..06ee24633bfd 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -429,6 +429,7 @@ u32 sceMpegCreate(u32 mpegAddr, u32 dataPtr, u32 size, u32 ringbufferAddr, u32 f } SceMpegRingBuffer ringbuffer; + if(ringbufferAddr != 0){ Memory::ReadStruct(ringbufferAddr, &ringbuffer); if (ringbuffer.packetSize == 0) { ringbuffer.packetsFree = 0; @@ -437,6 +438,7 @@ u32 sceMpegCreate(u32 mpegAddr, u32 dataPtr, u32 size, u32 ringbufferAddr, u32 f } ringbuffer.mpeg = mpegAddr; Memory::WriteStruct(ringbufferAddr, &ringbuffer); + } // Generate, and write mpeg handle into mpeg data, for some reason int mpegHandle = dataPtr + 0x30; From 4b45af36301fcb47e937fe9c89259a090dadfdce Mon Sep 17 00:00:00 2001 From: sum2012 Date: Tue, 5 Mar 2013 21:05:25 +0800 Subject: [PATCH 5/5] Remove PSP_ERROR_MPEG_INVALID_VALUE in scempeg.cpp --- Core/HLE/sceMpeg.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Core/HLE/sceMpeg.cpp b/Core/HLE/sceMpeg.cpp index 06ee24633bfd..5c383dc20d8c 100644 --- a/Core/HLE/sceMpeg.cpp +++ b/Core/HLE/sceMpeg.cpp @@ -77,7 +77,6 @@ static const int MPEG_HEADER_BUFFER_MINIMUM_SIZE = 2048; static const int NUM_ES_BUFFERS = 2; static const int PSP_ERROR_MPEG_NO_DATA = 0x80618001; -static const int PSP_ERROR_MPEG_INVALID_VALUE = 0x806101fe; static const int TPSM_PIXEL_STORAGE_MODE_16BIT_BGR5650 = 0X00; static const int TPSM_PIXEL_STORAGE_MODE_32BIT_ABGR8888 = 0X03;