Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Hanayaka Nari Wa ga Ichizoku strange MP3 mono voice #5213

Closed
daniel229 opened this issue Jan 25, 2014 · 38 comments
Closed

Hanayaka Nari Wa ga Ichizoku strange MP3 mono voice #5213

daniel229 opened this issue Jan 25, 2014 · 38 comments
Labels
MP3 Issue involves sceMp3 features.
Milestone

Comments

@daniel229
Copy link
Collaborator

Accordance to http://www.emunewz.net/forum/showthread.php?tid=149045
the voice is a mono MP3.

06:59:370 user_main I[KERNEL]: HLE\sceKernelThread.cpp:2180 sceKernelStartThread(thread=298, argSize=0, argPtr=00000000)
06:59:418 Sound Thread I[ME]: HLE\sceAtrac.cpp:1272 0=sceAtracSetDataAndGetID(08a6c3c0, 00126424)
06:59:418 Sound Thread W[ME]: HLE\sceAtrac.cpp:1162 This is an atrac3+ stereo audio
06:59:419 NowLoading I[KERNEL]: HLE\sceKernelThread.cpp:2299 sceKernelExitDeleteThread(0)
06:59:488 user_main I[IO]: HLE\sceIo.cpp:837 stdout: 071.gim Loaded
06:59:622 user_main I[IO]: HLE\sceIo.cpp:837 stdout: 700.gim Loaded
06:59:654 user_main I[IO]: HLE\sceIo.cpp:837 stdout: 071.gim CountPlus
06:59:687 user_main I[IO]: HLE\sceIo.cpp:837 stdout: 071.gim CountPlus
07:09:431 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:21:643 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:23:646 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:25:564 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:27:516 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:34:206 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 00000000
07:34:573 user_main I[ME]: HLE\sceMp3.cpp:533 sceMp3GetInfoToAddStreamData(09FFF5B8, 08A615C4, 09FFF5DC, 09FFF5D8)
07:34:589 user_main I[KERNEL]: HLE\sceKernelThread.cpp:2180 sceKernelStartThread(thread=280, argSize=4, argPtr=08a621ac)
07:34:611 ThreadCtrl I[KERNEL]: HLE\sceKernelThread.cpp:2273 sceKernelExitThread(0)
07:34:623 user_main I[ME]: HLE\sceMp3.cpp:561 sceMp3NotifyAddStreamData(09FFF5B8, 29232)
07:41:180 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 09fff5b8
07:43:816 user_main E[ME]: HLE\sceMp3.cpp:589 sceMp3ReleaseMp3Handle: bad mp3 handle 09fff5b8
07:44:383 user_main I[ME]: HLE\sceMp3.cpp:533 sceMp3GetInfoToAddStreamData(09FFF5B8, 08A615C4, 09FFF5DC, 09FFF5D8)
07:44:400 user_main I[KERNEL]: HLE\sceKernelThread.cpp:2180 sceKernelStartThread(thread=280, argSize=4, argPtr=08a621ac)
07:44:401 ThreadCtrl I[KERNEL]: HLE\sceKernelThread.cpp:2273 sceKernelExitThread(0)
07:44:433 user_main I[ME]: HLE\sceMp3.cpp:561 sceMp3NotifyAddStreamData(09FFF5B8, 37008)

@dbz400
Copy link
Contributor

dbz400 commented Apr 5, 2014

I'm trying to log the channels/samplerate/bitrate @ #5804 to see if the ffmpeg return the header the correct here.

@sum2012
Copy link
Collaborator

sum2012 commented Apr 5, 2014

JPCSPtrace log with scemp3
https://gist.github.com/sum2012/e2d513c55342c40f5e12
PPSSPP scemp3 debug log with fix sceMp3ReleaseMp3Handle return value 0
https://gist.github.com/sum2012/e2826b981a58baf00eb8

Real PSP return error code in sceMp3Decode
Sound Thread VOI - sceMp3Decode 0x0, 0x9F8D7A8 = 0x807F00FD

edit:I take a search
Most likely an error code meaning that the header is not a valid mp3header. That's the case when you have an ID3 tag at the start of the mp3. sceMp3 doesn't parse that unfortunately, so you have to do it yourself (and give the proper streamStart/streamEnd address to mp3InitArgs) or strip id3 tags from the mp3s you play

@dbz400
Copy link
Contributor

dbz400 commented Apr 6, 2014

Other than ocassionaly returning of 0x807F00FD in sceMp3decode , jpcsptrace always return 0x1200 but we are returning 0x900 only

@unknownbrackets
Copy link
Collaborator

Well, 0x1200 is double 0x0900. Maybe something to do with mono/stereo?

-[Unknown]

@dbz400
Copy link
Contributor

dbz400 commented Apr 6, 2014

@sum2012
Copy link
Collaborator

sum2012 commented Apr 6, 2014

Force return 0x1200 still have strange MP3 voice

@dbz400
Copy link
Contributor

dbz400 commented Apr 6, 2014

Yep I tried as well probably need to change others elsewhere

@unknownbrackets
Copy link
Collaborator

Well, I would guess it's not writing enough samples or whatever. Just looking at the return value is very "skin deep".

-[Unknown]

kaienfr added a commit to kaienfr/ppsspp_cn that referenced this issue Apr 6, 2014
PS: even i've cleanup the sceMp3 code but it's not supposed to fix all issues of Mp3 inside sceMp3.
@kaienfr
Copy link
Contributor

kaienfr commented Apr 6, 2014

should be fixed here kaienfr@e9c605a

@dbz400
Copy link
Contributor

dbz400 commented Apr 6, 2014

Thanks @kaienfr . The voice sounds good now in this game .

FYI .Downstream panic is now getting lots of error decoding.

41:15:924 thread mp3 p E[ME]: HLE\sceMp3.cpp:198 avcodec_decode_audio4: Error decoding audio, return -1094995529
41:15:924 thread mp3 p I[ME]: HLE\sceMp3.cpp:252 sceMp3CheckStreamDataNeeded(0bebca38)
41:15:924 thread mp3 p I[ME]: HW\MediaEngine.cpp:79 FF: Header missing
41:15:924 thread mp3 p E[ME]: HLE\sceMp3.cpp:198 avcodec_decode_audio4: Error decoding audio, return -1094995529
41:15:924 thread mp3 p I[ME]: HLE\sceMp3.cpp:252 sceMp3CheckStreamDataNeeded(0bebca38)
41:15:924 thread mp3 p I[ME]: HW\MediaEngine.cpp:79 FF: Header missing
41:15:924 thread mp3 p E[ME]: HLE\sceMp3.cpp:198 avcodec_decode_audio4: Error decoding audio, return -1094995529

@kaienfr
Copy link
Contributor

kaienfr commented Apr 6, 2014

The decoding error is normal, I know.
That's due to the fact that the mp3 file is read part by part into buffer.
So when mp3 decoder try to decode the last incomplete frame at the end of the buffer, surely, you will get such errors. But it's nothing since I have modfied the way to fill the buffer, and if we detect such incomplete frame, we will reread it again in the next load. But we can still obvserve some error after reloading especially the first two frames. I am not sure why, it seems that ffmpeg try to read again and again the last error frame at the end of the buffer and giveup after few tries to restart from the begining of its buffer.

PS: some of sceMp3 functions are really not working well, we need deep improvement. I try to rewrite most of functions and make them in a more resonable way, but I know it's still not perfact.

@daniel229
Copy link
Collaborator Author

Great, sounds much better now.

@dbz400
Copy link
Contributor

dbz400 commented Apr 6, 2014

I see. thanks @kaienfr

@kaienfr
Copy link
Contributor

kaienfr commented Apr 6, 2014

With pleasure!
Anyway, I think sceMp3 still need to be improve further more since some games like miku still can not normally playing custom mp3. In my above branch, I have fixed the issue that we can already explore the mp3 files in the game, but only the first few frames are played, then stopped. That's still a mistery issue...

kaienfr added a commit to kaienfr/ppsspp_cn that referenced this issue Apr 10, 2014
1. The voice speed issue (eg. "Hanayaka Nari Wa ga Ichizoku"  hrydgard#5213) should be ok.
2. Downstream Panic is all right.
3. Improve ffmpeg callback function to correctly control loops and buffer copies.
kaienfr added a commit to kaienfr/ppsspp_cn that referenced this issue Apr 10, 2014
1. The voice speed issue (eg. "Hanayaka Nari Wa ga Ichizoku" hrydgard#5213) should be ok.
2. Downstream Panic is all right.
3. Improve ffmpeg callback function to correctly control loops and buffer copies.
@dbz400
Copy link
Contributor

dbz400 commented Apr 14, 2014

Probably this one can ve closed now?

@hrydgard
Copy link
Owner

Can someone confirm this plays correctly now?

@dbz400
Copy link
Contributor

dbz400 commented Apr 14, 2014

@hrydgard , I can confirm: it is working fine now.

@daniel229
Copy link
Collaborator Author

No,the voice is too fast.

@kaienfr
Copy link
Contributor

kaienfr commented Apr 15, 2014

emm, the voice seems little bit fast but slower than before. still have no idea on this issue.

@dbz400
Copy link
Contributor

dbz400 commented Apr 15, 2014

Probably not prefect yet but previously when I tried to move frame to heap , it did sound better.Anyway I eill test it again.

@kaienfr
Copy link
Contributor

kaienfr commented Apr 15, 2014

frame_ is actuelly in heap. It's only allocated in class constructor, and deallocate in destructor.
In fact, currently, we have only packet is in stack.

@dbz400
Copy link
Contributor

dbz400 commented Apr 15, 2014

@kaienfr .I see. then i think should be the same sound quality . I did remmeber of your old mp3 build fixes did sound bit better than the current master .I will check this out when i've time tonight.

@kaienfr
Copy link
Contributor

kaienfr commented Apr 15, 2014

@raven02 yeah, it seems that in one of my previois commit, there is one better speed than the current state, but I have forgotten how it works,already few weeks ago...

@unknownbrackets
Copy link
Collaborator

Per #13333 this is too slow in v1.9.3 and higher. That means #12005, and might mean an issue with the delay in sceMp3Decode possibly.

Neither speed (before or after those changes) was right, and maybe now there's just something else still wrong.

-[Unknown]

@sum2012
Copy link
Collaborator

sum2012 commented Jan 19, 2021

The bad sound maybe from
40:06:777 idle0 E[SCEAUDIO]: hle__sceaudio.cpp:355 Channel 8 buffer underrun at 36 of 46
full log v1.10.3-1564-g720c5b417:
ppsspplogv1.10.3-1564-g720c5b417.txt.zip

I will test again in real psp in next day at 9:00 pm in home.

@sum2012
Copy link
Collaborator

sum2012 commented Jan 20, 2021

The sound is right in real psp

@sum2012
Copy link
Collaborator

sum2012 commented Jan 23, 2021

Re-doing JPCSPTrace of @unknownbrackets version
https://gist.github.com/sum2012/8f4f7c8972b3be353d75b30aa08df4ef
I find 2 point:

1: In the real psp ,It call sceMp3ReleaseMp3Handle first but we call sceMp3Init first.
2: Find another error code 0x80671103 in sceMp3Decode

03:58:23.997121 Sound Thread VOI - -> sceMp3Decode 0x0, 0x9F8B4A4 = 0x0
03:58:23.998772 Sound Thread VOI - <- sceMp3Decode 0x0, 0x9F8B4A4 = 0x1200
03:58:24.033163 Sound Thread VOI - -> sceMp3Decode 0x0, 0x9F8B4A8 = 0x0
03:58:24.036294 Sound Thread VOI - <- sceMp3Decode 0x0, 0x9F8B4A8 = 0x1200
03:58:24.151928 user_main - -> sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:24.151993 user_main - <- sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:24.069602 Sound Thread VOI - -> sceMp3Decode 0x0, 0x9F8B4A4 = 0x0
03:58:24.830098 Sound Thread VOI - <- sceMp3Decode 0x0, 0x9F8B4A4 = 0x80671103
03:58:24.886017 user_main - -> sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:24.886083 user_main - <- sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:26.354167 user_main - -> sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:26.354236 user_main - <- sceMp3ReleaseMp3Handle 0x0 = 0x0
03:58:26.921503 user_main - -> sceMp3ReserveMp3Handle 0x9FFAFB8 = 0x0
03:58:26.921576 user_main - <- sceMp3ReserveMp3Handle 0x9FFAFB8 = 0x0
03:58:26.921616 user_main - -> sceMp3GetInfoToAddStreamData 0x0, 0x8A615C4, 0x9FFAFDC, 0x9FFAFD8 = 0x0
03:58:26.921655 user_main - <- sceMp3GetInfoToAddStreamData 0x0, 0x8A615C4, 0x9FFAFDC, 0x9FFAFD8 = 0x0
03:58:26.971416 user_main - -> sceMp3NotifyAddStreamData 0x0, 0x9090 = 0x0
03:58:26.971483 user_main - <- sceMp3NotifyAddStreamData 0x0, 0x9090 = 0x0
03:58:26.971520 user_main - -> sceMp3Init 0x0 = 0x0
03:58:26.972977 user_main - <- sceMp3Init 0x0 = 0x0

@hrydgard hrydgard reopened this Jan 24, 2021
@hrydgard
Copy link
Owner

hrydgard commented Jan 24, 2021

Moving to milestone 1.12 for more investigation into the resampling functionality. Workaround is merged.

@hrydgard hrydgard added this to the v1.12.0 milestone Jan 24, 2021
@sum2012
Copy link
Collaborator

sum2012 commented Jan 24, 2021

Update log to v1.10.3-1625-g5686b3a64-windows-amd64
https://gist.github.com/sum2012/dfcb9a0b6dcf2c7e7ac9fe5df4ab40fa

@sum2012
Copy link
Collaborator

sum2012 commented Jan 24, 2021

I will to try to test other games have problem or not
https://report.ppsspp.org/logs/kind/1036

anr2me pushed a commit to anr2me/ppsspp that referenced this issue Jan 24, 2021
@unknownbrackets
Copy link
Collaborator

unknownbrackets commented Jan 24, 2021

So just to make sure, the audio sounds right now?

That means treating the 32kHz audio as if it was 44.1kHz audio and resampling to 32kHz (therefore actually resampling to ~23kHz) is the solution? Or, more likely the logic in the method is somehow messed up and that's not actually what it does?

If it's not messed up, that might imply we're treating mono/stereo wrong because ~23kHz is near 22.05kHz.

-[Unknown]

@sum2012
Copy link
Collaborator

sum2012 commented Jan 24, 2021

Yes, the audio sounds right now

@unknownbrackets
Copy link
Collaborator

Okay, I need a bit more information - my tests are still not allowing that, but maybe it's an issue with my test. In sceMp3.cpp:

Find:

		DEBUG_LOG(ME, "startPos %llx endPos %llx mp3buf %08x mp3bufSize %08x PCMbuf %08x PCMbufSize %08x",
			Au->startPos, Au->endPos, Au->AuBuf, Au->AuBufSize, Au->PCMBuf, Au->PCMBufSize);
	} else {

Replace:

		ERROR_LOG(ME, "SceMp3InitArg startPos %llx endPos %llx mp3buf %08x mp3bufSize %08x PCMbuf %08x PCMbufSize %08x",
			Au->startPos, Au->endPos, Au->AuBuf, Au->AuBufSize, Au->PCMBuf, Au->PCMBufSize);
	} else {
		ERROR_LOG(ME, "SceMp3InitArg ZERO");

Find:

	if (FindMp3Header(ctx, header, 1440) < 0)
		return hleDelayResult(hleLogWarning(ME, ERROR_AVCODEC_INVALID_DATA, "no header found"), "mp3 init", PARSE_DELAY_MS);

Replace:

	if (FindMp3Header(ctx, header, 1440) < 0)
		return hleDelayResult(hleLogWarning(ME, ERROR_AVCODEC_INVALID_DATA, "no header found"), "mp3 init", PARSE_DELAY_MS);

	ERROR_LOG(ME, "sceMp3Init HEADER: %08x", header);

What I'm trying to do is replicate the frame header to trigger sceMp3's behavior. I can send it appropriate audio data after that. Just looking for these two log messages for these mono mp3 files that play at 32kHz.

If mono is supported, I suspect we're supposed to output 44.1kHz single-channel mono, and are instead now outputting 23kHz stereo. This means we're losing audio quality and playing it slightly (but not significantly) faster than it should be played. But I can't confirm unless I can get the darn sceMp3 library to accept my mp3s...

In the trace, the overall structure of the init looks regular:

01:08:07 user_main - sceMp3ReserveMp3Handle 0x9FFD2B8 = 0x0
01:08:07 user_main - sceMp3GetInfoToAddStreamData 0x0, 0x8A615C4, 0x9FFD2DC, 0x9FFD2D8 = 0x0
01:08:07 user_main - sceMp3NotifyAddStreamData 0x0, 0x7230 = 0x0
01:08:07 user_main - sceMp3Init 0x0 = 0x0

I've tried frame headers including [ 0xFF, 0xFB, 0x18, 0x00 ] and [ 0xFF, 0xFB, 0x28, 0x00 ], which both represent 32kHz stereo at different bitrates. Then I tried [ 0xFF, 0xFB, 0x18, 0xC0 ] and [ 0xFF, 0xFB, 0x18, 0xC0 ] which represents stereo 32kHz at 32kbps and 64kbps. I'm wondering if it expects a different buffer size or something...

Even worse, this log says not MPEG v1, which my tests also can't pass, but maybe it's related:
https://report.ppsspp.org/logs/game/ULJM05998_1.01

-[Unknown]

@sum2012
Copy link
Collaborator

sum2012 commented Jan 25, 2021

Modify log: https://gist.github.com/sum2012/553a2e087c4881874c2c69ff40ea0c25
1:04:093 user_main D[ME]: HLE\sceMp3.cpp:408 sceMp3Init(): channels=1, samplerate=32000Hz, bitrate=48kbps, layerBits=1 ,versionBits=3
20:59:656 user_main E[ME]: HLE\sceMp3.cpp:398 sceMp3Init HEADER: fffb38c0

@unknownbrackets
Copy link
Collaborator

Thanks. I finally figured out it has to do with sdk version, 0x03090510 and newer are different. I'll dig into it more soon.

-[Unknown]

@sum2012
Copy link
Collaborator

sum2012 commented Jan 27, 2021

The hack has removed in #13981 ,so that this issue can close

@sum2012 sum2012 closed this as completed Jan 27, 2021
@sum2012 sum2012 modified the milestones: v1.12.0, v1.11.0 Jan 27, 2021
qurious-pixel added a commit to qurious-pixel/ppsspp that referenced this issue Feb 9, 2021
* add assets to ubuntu build artifact

This enables us to run PPSSPPSDL in the ubuntu artifact zip as normal release. Can be uploaded to the automated ppsspp download pake. After downloading the artiact zip just chmod +x PPSSPPSDL and install libsdl2-dev libgl1-mesa-dev libglu1-mesa-dev. Then everything works fine :)

* Add more error checking in SD storage detection

See hrydgard#13827

* Add 3 games to ForceMax60FPS

* Add game ID for russian version of Tron Evolution

* Prevent access violation when running out of userMemory due to piling up AdhocMatching events.

* Send AdhocMatching Data from within HLE whenever possible instead of through matchingEvent Thread.

* Reducing AdhocMatching events delay to prevent matchingEvents from piling up on Lord of Arcana.

* Try another method for getting SD card storage paths (env vars).

See hrydgard#13827

* Add a fullscreen toggle button to the main screen (Windows-only for now)

* Manually tighten up the layout a bit in the top right corner

* Use the same logic of game setting for main menu full screen, add other system

* Add a file picker (WIP)

* Enable using the folder browser on Android to select SD card through a gross hack.

Should help hrydgard#13827

Not yet using storage framework properly, just stealing the URI.

* Improve some i18n things

- reuse some translations
- move some strings to a more suitable category

I will adapt the lang .ini files accordingly.

* jit: Fix conditional disable flags.

* irjit: Correct flags for SetCtrlVFPUReg.

Fixes hrydgard#13897.  Caused the reg to be optimized out.

* irjit: Fix mtv for INF4.

* Windows: Handle fullscreen message consistently.

This handles it the same way as SDL, etc. so that the new button on the
main screen works again.

* http: Prevent Windows header leak from HTTPClient.

* UI: Cleanup Windows header in MainScreen.cpp.

Better to have this come from System, probably.  It's mainly for Windows
anyway, to alert people their save data isn't permanent.

* FixPGF for Euro Characters.(Balance emphasis)

* GPU: Correct shader gen with weights as floats.

For now, this supports the option.  We should probably just move to
everything being floats, but we already prefer software skinning.

Fixes hrydgard#13903.

* Fix copy/paste typo causing crash getting tempdirs if an env var had no value

* Android: Fix headless and unittest build.

* Build: Validate unittest/headless on Android.

* Android: Add NEON/SSE funcs into Headless/UnitTest.

* irjit: Add disable flag for simplify passes.

* irjit: Update clobber flag on inst swap.

Fixes IR in Persona 3.

* PGF Re-Fixed Euro Characters

* Enable BlockTransferAllowCreateFB for Gradius Collection

* Update Template

* Make sure we don't try to set a negative viewport size.

Should help hrydgard#13921.

* VK: Re-apply the old Adreno driver bug workaround. Fixes hrydgard#13910.

Should likely fix issue hrydgard#13923 too.

* Fix Stuck issue on some games (Dissidia 012, Full Auto 2, etc) when Failed to connect to Adhoc Server (faked success)

* Module: Reverse a single HI16/LO16 pair correctly.

If there is only one imported variable as a HI16/LO16, unloading the
module wasn't properly reversing the link.  See hrydgard#13104.

* Module: Keep HI16/LO16 in a temp state object.

This doesn't need to live any longer than the link or unlink, so let's
just make that abundantly clear.

* Remove re-test each month

* Compat: Note that Gradius requires block transfer.

Of course, there are many more that do, but might as well add since we're
tracking it here.

* Headless: Allow connecting the web debugger.

* Module: Keep the state for each import.

On exports, we iterate modules then imports.
But on imports, we iterate the exports to find the module, so we need to
keep the state around higher up.

* SoftGPU: Fix sprite provoking vertex in fast path.

It was right everywhere else.

* Vulkan: Delete only created swapchain images.

We do other null checks here, same reason.  Create may have failed.

* There's little reason to build at O3, so let's just not. Changing to O2.

See hrydgard#13920 for a breakage report.

* CMake fixes and new --ios-xcode ./b.sh command.

Also enables stencil for the iOS backbuffer. Fixes the GPU test and will doubtlessly
fix problems with running non-buffered (which you shouldn't do anyway though).

Slim alternative to hrydgard#13766 with less risk to buildbots.

* Adds two new tests to GPU driver test screen: Adreno shader logic test and flat shading

The adreno test tests for the bug mentioned in hrydgard#13910.
Very clear repro on Adreno 630, Pocophone F1.

The flat shading test is an untested attempt at a repro of

(will test that tomomorrow).

* Add texture to flat shaded test.

* Compat: Note that 3 LEGO games those are require Buffered rendering

* More GPU test improvements

* Fix the flat test. Unfortunately doesn't repro the bug :(

* GL FB readback: Only use "inout" if we actually want to read from the fb.

* Headless: Allow screenshot compare without backend.

This makes not just graphics-enabled tests work in headless on softgpu,
but also screenshot comparison ones.

* Headless: Read expected file as a FileLoader.

This makes it possible to run tests from network locations.

* Headless: Allow PNGs and http:// for screenshot.

* Headless: Disable http disk cache.

* Headless: Simplify executing a ppdmp via headless.

* Headless: Default to PNG for ppdmp tests.

* GPU: Fix safe size checks when rect offscreen.

* Vulkan: Prevent scaling shader leak.

No need to recreate if they haven't changed.

* Compat: Enable reinterpret for Kingdom Hearts.

See hrydgard#11223.  Should enable it for everything at some point.

* Debugger: Add API to trigger buttons.

* Debugger: Broadcast ctrl input events.

This can be useful to trigger debugging functionality on button press.

* Debugger: Include all press states for convenience.

In case of a multi-button shortcut, which might be common for debugging.

* Kernel: Adjust sceKernelGetThreadExitStatus timing.

See hrydgard#13703.

* PGF Fixed Bold & Italic property and camouflage the Font name.

* Oops! I misstook uploading jpn0.pgf.

* Resample all mp3

Fix hrydgard#5213

* Fix Russian (Cyrillic alphabet) on jpn0.pgf.

* Some marks position fixed on jpn0.pgf

* build fix

* PPGe: Scale down by worst of window/internal res.

See hrydgard#13958.

* compat.ini: Add Split/Second to [ReinterpretFramebuffers]. See hrydgard#13957

* Plugins: Enable by default.

* Resample only in 32000Hz

* Fix Greek characters & Roman numbers & all balance on jpn0.pgf

* Do PtpConnect internally during PtpOpen, since some games (ie. The Warriors) seems to do PtpSend immediately after PtpOpen without trying to PtpConnect first.

* Fix returned error code on PtpSend and PtpRecv when socket is not connected yet.

* OpenGL fragment shader gen: Fix precision inconsistency for v_color0/1.

Probably won't fix anything, just want this in for, well, consistency.

Noticed it debugging the iOS flat shading issues, but doesn't fix that.

* Fix duplicate shader version in the flat shader test

Unbreaks the flat shading test on Adreno (ended up in trying to link a
 #version 300 and a #version 320 shader together which it didn't like)

* Io: Don't allow async close while async busy.

See hrydgard#6582.

* GE: Better naming of render passes for color reinterpret

* GPU: Respect stencil write mask for 5551 buffers.

If the mask is 0x7F on 5551, that's equivalent to allowing the clear
entirely.  See hrydgard#13391.

* D3D9: Don't allow separate alpha clears.

Doesn't seem like the color mask applies to clears.

* Reporting: Expose CRC queue methods for other uses.

This way UI can expose the CRC if needed.

* Don't allow ForcedFirstConnect hack when using PtpConnect within PtpOpen to prevent returning result from blocking PtpConnect instead of result of PtpOpen.

* sceMp3Init:Add layerBits and versionBits information

* Add header information

* GLES: Remove direct khrplatform.h header include.

Shouldn't be needed anymore, was a hack for Nokia.  See hrydgard#13978.

* Mp3: Correct error handling for newer sdk versions.

The 6.xx behavior might be important if a game relies on it to add data.

* Mp3: Allow decode without pcm pointer.

Just like other audio decoding, you're allowed to skip audio.
Also prevents a crash if the mp3 is not yet inited.

* Add back XCode TARGETED_DEVICE_FAMILY config line

xcode warns that the value is deprecated or something, but maybe it still does something. Appears iPad support is broken right now.

* Mp3: Always keep sample rate from original mp3.

Our codec context is updated with the source sample rate, so this makes us
not resample at all.

Converting to stereo still seems correct.

* Updated GameMode initial data sync, in case remote players aren't listening yet when sending initial data (fix Pocket Pool)

* Mp3: Correct logging for init.

* Remove duplicates from ThreadManForKernel

* Vulkan: Add MMPX upscaling texture shader.

See https://casual-effects.com/research/McGuire2021PixelArt/index.html

* Vulkan: Allow tex shaders to specify a max scale.

* Specify MaxScale=2 for the new MMPX texture scaling shader

* Fix Greek characters ltn0~7.pgf

* gitlab ci change requested by m4xw

* FindFFmpeg: Fix a few issues

1. postproc now looks for postprocess.h (there is no postproc.h header).
2. pkg-config fallback condition now works (find_path/library set the
   variable to ${var}-NOTFOUND but it was checking for an empty string).

* (.gitlab-ci.yml) Add windows-x64 target

* Mpeg:Only allow firmware >= 3 for warmup

Fix hrydgard#13996

* Try to build fix on non-windows

* CMake: Add USE_UBSAN

* CMake: Rename USE_ADDRESS_SANITIZER to USE_ASAN

For consistency with USE_UBSAN

* CMake: Fix UBSAN link error

* Fix Russian characters ltn8~15.pgf

* Fix alignment issues in ISOFileSystem

Fixes hrydgard#14002

* jit: Make branch shift more obvious.

And also not technically undefined behavior.

* Fix connection issue on Dynasty Warriors (Shin Sangoku Musou) games when playing with more than 2 players.

* Minimize the Adreno shader compiler bug repro test

* Fix left shift of negative value in MIPSCodeUtils

Fixes a benign UBSAN error to improve the signal-to-noise ratio of
UBSAN errors.

Fixes hrydgard#14015

* x64Emitter: Fix unaligned store UBSAN errors

This compiles to the same assembly as before even without optimizations and avoids UB.

https://godbolt.org/z/4G5edM

While the UB here is benign, this improves signal-to-noise ratio of UBSAN errors.

Fixes hrydgard#14005

* Fix logging flags

1. The logging flags were being ignored (-v, -d)
2. Adds a `--loglevel` argument. Useful when using the debug build for
   ASAN/UBSAN to hide extremely noisy debug messages.

* Attempt to fix hrydgard#14022

* Fix Apple gpu detection

* Core: Correct branch analysis truncation.

* jit: Be very clear on sign extension.

* Only force the log level if it set via an argv

Follow-up to hrydgard#14019

* Io: Consistently use LE values of ISO entries.

Better to be consistent across big endian and little endian, in case
something was mastered wrong.

* Vulkan: Fix image layout issues after compute shader uploads.

We're already in GENERAL so probably not worth to transfer to DST just
to do even more transfers due to the silliness of GenerateMip.

I'm planning to rework the whole texture upload thing to be far more
optimal with some kind of TextureUploadManager

Fixes hrydgard#13987

* Mpeg:Only allow firmware >= 6 for warmup

Fix blue screen in hrydgard#13146

* Ge: Improve some logging and memchecks.

Explicitly trigger memchecks on readback.

* Ge: Restore saved context when ending a list.

Otherwise another list queued by a Head push could use the wrong context
data.  See hrydgard#13346.

* Framedump test screen. Downloads a list of framedumps.

* Add a new command in developer tools to list and load framedumps from framedump.ppsspp.org/repro/

Useful to make it easy to test GPU driver bugs etc, without having to
use real games or copying files around.

* Add checkbox to enable/disable driver bug workarounds.

* Fix minor rendering glitch in PPSSPP's menus on iOS

* Have the flat shading workaround obey the driver workarounds checkbox

* Loaders: Prevent errors on 0 byte reads.

Was happening when opening an http:// GE frame dump.

* Core: Maintain frame dump disc ID in SFO.

This way we won't generate a fake one later and use it for anything else.

* vertexjit: Correct saved registers on x64.

* Core: Assert debug stats remain positive.

* vertexjit: Only save extra regs on x64.

* Updated PdpStat and PtpStat

* Update README.md for 1.11

* Address initial feedback by iota97

* List fixed games. Thanks sum2012

* More from unknown and sum2012

* More stuff in README.md

* (.gitlab-ci.yml) Add linux-i686 and windows-i686 targets (+ prevent creation of 'null' file when building Windows libretro cores)

* Fix possible lock issue during AdhocMatchingStart

* Updated PdpStat to prevent rcv_sb_cc from exceeding the buffer size arg (since we use larger buffer size to prevent micro stutters or disconnection issue due to too many dropped packets with small buffer size).
TODO: May need to improve it to be able to calculate the correct size if there are multiple datagram messages

* UI: Correct developer tools test run.

* Make a couple of UI animations refresh rate independent

* Core: Reset state properly on CPU init failure.

* Windows: Prevent crash on null symbol map.

Happened during a double error scenario, but might as well check.

* We don't really need to allocate a buffer when using MSG_TRUNC on recvfrom

* Minor renaming

* Moving hleDelayResult from internal function of SetSocketAlert to prevent waking up HLE-blocked thread

* Fix possible race condition issue.

* Fix jpn0.pgf characters position.

* Debugger: Populate funcs if disassembly open early.

* PPGe: Fallback to atlas text on alloc fail.

* PPGe: Clear text allocations on shutdown.

* Updated some Logs to help finding the location of the call to debug.

* Removing hleDelayResult from internal adhoc functions to prevent waking up thread that supposed to be blocked by the outer HLE.

* Run the link script

* Run the link script, fixups

* Update lang,pspautotests submodules

* Do the title screen animation by accumulator instead, to avoid a long first frame breaking it.

* Update version to 1.11

* PPGe: Decimate text images properly.

Co-authored-by: kaiomatico <kai.wienberg@gmail.com>
Co-authored-by: Henrik Rydgård <hrydgard@gmail.com>
Co-authored-by: Panderner <37503397+Panderner@users.noreply.github.com>
Co-authored-by: ANR2ME <anr2000@gmail.com>
Co-authored-by: iota97 <giovi.cocco@gmail.com>
Co-authored-by: vnctdj <3978690+vnctdj@users.noreply.github.com>
Co-authored-by: Unknown W. Brackets <checkins@unknownbrackets.org>
Co-authored-by: nassau-tk <dt.kadoike@gmail.com>
Co-authored-by: sum2012 <consignpo@gmail.com>
Co-authored-by: AdamN <ANR2ME@users.noreply.github.com>
Co-authored-by: Florin9doi <Florin9doi@users.noreply.github.com>
Co-authored-by: Gleb Mazovetskiy <glex.spb@gmail.com>
Co-authored-by: jdgleaver <james@leaver.myzen.co.uk>
Panderner added a commit to Panderner/ppsspp that referenced this issue Feb 14, 2021
* Adds two new tests to GPU driver test screen: Adreno shader logic test and flat shading

The adreno test tests for the bug mentioned in hrydgard#13910.
Very clear repro on Adreno 630, Pocophone F1.

The flat shading test is an untested attempt at a repro of

(will test that tomomorrow).

* Add texture to flat shaded test.

* Compat: Note that 3 LEGO games those are require Buffered rendering

* More GPU test improvements

* Fix the flat test. Unfortunately doesn't repro the bug :(

* GL FB readback: Only use "inout" if we actually want to read from the fb.

* Headless: Allow screenshot compare without backend.

This makes not just graphics-enabled tests work in headless on softgpu,
but also screenshot comparison ones.

* Headless: Read expected file as a FileLoader.

This makes it possible to run tests from network locations.

* Headless: Allow PNGs and http:// for screenshot.

* Headless: Disable http disk cache.

* Headless: Simplify executing a ppdmp via headless.

* Headless: Default to PNG for ppdmp tests.

* GPU: Fix safe size checks when rect offscreen.

* Vulkan: Prevent scaling shader leak.

No need to recreate if they haven't changed.

* Compat: Enable reinterpret for Kingdom Hearts.

See hrydgard#11223.  Should enable it for everything at some point.

* Debugger: Add API to trigger buttons.

* Debugger: Broadcast ctrl input events.

This can be useful to trigger debugging functionality on button press.

* Debugger: Include all press states for convenience.

In case of a multi-button shortcut, which might be common for debugging.

* Kernel: Adjust sceKernelGetThreadExitStatus timing.

See hrydgard#13703.

* PGF Fixed Bold & Italic property and camouflage the Font name.

* Oops! I misstook uploading jpn0.pgf.

* Resample all mp3

Fix hrydgard#5213

* Fix Russian (Cyrillic alphabet) on jpn0.pgf.

* Some marks position fixed on jpn0.pgf

* build fix

* PPGe: Scale down by worst of window/internal res.

See hrydgard#13958.

* compat.ini: Add Split/Second to [ReinterpretFramebuffers]. See hrydgard#13957

* Plugins: Enable by default.

* Resample only in 32000Hz

* Fix Greek characters & Roman numbers & all balance on jpn0.pgf

* Do PtpConnect internally during PtpOpen, since some games (ie. The Warriors) seems to do PtpSend immediately after PtpOpen without trying to PtpConnect first.

* Fix returned error code on PtpSend and PtpRecv when socket is not connected yet.

* OpenGL fragment shader gen: Fix precision inconsistency for v_color0/1.

Probably won't fix anything, just want this in for, well, consistency.

Noticed it debugging the iOS flat shading issues, but doesn't fix that.

* Fix duplicate shader version in the flat shader test

Unbreaks the flat shading test on Adreno (ended up in trying to link a
 #version 300 and a #version 320 shader together which it didn't like)

* Io: Don't allow async close while async busy.

See hrydgard#6582.

* GE: Better naming of render passes for color reinterpret

* GPU: Respect stencil write mask for 5551 buffers.

If the mask is 0x7F on 5551, that's equivalent to allowing the clear
entirely.  See hrydgard#13391.

* D3D9: Don't allow separate alpha clears.

Doesn't seem like the color mask applies to clears.

* Reporting: Expose CRC queue methods for other uses.

This way UI can expose the CRC if needed.

* Don't allow ForcedFirstConnect hack when using PtpConnect within PtpOpen to prevent returning result from blocking PtpConnect instead of result of PtpOpen.

* sceMp3Init:Add layerBits and versionBits information

* Add header information

* GLES: Remove direct khrplatform.h header include.

Shouldn't be needed anymore, was a hack for Nokia.  See hrydgard#13978.

* Mp3: Correct error handling for newer sdk versions.

The 6.xx behavior might be important if a game relies on it to add data.

* Mp3: Allow decode without pcm pointer.

Just like other audio decoding, you're allowed to skip audio.
Also prevents a crash if the mp3 is not yet inited.

* Add back XCode TARGETED_DEVICE_FAMILY config line

xcode warns that the value is deprecated or something, but maybe it still does something. Appears iPad support is broken right now.

* Mp3: Always keep sample rate from original mp3.

Our codec context is updated with the source sample rate, so this makes us
not resample at all.

Converting to stereo still seems correct.

* Updated GameMode initial data sync, in case remote players aren't listening yet when sending initial data (fix Pocket Pool)

* Mp3: Correct logging for init.

* Remove duplicates from ThreadManForKernel

* Vulkan: Add MMPX upscaling texture shader.

See https://casual-effects.com/research/McGuire2021PixelArt/index.html

* Vulkan: Allow tex shaders to specify a max scale.

* Specify MaxScale=2 for the new MMPX texture scaling shader

* Fix Greek characters ltn0~7.pgf

* gitlab ci change requested by m4xw

* FindFFmpeg: Fix a few issues

1. postproc now looks for postprocess.h (there is no postproc.h header).
2. pkg-config fallback condition now works (find_path/library set the
   variable to ${var}-NOTFOUND but it was checking for an empty string).

* (.gitlab-ci.yml) Add windows-x64 target

* Mpeg:Only allow firmware >= 3 for warmup

Fix hrydgard#13996

* Try to build fix on non-windows

* CMake: Add USE_UBSAN

* CMake: Rename USE_ADDRESS_SANITIZER to USE_ASAN

For consistency with USE_UBSAN

* CMake: Fix UBSAN link error

* Fix Russian characters ltn8~15.pgf

* Fix alignment issues in ISOFileSystem

Fixes hrydgard#14002

* jit: Make branch shift more obvious.

And also not technically undefined behavior.

* Fix connection issue on Dynasty Warriors (Shin Sangoku Musou) games when playing with more than 2 players.

* Minimize the Adreno shader compiler bug repro test

* Fix left shift of negative value in MIPSCodeUtils

Fixes a benign UBSAN error to improve the signal-to-noise ratio of
UBSAN errors.

Fixes hrydgard#14015

* x64Emitter: Fix unaligned store UBSAN errors

This compiles to the same assembly as before even without optimizations and avoids UB.

https://godbolt.org/z/4G5edM

While the UB here is benign, this improves signal-to-noise ratio of UBSAN errors.

Fixes hrydgard#14005

* Fix logging flags

1. The logging flags were being ignored (-v, -d)
2. Adds a `--loglevel` argument. Useful when using the debug build for
   ASAN/UBSAN to hide extremely noisy debug messages.

* Attempt to fix hrydgard#14022

* Fix Apple gpu detection

* Core: Correct branch analysis truncation.

* jit: Be very clear on sign extension.

* Only force the log level if it set via an argv

Follow-up to hrydgard#14019

* Io: Consistently use LE values of ISO entries.

Better to be consistent across big endian and little endian, in case
something was mastered wrong.

* Vulkan: Fix image layout issues after compute shader uploads.

We're already in GENERAL so probably not worth to transfer to DST just
to do even more transfers due to the silliness of GenerateMip.

I'm planning to rework the whole texture upload thing to be far more
optimal with some kind of TextureUploadManager

Fixes hrydgard#13987

* Mpeg:Only allow firmware >= 6 for warmup

Fix blue screen in hrydgard#13146

* Ge: Improve some logging and memchecks.

Explicitly trigger memchecks on readback.

* Ge: Restore saved context when ending a list.

Otherwise another list queued by a Head push could use the wrong context
data.  See hrydgard#13346.

* Framedump test screen. Downloads a list of framedumps.

* Add a new command in developer tools to list and load framedumps from framedump.ppsspp.org/repro/

Useful to make it easy to test GPU driver bugs etc, without having to
use real games or copying files around.

* Add checkbox to enable/disable driver bug workarounds.

* Fix minor rendering glitch in PPSSPP's menus on iOS

* Have the flat shading workaround obey the driver workarounds checkbox

* Loaders: Prevent errors on 0 byte reads.

Was happening when opening an http:// GE frame dump.

* Core: Maintain frame dump disc ID in SFO.

This way we won't generate a fake one later and use it for anything else.

* vertexjit: Correct saved registers on x64.

* Core: Assert debug stats remain positive.

* vertexjit: Only save extra regs on x64.

* Updated PdpStat and PtpStat

* Update README.md for 1.11

* Address initial feedback by iota97

* List fixed games. Thanks sum2012

* More from unknown and sum2012

* More stuff in README.md

* (.gitlab-ci.yml) Add linux-i686 and windows-i686 targets (+ prevent creation of 'null' file when building Windows libretro cores)

* Fix possible lock issue during AdhocMatchingStart

* Updated PdpStat to prevent rcv_sb_cc from exceeding the buffer size arg (since we use larger buffer size to prevent micro stutters or disconnection issue due to too many dropped packets with small buffer size).
TODO: May need to improve it to be able to calculate the correct size if there are multiple datagram messages

* UI: Correct developer tools test run.

* Make a couple of UI animations refresh rate independent

* Core: Reset state properly on CPU init failure.

* Windows: Prevent crash on null symbol map.

Happened during a double error scenario, but might as well check.

* We don't really need to allocate a buffer when using MSG_TRUNC on recvfrom

* Minor renaming

* Moving hleDelayResult from internal function of SetSocketAlert to prevent waking up HLE-blocked thread

* Fix possible race condition issue.

* Fix jpn0.pgf characters position.

* Debugger: Populate funcs if disassembly open early.

* PPGe: Fallback to atlas text on alloc fail.

* PPGe: Clear text allocations on shutdown.

* Updated some Logs to help finding the location of the call to debug.

* Removing hleDelayResult from internal adhoc functions to prevent waking up thread that supposed to be blocked by the outer HLE.

* Run the link script

* Run the link script, fixups

* Update lang,pspautotests submodules

* Do the title screen animation by accumulator instead, to avoid a long first frame breaking it.

* Update version to 1.11

* PPGe: Decimate text images properly.

* Add more games to ReportSmallMemStick

* Handle exec addr errors better - don't let IgnoreBadMemoryAccesses skip dispatcher exceptions.

It would then just fall through into the compiler and die.

Should remove one of the "mystery" crashes from hrydgard#14082.

* Cause the correct type of exception. Never ignore EXEC_ADDR exceptions.

* Buildfix

* GL: Call CreateDeviceObjects *after* updating render_.

Also remove a redundant call to fetch render_ in the constructor, it's
already passed in.

* Remove now-redundant check

* Only allow sceMpegGetAvcAu warmup for God Eater Series

Fix hrydgard#14086

* Rename the new warmup variable from hrydgard#14091

* SaveState: Prevent crash on bad cookie marker.

Just fail to load the save state.

* Update lang submodule (it_IT updates)

* Remove a completely unnecessary check in BackgroundAudio.cpp that caused glitching at 44.1khz.

Fixes hrydgard#14096

* Assorted paranoid cleanups, inspired by hrydgard#14082

* Fix frozen (0 FPS) issue on Kao Challengers and Asterix & Obelix XX (probably also fix other games from the same developer with similar issue) hrydgard#14103

* Windows recvfrom doesn't support MSG_TRUNC, so we're using dummy buffer with max size as alternative for peeking actual size of the next pending message.

* Update zh_CN and zh_TW

* Fix lobby issue on The Warriors, probably also fix similar issue on other games too.

* Update README.md for 1.11.1

* Slight simplification in LogoScreen

Not that I think those crashes actually are from this...

* Update version to 1.11.1

* Some GLSL compilers are very particular about the sign of shift operands..

* Revert (partially) "compat.ini: Add Split/Second to [ReinterpretFramebuffers]. See hrydgard#13957"

Also see hrydgard#14123 . Not sure I intended to actually do this.

This reverts commit d0c3a5a.

* GPU: Force reinterpret off without copy image.

Also, assert we have it when using it, since there's ifs.

* Add some checks trying to prevent creation of 0 sized textures.

Saw a crash log with a driver crash in CreateTexture...

* Update lang submodule

* Io: Truncate reads/writes to valid memory.

A PSP might crash in these cases, but it's better if we avoid a crash.

* Don't assert on invalid format in CwCheat.

Not sure exactly what we should do, though..

* Build: Allow on actions test branch.

* Build: Cache Qt during Actions run.

* Android: Ensure shutdown waits for render.

We apparently have a case where render is busy during shutdown, based on
crash reports.

Co-authored-by: Henrik Rydgård <hrydgard@gmail.com>
Co-authored-by: Unknown W. Brackets <checkins@unknownbrackets.org>
Co-authored-by: nassau-tk <dt.kadoike@gmail.com>
Co-authored-by: sum2012 <consignpo@gmail.com>
Co-authored-by: ANR2ME <anr2000@gmail.com>
Co-authored-by: AdamN <ANR2ME@users.noreply.github.com>
Co-authored-by: Florin9doi <Florin9doi@users.noreply.github.com>
Co-authored-by: Gleb Mazovetskiy <glex.spb@gmail.com>
Co-authored-by: jdgleaver <james@leaver.myzen.co.uk>
Co-authored-by: Anuskuss <anuskuss@googlemail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
MP3 Issue involves sceMp3 features.
Projects
None yet
Development

No branches or pull requests

7 participants