# 画素処理の参照ソースと移植境界

[source-lock.json](source-lock.json)は元ファイルの取得先・固定commit・byte数・hashを保持します。libplaceboのYADIF処理とFFmpegの色差位置等を参照し、ライブラリー全体や新しいcodec実行依存を追加するものではありません。表示方針と採用理由は[表示仕様](../../../docs/design/06-video-display.md)、取得/検査コマンドは[開発手順](../../../docs/development.md)を参照します。

## 原本とnotice

[libplacebo/LICENSE](libplacebo/LICENSE)、[FFmpeg/COPYING.LGPLv2.1](ffmpeg-swscale/COPYING.LGPLv2.1)と、各ソースのcopyright/noticeを無改変で保持します。解除Cソースと移植したCPU/GLSLのYADIF処理はLGPL-2.1-or-laterで、headerのMIT許諾をCソース全体へ一般化しません。GLSLにも由来・差分・noticeを引き継ぎます。

## 元処理と実装の対応

| 元処理 | アプリ/比較側の対応 |
| --- | --- |
| deinterlacing.cのYADIF部分 | pixel-shaders.tsのGLSL ES 3.00 fragment/FBO。既定BWDIFやcompute I/Fは移植しない |
| spatial_predictor | 方向探索順、8bitの1bias、normalized tie epsilonを維持。空間判定を省略しない |
| field/first_field、前後参照 | 時間予測の参照を選択。片側履歴不足でも別世代やcurで代用せず、空間予測へ落とす |
| 画像端のrefl/mirror | 可視cropの境界で反射。paddingや別fieldを参照しない |
| swscale graph.c / pixdesc.c | PlaneSamplingMapでchroma位置をfield座標へ変換。解除前の別時刻fieldを通常texture補間しない |
| csp.c | metadataの色仕様の参照。表示経路への階調変換採用とは別の判断 |

独立scalar CPU参照はtests/player/support/g2-reference.mjsで、アプリからimportしません。入力は同じraw YUVとfield/色係数を用い、codec差・圧縮誤差をshader差へ混ぜません。

## 実装上の移植差分

入力はR8UI/usampler2D、解除後はR8、色変換後はRGBA8へ丸めます。planeごとのhalf-up丸めと探索順を維持し、ditherは使いません。元画像topをtexture/FBOの論理y=0とし、最終preview blitだけ縦を反転します。

通常の輝度処理は欠損行だけを作業領域上半分へ生成し、保持行は元Yから取得します。色差は解除済み全行を生成してからLINEAR/CLAMP_TO_EDGEで補間します。±3近傍は再利用し、色変換係数はCPUで計算してuniformへ渡します。program単位でuniform位置をcacheし、生成時にFBOを検証します。

試験用inspectPlanesは比較のため輝度全行を再生成します。実RGBAは通常の半高輝度経路で生成したものを照合します。試験のreadback/追加描画と通常経路は[診断・試験ビルド](../../../docs/design/12-diagnostics.md)で区別します。

stride/crop・未知metadata・履歴適合性・fence/寿命はGpuPixels/ColorResolver/PlaneSamplingMapが管理します。採用する表示アルゴリズム、SDR階調保持、SAR、画像選択は表示仕様を正とし、ここへ同じ仕様表を再掲しません。
