多くのビデオ圧縮規格は、ブロック ベースの動き検出を使用します。現在のフレームの 16x16 ピクセル ブロックをデコードする場合、デコーダーは前後の参照フレームを基準にした動きベクトルを受信し、これに基づいて現在のブロックの最良近似をフェッチします。このため、ビデオ デコーダーによる DRAM アクセスの大半は、イメージ フレーム バッファーからの矩形ブロック フェッチの形で実行され、固定されたオフセットやアライメントはありません。これらは、ビデオ内の動きの速度と方向によって決まります。
ビデオ デコード トラフィックの効率を最大化するには、DRAM ページを「ラスター」イメージ ラインではなく、矩形のイメージ領域にシェーピングするようにマップする必要があります。最適なマップとするには、次の属性が必要です。
- DRAM ページが、タイルと呼ばれる矩形イメージ領域にシェーピングされる。
- 各タイルには、ブロック フェッチが 1 つのタイルに完全に収まる確率を最大化するだけの十分な大きさがある。
- 画像の上下左右に隣接するタイルは、別のバンク グループに属する。
次の図に、ビデオ デコード フレーム バッファーのタイリングを示します。このバッファーには、ビデオ デコーダーの動き補償によるブロック フェッチをモデル化するために、50 個の 8x8 ブロックをランダムに配置しています。
図 1. ビデオ デコード フレーム バッファーのタイリング
この図を見ると、ほとんどのブロックが 1 つのタイルに収まっており、DRAM アクセス効率が非常に高いことがわかります。一部のブロックは水平または垂直に隣接する 2 つのタイルにまたがっており、この場合は効率がやや低下します。ごくまれに、1 つのブロックが 4 つのタイルの端にまたがることもあり、この場合は効率がさらに低下します。
このようなマップでは、ビデオ フレーム バッファーの割り当てと使用に関して多くの制限が課せられることになります。主な要件は、次のとおりです。
- フレーム バッファーの開始アドレスがページ境界に揃っていること。
- ビデオ デコード ライン サイズが 2 のべき数でない場合 (HD の1920 など)、ライン長さが次の 2 のべき数 (HD の場合は 2048) に切り上げられるため、ラインの一部が未使用となります。ライン長さを切り上げたものをライン ストライドと呼びます。
次の表に、各アドレス マップがビデオ デコード トラフィックに与える影響を示します。黄色のハイライトで示したのが、最適なアドレス マップです。
アドレス マップ | 効率 (%) |
---|---|
BG を最適化した RBC (16R-2B-1BG-7C-1BG-3C) | 64 |
RBC (16R-2B-2BG-10C) | 64 |
D4_64t4k (14R-2B-5C-1BG-3R-2C-1BG-3C) | 75 |
D4_64t2k (15R-2B-5C-1BG-2R-2C-1BG-3C) | 58 |
RCB (16R-7C-2B-2BG-3C) | 40 |