QR の条件
L=7% M=15% Q=25% H=30%
PC のモニタに 1 モジュールを何 px で描くか
プレビュー短辺 (192px) の何 % を QR が占めるか
実測では手持ちで 60〜76%。90% は達成できていない(docs/05 §8)
★ 寄せる方が効く: 占有率 60% → 80% で、どのバージョンでも期待スループットが約 2 倍になる。バージョンをいじる前に、まず QR を大きく・正対して・ブレずに撮る
★ 成功率だけで選ばない: 送信側は無限にフレームを送り続け、RLNC なので届いた分だけ rank が上がる。効くのは「1 試行あたりの期待バイト数 = 実効 × 成功率」で、成功率が低くても容量の大きいバージョンが勝つことがある(v10 の 25% は v4 の 67% より速い)
全画面中も左下に条件が出る。ESC で戻る
表示中のペイロード(実機の読み取り結果と目視照合する)
送るもの
1. 画像 → .DIM
256x192 に収まるよう縮小 → RGB555 に丸め → 256 色以下へ減色
減色後のプレビュー (2x)
2. .DIM → QR ループ
PC のモニタに 1 モジュールを何 px で描くか
オンにすると px を無視し、表示領域(全画面中は画面)いっぱいに整数倍で描く。スマホ向け。幅 600px 未満で開くと最初からオン
プレビュー短辺 (192px) の何 % を QR が占めるか
実測では手持ちで 60〜76%。90% は達成できていない(docs/05 §8)
★ 寄せる方が効く: 占有率 60% → 80% で、どのバージョンでも期待スループットが約 2 倍になる。バージョンをいじる前に、まず QR を大きく・正対して・ブレずに撮る
★ 成功率だけで選ばない: 送信側は無限にフレームを送り続け、RLNC なので届いた分だけ rank が上がる。効くのは「1 試行あたりの期待バイト数 = 実効 × 成功率」で、成功率が低くても容量の大きいバージョンが勝つことがある(v10 の 25% は v4 の 67% より速い)
★★ PC の画面輝度を最大にすること。必須条件。
aptina.c で FRAME_LENGTH を下げてフレームレートを上げた結果、露光時間の上限も下がった。 明るければ短い露光で足りるが、暗いと必要な露光がフレーム長に収まらず読めなくなる。 実機で輝度を戻したら転送が止まった(2026-09-09)。動かないときはまず輝度を疑う。 部屋を明るくするのは逆効果(画面のコントラストが落ちる)。上げるのは画面側だけ
★★ 既定の 120ms が実測の最適点(2026-09-09、480 チャンクの画像で掃引)。 80/100/110/120/130/140/150ms を実機で通しきった結果、所要は 72.9 / 74.4 / 66.6 / 64.5 / 66.3 / 68.4 / 74.5 秒。120ms を 3 回測って 64.5 / 65.1 / 65.0 秒で再現。 速い側は露光中に画面が切り替わって継ぎ接ぎの QR になる(歩留まり 89%→53%)、 遅い側は同じ QR を 2 度撮る(重複が 4→110 枚)。両方が効いて 120ms が山の頂点。 詳細は docs/07-photo-viewer-design.md 4.5.7。 この値はカメラのフレーム周期 90ms に紐づくので aptina.c を変えたら測り直すこと
★ 下限を決めるのは 2 つ。(1) カメラのフレーム周期より短くしても読む機会が増えない。 当初 110ms(実測)だったが aptina.c の FRAME_LENGTH_A を下げて短縮した。 (2) 露光時間。露光中に QR が切り替わると 2 枚が混ざって検出が落ちる (実機で「350ms でぎりぎり滲まない」→ その後 100ms でも通るところまで来た)。 画面輝度を上げると自動露出が露光を短くするので、滲みが減って下げられる。 16ms は 60Hz の 1 リフレッシュで、ブラウザ側の物理的な下限
RLNC なのでマニフェストも欠番も無い。ファイルは k<=512 チャンクの世代に分かれ、 毎フレームがどれか 1 世代の乱択線形結合になる。世代は 1 枚ずつ順番に回す (ラウンドロビン)ので、途中から構えた受信側でも全世代が同じ速さで埋まる。 受信側は世代ごとに rank が k に達した時点でその世代を復元する。表示は無限ストリーム
★ この所要時間は粗い見積もり。信じすぎないこと: 成功率は px/mod の 4 段しかない階段関数(docs/05 §8 の暫定値)で、 世代の上乗せは実測が 8 世代までしかない。さらに ロックオン実装後は表示間隔を 200〜300ms まで下げられる見込みなので、 2000ms 前提のこの数字は「今の素朴受信での上限」であって、到達点ではない
RLNC の往復(係数生成・掃き出し・欠落耐性)と、バイト列の保存性を確かめる
DSi の画面の QR をカメラで読む(DSi → この端末)
小さいほど 1 枚の読み取りが速いが、QR が小さく写ると読めない
カメラを許可してください(「カメラを開始」を押すとブラウザが許可を求める)
背面カメラを使う。QR は DSi の上画面にだけ出る。上画面が画面いっぱいに写るように構え、下画面や他の QR は写さない(jsQR は QR が 2 つ写ると読めない)。 DSi の画面の明るさは最大にする。映像はこの端末の中で処理され、どこにも送信されない
QR の読み取り: ブラウザ標準の BarcodeDetector があれば先に使い、読めなければ jsQR 1.4.0(Copyright 2017 Cosmo Wolfe, Apache License 2.0。 ライセンス全文はこのページのソース内に同梱)で読む