mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-01 14:58:14 +00:00
Movie players like the one in Star Wars: Lethal Alliance present every decoded frame after a single vblank wait, with no clock or timestamp check, so the frame rate depends on decode, CSC, ATRAC decode and the GE blit adding up to more than a vblank. We charged nearly nothing for any of them, so such movies ran at 60 fps until the ringbuffer's slack ran out. Costs measured on a PSP with a copy of that player (pspautotests video/mpeg/playertiming), for a 480x272 frame: - sceVideocodecDecode: 3.4ms (sceMpegAvcDecode 5.8ms less sceMpegAvcCsc 2.4ms) - sceMpegBaseCscAvc: 2.4ms, was a flat 4ms - sceAudiocodecDecode, ATRAC3+ only: 2.5ms per frame - GE: 9.7ms for a through-mode rectangle blit from a decoded video frame, charged by area, only for textures in the buffer a decoder last wrote. GE time also now carries across stall address updates. Before, a list sent in stalled chunks only had its last chunk's time counted, so sceGeDrawSync returned 39us after a blit that takes 9.7ms. This affects every game that builds its lists incrementally, so GE-timing-sensitive games need checking. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>