Actually these threads exist due to psmf.prx and not libpsmfplayer.prx (even though they're still used this way). This was how developers used to playback media with the limited capabilities of psmf.prx.
Based on the logs, each thread has a specific set of functions:
Based on the logs, each thread has a specific set of functions:
Code:
ScePsmfPlayerOpenControlThread (sets up scePsmf structure, controls psmf handling and registers MPEG stream):
- scePsmfQueryStreamOffset
- scePsmfQueryStreamSize
- scePsmfVerifyPsmf
- scePsmfSetPsmf
- scePsmfGetPresentationStartTime
- scePsmfGetPresentationEndTime
- scePsmfGetNumberOfSpecificStreams
- scePsmfSpecifyStreamWithStreamTypeNumber
- scePsmfSpecifyStreamWithStreamType
- scePsmfGetCurrentStreamType
- scePsmfCheckEPmap
- sceMpegRegistStream
ScePsmfPlayerReadThread (prepares sceMpeg to handle the data sent from scePsmf):
- sceMpegFlushAllStream
- sceMpegRingbufferAvailableSize
- sceMpegRingbufferPut
- sceKernelDcacheWritebackRange
- sceKernelDcacheInvalidateRange
- sceDmacMemcpy
ScePsmfPlayerDecodeThread (decodes and plays the psmf, but using sceMpeg):
- sceMpegRingbufferAvailableSize
- sceMpegChangeGetAuMode
- sceMpegAvcDecodeFlush
- sceMpegInitAu
- sceMpegGetAtracAu
- sceMpegAtracDecode
- sceMpegGetPcmAu
- sceMpegGetAvcAu
- sceMpegAvcDecodeYCbCr
ScePsmfPlayerAbortThread (returns an error code if something goes wrong).
ScePsmfPlayerMCThread (checks some values, probably controls the start and stop of all the other threads by tracking the decoding status).