Tech と Culture

テクノロジーとカルチャー

未分類

JPEGのハフマン符号 (4) デコード用 ハフマン符号テーブルの生成

ここでは、ハフマンテーブルセグメントの情報から実際のデコードに使うためのテーブルを生成する方法を記します。 JPEG規格ドキュメントの Annex C に相当します。例として以下のハフマンテーブルセグメントを持つ場合を考えます。 jpegsnoopの出力ファイル…

JPEGのハフマン符号 (3) ハフマンテーブルの記述

JPEGの規格の中には、ハフマンテーブルの持ち方とそのデコードをどのように行うかのフローチャートが載っています。 ここではそれについて記します。まず、ハフマンテーブルの持ち方は以下の図のようになります。 DHTというのは、ここからハフマンテーブルが…

JPEGのハフマン符号 (2) AC成分

次にAC成分です。同様にエンコード時を考えます。AC成分もDC成分と同様に、数値を表現するのに必要なビット数毎にハフマンコードを割り当てて、その直後に数値を記録するという考え方を用います。しかし、さらにランレングス圧縮という手法を組み合わせます…

JPEGのハフマン符号 (1) DC成分

JPEGのハフマン符号を理解するため、エンコード時の符号化を考えます。JPEGのハフマン符号は、画素の値をそのまま符号化はしません。 ・画素の値を表現するために必要なビット数をハフマン符号化してデータ圧縮を行います。 ・DCT出力値のAC部分とDC部分で異…

ハフマン符号のアルゴリズム

非常に簡単にハフマン符号について説明します。アルゴリズムの教科書は沢山読みましたが、私が最も良いと思ったものは以下のものです。「アルゴリズムイントロダクション」T.コルメン C.ライザーソン R.リベスト 近代科学社定評のある本なので良く読み返し…

JPEG ファイルフォーマット

JPEGファイルの内部構造を調査しました。JPEGにおいて 0xFFXX (XXはいろいろな数値)という、最初の1バイトがFFで始まるマーカーというものが多数定義されています。 例えばJPEGデータは SOIマーカーで始まり、EOIマーカーで終わりますが、それぞれ以下の値…

雑記

別件で止まっていましたが、今日から開発再開します。 なかなかよさげなリーダが発表されてました。けど、ブラウザは欲しいなー。これから一年ぐらい、タブレットモバイル端末が激しい主戦場になりそうな雰囲気になってきました。

JPEG規格 ドキュメント

ハフマンコード部分は、JPEGファイルフォーマットとも関連する部分です。JPEGのドキュメントは以下のディレクトリから手に入れることができます。http://www.w3.org/Graphics/JPEG/itu-t81.pdfJPEGハフマンコードの仕様やファイルフォーマットがだいぶ分かっ…

JPEG ハフマンデコード

JPEGのハフマン符号に関しては、このページが詳しい。現在はIJGのハフマンデコード部分を解読中。 (ソフトウェアとハードウェアをつなぐため。)その他、動作が確認とれた後に、DMAコントローラを設計して、ソフトウェアを介さずにメモリからハードウェアモ…

データパス演算誤差

以下の5つについて調べました。(1)IJG ソフトウェアIDCT intバージョン (2)IJG ソフトウェアIDCT floatバージョン (3)ハードウェアアルゴリズム確認ソフト (4)ハードウェアビット幅エミュレーションソフト (5)RTLまず、前回以降で(3)のバグが見つかりました…

DropBox

設計データが大きくなってきたので万が一の事を考えてバックアップを取る必要が出てきました。 DVDに焼いておくのもかさばるなーと思っていたのですが、最近はオンラインストレージがかなり使われているようです。その中でも sugarsync というものと dropbox…

調査中

(1) デバイスドライバからの転送データ数について。 8bit x64 ではなく、 8bitx64x6 (MCU単位)で転送してみた。 なんと、fpsはややダウン。 8bit x64 では、デバイスドライバ内部でのレジスタアクセスを64行ダイレクトに記述していたものを、MCU単位では、fo…

motion JPEG再生 4

とりあえず、現在のシステムにつけているAHBペリフェラルモジュールを減らします。 PS/2のモジュールが二つ(マウス&キーボード用)ついていますのでこれを削除します。 ホスト側にteratermを立ち上げてこちらにRS232-Cでコンソール出力することにより、操…

IDCT モジュール RTL

頭の中にこれまでの設計があるうちにコーディングしてしまいたいため、msys上のパスの問題は、makeにより出力されるスクリプトファイルを強引にエディタで書き換えてmodelsimを立ち上げました。 (とりあえず応急処置。今のうちにコーディングしておきたいの…

問題点メモ

ここまでで、YCbCr-RGB変換と、Upsampleの部分がハードウェア化でき、無事に動画が再生できました。 ここで、いろいろ問題点が出てきているのでメモとしてまとめておきます。(1) windows上(msys, cygwin)のgrlibスクリプトがうまく動作しない。 最初は問題な…

gdbserver

さてさて、色々問題はありますが、VMware上のCentOSの方にISE10.1をインストールしてFPGAにマッピングをおこないました(ISE11.1を最初にインストールしましたが、現在のgrlibのスクリプトでは動かないようです。多分少し修正すれば動くのだと思いますが、安…

YCbCrメモリ+コントローラ 修正

メモリアクセス部分のステートマシンを修正しました。 readingからemptyに移る間に一つ何もしないステートを追加しました。 この間にメモリの出力を確定させます。メモリ出力はアドレスやenableを入れた次のクロックで確定しますので、確定してからスイッチ…

APB レジスタ

とりあえず、YCbCrメモリ+コントローラのコーディングが終わりました。 これ単体で検証をしても良いのですが、AMBAのインターフェースも設計して3つのモジュールを接続して検証しようと思います。以前の図には抜けていましたが、AMBAのインターフェース部分…

YCbCrメモリ+コントローラ アドレス生成 1

YCbCrメモリ+コントローラ部分の後段側アドレス生成部は、メモリアクセスによって、4:1:1または、4:2:2フォーマットのアップサンプリングを実現するため、少し複雑になります。 (4:4:4は、検証する motionJPEGファイルサンプルが手元にないことと、あまり使…

YCbCr-RGB変換モジュール アドレス生成 修正

IncaddY, IncaddMCUXは、APBレジスタではなく、固定値でした。YCbCr-RGB変換モジュール部分アドレス生成修正完了。 テストベンチによる検証も終了。次に、YCbCrメモリ+コントローラ部の設計に入ります。

YCbCr-RGB変換モジュール アドレス生成

具体的なアドレス生成部の詳細は以下のようにしました。 X方向に16pixel分出力した次のフレームバッファアドレスを算出するために加算する値をIncaddYとしてAPBレジスタに保存します。 次に1MCU分を出力した時に加算する値をIncaddMCUXというAPBレジスタに保…

フロー制御

YCbCr-RGB変換回路を修正するためには、全体のフローをきっちり理解する必要があります。以下は、IJGのdjpegにおけるJPEG処理フローです。4:2:2の場合を説明しています。 ソフトウェア中では、MCU一列分のDCTが行われて、その後ピクセル画面一列分を順にYCbC…

IDCTデータパス RTL

IDCTのデータパス部分のコーディングを行いました。 一部修正しています。 一段目: 二段目: データパスですが、コントロールFSMが必要となります。図中のcounterの部分が外部からのstart信号により動き始め、その値によって、各セレクタ等が動作を決めていき…

全体制御フロー案

IDCT二つとYCbCr-RGB変換モジュール等を前後の整合性を合わせて自律的に動作させねばなりません。その方法の最初の案が以下のようなものです。 ダブルバッファそれぞれのメモリのどちらを指しているかのスイッチと、それぞれのメモリの現在の状態をステート…

雑記

非常にラフにDCTのデータパスを一つコーディングして LUT使用率5% クリティカルパス約21nsecこれまでのトップレベルの設計結果が、Slice使用率88%, LUT使用率77% クリティカルパス約20nsec非常に微妙なのですが、まだ削れるモジュールもあるということで、そ…

IDCTハードウェア概要3

ハードウェア全体構成とIDCTアルゴリズムが確認できたので、以前と同じようにデータパスのビット幅を決定するのですが、ここでは、DesignWave誌 2008年1月号の記事で説明されている通りにビット幅を決定します。 ただし、2箇所だけ説明が納得できない部分が…

雑記

とうとう、GoogleがOSを開発してフリーで提供することを発表しました。 Chrome OSです。 軽量でセキュリティに強く、数秒でbrowserが立ち上がる。殆どの作業は、WEB上で行う。。。 これは、ほとんど、CrunchPadのコンセプトと重なるのでは!!! 結局皆求め…

IDCTハードウェア概要2

ここまでのIDCTブロックのハードウェアアルゴリズムを確認するために、jidctint.cをハードウェアと同じアルゴリズムに変更します。 とりあえず、データパスのビット数は考慮せずに、アルゴリズムの確認を行います。最終出力以外は、double型にします。最終出…

IDCTハードウェア概要

JPEG処理に用いられる二次元DCTは一次元DCT二回の演算に分割することができます。 その他にも演算負荷を軽くするためのアルゴリズムが大量に提案されてきています。IJGのデコードソフトウェアdjpegは、実行時オプションでどのようなDCT演算を使うかを指定す…

octave

JPEG処理の流れが理解できたところで、以前と同じようにホストPC側でプログラムを変更してアルゴリズム確認を行います。 ここで結構苦しみました。 IJGのコードの書き方が2次元行列を一次元配列で記述してポインタをずらしながら、さらに配列アクセスするよ…