# 今後のプロジェクト

## Simple Image Protocol Viewer（garou）プロジェクトで行うこと
- smolによる非同期の画像処理
- imageによるリサイズ
- RGBAキャッシュ
- u32チャンク比較
- できたらやる
  - rayon による並列差分判定
  - memmap2 によるメモリマップ I/O
- タイルグリッドをセルサイズの倍数に揃える処理
- Simple Video Playerプロジェクトにつなげられるファイル分割を行う

## 確認事項
- Wezterm Nightlyの「a=Tの透過合成」は動作未確認

## Simple Video Player（名称無し）プロジェクト
基本処理：古い画像に新しい画像を上書きする
具体例：古い画像と新しい画像のRGBAを比較し、透明マスク（Alpha=0）と変化後の色を持つRGBAを生成する。その後、古い画像に生成したRGBAを上書きする。
- 以下の処理（2段階フォールバック）を行えるコードを書く
  - 差分タイル数が少ない（dirty_ratio 以下）
  - 各タイルを MoveTo + a=T で上書き（チャンク分割可、セル精度）
  - 差分タイル数が多い（dirty_ratio 超え）
  - Alpha=0 マスク RGBA を a=T でフルフレーム送信（チャンク分割可）
- 差分の位置までカーソルを飛ばして上書き
  - 差分タイルのセル座標に MoveTo してから a=T で送る（ピクセル精度ではなくセル精度で位置を指定）
```rust
let tile_w = cell_width_px * N;   // N=2 なら 2セル単位
let tile_h = cell_height_px * M;
```
- ターミナル判定の仕組みを作る
  - Weztermやbconで差分少ない: MoveTo + a=T（タイル単位上書き）
  - Weztermやbconで差分多い: a=T フルフレーム送信（現状と同じ）
  - kitty 本家: a=f（AlphaBlending）で透過合成
- ACK（a=q）によるバックプレッシャー制御（60fps維持のためのフレーム同期）
- フレームデコードと表示の非同期パイプライン

