本文へスキップ
PS5PCEM
一部ファームウェアと HLE

PNG のエンコードとデコード

PNG エンコーダーは、行ピッチ付きの RGBA または BGRA のピクセルから 8 ビットの RGB か RGBA のファイルを書き出します。デコーダーは、インターレースなしのグレースケール、パレット、RGB、RGBA の画像を、確認済みのゲストのバッファに読み込みます。

2026年10月10日 までのリポジトリノート

エンコード

タイトルはエンコーダーに、行ピッチが幅より大きいこともあるピクセルの矩形を渡します。PS5PCEM は行ピッチ付きの RGBA と BGRA を受け付け、標準的な 8 ビットの RGB または RGBA の PNG を書き出します。呼び出し側がスキャンラインのフィルターと 0~9 の圧縮レベルを選びます。出力の書き込みは、タイトルが用意したバッファの範囲に限られます。

エンコーダーはファイル形式のソフトウェア実装です。システムの画像ライブラリを呼び出すことはなく、本体のハードウェアエンコーダーに対する特定の速度を主張するものでもありません。

デコード

libScePngDec は PNG のメタデータを解析し、インターレースなしのグレースケール、パレット、RGB、RGBA の画像を、確認済みのゲストの RGBA または BGRA のバッファにデコードします。スキャンラインのフィルターを適用し、パレットの透明度も反映します。ピクセルを書き込む前に書き込み先を確認します。

Adam7 のインターレース入力は認識したうえで、間違った画像にデコードせず拒否します。そのため、インターレースのアイコンやスクリーンショットが黙って崩れたバッファになることはありません。

位置づけ

PNG は、タイトルが起動時に使う小さなファームウェアサービスのひとつで、アイコン、アトラス、セーブのサムネイルに使われます。H.264 に FFmpeg を使う AvPlayer のムービーの経路とも、フォントのラスタライザーとも独立しています。

10 月 9 日のファームウェアのレポートでは、エンコーダーを時計と AMPR の完了サイズの問い合わせとまとめています。この 3 つはインポートの穴を埋めたものです。それだけで計測したフレーム時間が変わることはありません。

実装済みのこと

  • 行ピッチ付きの RGBA と BGRA の入力から、圧縮レベル 0~9 で 8 ビットの RGB または RGBA の PNG へ。
  • フィルターとパレットのアルファを含む、インターレースなしのグレースケール、パレット、RGB、RGBA のデコード。
  • 確認済みの書き込み先バッファと、範囲に収まるエンコーダーの出力。

まだ足りないこと

  • Adam7 のインターレース PNG は認識しますがデコードしません。
  • 16 ビットや特殊な補助チャンクは、実装した範囲の外です。
  • ハードウェアの PNG ブロックはありません。どちらも CPU で動きます。

関連するしくみ

これらのページについて

本文は PS5PCEM リポジトリのアーキテクチャノートと 2026 年 10 月のレポートに基づいています。個別のテストに合格したことは、新しいフレームレートや新しいクリアを意味しません。

すべての技術