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