私はあなたが明確にすることができることを望んでいるいくつかの問題を抱えています. 私は、Mpeg2 に似たビデオ エンコーディング プロセスを独学で学びました。プロセスは次のとおりです。
RGBA イメージを 4 つの個別のチャネル データ メモリ ブロックに分割します。したがって、すべての R 値の配列、G 値の個別の配列などです。
配列を取得して 8x8 ピクセル データのブロックを取得し、離散コサイン変換 (DCT) を使用して変換します。
事前に計算された量子化行列を使用して、この 8x8 ブロックを量子化します。
量子化ステップの出力をジグザグ符号化します。だから私は連続した数の証跡を取得する必要があります。
ジグザグ アルゴリズムからの出力をランレングス エンコード (RLE) します。
RLE ステージの後のデータをハフマン符号化します。事前に計算されたハフマン テーブルからの値の置換を使用します。
ステップ 2 に戻り、すべてのチャネル データがエンコードされるまで繰り返します。
ステップ 2 に戻り、チャンネルごとに繰り返します。
最初の質問は、プロセスが機能するために RGBA 値を YUV+A (YCbCr+A) 値に変換する必要があるか、それとも RGBA を使用し続けることができるかということです。RGBA->YUVA 変換は負荷が高く、できれば避けたいのでお願いします。
次の問題。RLE ストアを 0 だけで実行する必要があるのか、それとも配列内のすべての値に拡張できるのか疑問に思っています。以下の例を参照してください。
440000000111 == [2,4][7,0][3,1] // RLE for all values
or
440000000111 == 44[7,0]111 // RLE for 0's only
最後の質問は、ハフマン段階に関して単一のシンボルは何でしょうか? 置き換えられるシンボルは 2 や 4 のような値になるか、シンボルはたとえばランレベル ペア [2,4] になります。
ここで読んで助けてくれてありがとう。私は多くの論文を読み、多くの YouTube ビデオを見てきましたが、個々のアルゴリズムを理解するのに役立ちましたが、それらがすべてリンクしてコード内のエンコード プロセスを形成する方法については理解できませんでした。