Ir para o conteúdo
PS5PCEM
FuncionaÁudio e vídeo

AvPlayer

O SceAvPlayer decodifica contêineres de filme com FFmpeg para quadros NV12 que pertencem ao título e para PCM estéreo de 48 kHz. A reprodução termina quando passa a duração da origem, mesmo que o título nunca leia um dos fluxos.

Notas do repositório até 10 de outubro de 2026

Buffers que pertencem ao título

O reprodutor usa os callbacks de alocação do título e os callbacks de arquivo do título. O FFmpeg sonda o contêiner e decodifica o vídeo para NV12 na resolução da origem e o áudio para estéreo intercalado de 16 bits com sinal, a 48 kHz. Vídeo e áudio têm locks separados e processos de decodificador separados. As marcas de tempo compartilham um único relógio monotônico.

Pausa, busca, loop e fim de fluxo são conservados. A ABI do decodificador em software informa o pitch alinhado, a altura da alocação e o recorte visível. Existem tanto a chamada estendida quanto a chamada legada de informação de fluxo. O tempo atual, o trick mode em velocidade normal, a desativação de fluxo e um relógio de mídia limitado cobrem o middleware Unity que o Asterix traz.

Encerrar um filme que o título só lê pela metade

Um título pode ficar com as imagens e misturar o próprio som, ou o contrário. Esperar até que todo fluxo tenha sido lido mantém esse reprodutor vivo pelo resto do processo. Jurassic Park Classic Games Collection ficava parado na introdução por este motivo: o relógio estava noventa segundos além de um clipe de três segundos porque o fluxo de áudio não lido nunca terminava.

A duração vem da origem. Quando o relógio a ultrapassa, a reprodução termina mesmo que um fluxo tenha sido ignorado. Enquanto um fluxo ainda está entregando, a posição informada permanece dentro dos quadros de fato entregues, então uma máquina lenta não é cortada cedo. Quando o fluxo de fato terminou, o relógio pode correr até a duração. Origens em loop e origens de comprimento desconhecido são deixadas em paz.

Apresentação

Os filmes de introdução observados tocam perto da taxa de quadros nativa deles em compilações ReleaseFast. A última imagem válida é retida enquanto o Unity troca de clipe, em vez de apresentar uma superfície de decodificador limpa como uma cor sólida. Uma origem de 1920×1080 pode ser escalada para o alvo de scanout que o título registrou.

A faixa háptica é temporizada e silenciosa. O AvPlayer não aciona um controle. Os pixels chegam à tela pelos shaders do título ou pelo VideoOut, não por um segundo compositor dentro do reprodutor.

O que está implementado

  • Decodificação com FFmpeg para vídeo NV12 e PCM estéreo de 48 kHz, em buffers que pertencem ao título.
  • Informação de fluxo estendida e legada, pausa, busca, loop e um relógio de mídia compartilhado.
  • Fim da reprodução na duração da origem quando o título deixa um fluxo sem leitura.
  • Retenção do último quadro válido através de uma troca de clipe.

O que ainda falta

  • A háptica é silêncio. A vibração do controle não é emulada.
  • Origens em loop e de comprimento desconhecido não são cortadas pela regra de duração.
  • Um callback de arquivo ausente, ou um contêiner que o FFmpeg não consegue sondar, faz esse recurso falhar.

Mecanismos relacionados

O que estas páginas descrevem

O texto segue as notas de arquitetura e os relatórios de outubro de 2026 no repositório do PS5PCEM. Um teste pontual que passa não é uma nova taxa de quadros nem uma nova conclusão de jogo.

Todas as tecnologias