本明細書及び添付図面の記載により、少なくとも、以下の事項が明らかとなる。
元画像が複数のブロックから構成されており、各前記ブロックは複数の画素から構成されており、
各前記画素に対応する画素データが前記ブロックの順に入力し、
入力する前記画素データに対応する画素と、メモリへ格納後の前記画素データの示す画像との位置関係に応じたアドレスを生成し、
生成した前記アドレスに、入力した前記画素データを前記メモリに格納するユニットであって、
第1開始値から第1終了値まで第1カウント値をカウントし、前記第1カウント値が前記第1終了値に達したら前記第1カウント値を前記第1開始値にリセットする第1カウンタと、
第2開始値から第2終了値まで第2カウント値をカウントし、前記第2カウント値が前記第2終了値に達したら前記第2カウント値を前記第2開始値にリセットする第2カウンタと、
を備え、
前記第1カウント値がリセットされたときに前記第2カウント値をカウントし、前記第1カウント値及び前記第2カウント値に基づいて前記アドレスを生成し、
前記元画像を示す前記画素データが間引かれて、間引き後の前記画素データが順に入力する場合、前記アドレスを生成する際に、前記メモリへ格納後の前記画素データの示す画像の前記元画像に対する間引き量に応じて、前記第1開始値及び前記第1終了値のうちの少なくとも一方と、前記第2開始値及び第2終了値のうちの少なくとも一方を変更し、前記第1カウント値及び前記第2カウント値をカウントする
ことを特徴とするユニット。
このようなユニットによれば、回路規模を縮小することができる。
かかるユニットであって、第3開始値から第3終了値まで第3カウント値をカウントし、前記第3カウント値が前記第3終了値に達したら前記第3カウント値を前記第3開始値にリセットする第3カウンタと、第4開始値から第4終了値まで第4カウント値をカウントし、前記第4カウント値が前記第4終了値に達したら前記第4カウント値を前記第4開始値にリセットする第4カウンタと、を更に備え、前記第2カウント値がリセットされたときに前記第3カウント値をカウントし、前記第3カウント値がリセットされたときに前記第4カウント値をカウントし、前記第1カウント値、前記第2カウント値、前記第3カウント値及び前記第4カウント値に基づいて、前記アドレスを生成することが望ましい。これにより、間引き量に関わらず、所定のアドレスを生成することができる。
かかるユニットであって、前記メモリへ格納後の前記画素データの示す画像を前記元画像に対して回転させる場合、前記アドレスを生成する際に、前記第1カウント値がリセットされたときに前記第2カウント値をカウントし、前記第2カウント値がリセットされたときに前記第3カウント値をカウントし、前記第3カウント値がリセットされたときに前記第4カウント値をカウントする第1状態と、前記第2カウント値がリセットされたときに前記第1カウント値をカウントし、前記第1カウント値がリセットされたときに前記第4カウント値をカウントし、前記第4カウント値がリセットされたときに前記第3カウント値をカウントする第2状態とを、前記メモリへ格納後の前記画素データの示す画像の前記元画像に対する回転量に応じて、切り替えることが望ましい。これにより、回転量に関わらず、所定のアドレスを生成することができる。
かかるユニットであって、前記メモリへの前記画素データの格納がある毎に、前記第1カウンタが前記第1カウント値をカウントすることが望ましい。これにより、入力する画素データに追従するように、その画素データに対応するアドレスを生成することができる。
かかるユニットであって、前記第1カウント値は、前記メモリに格納する前記画素データに対応する前記画素の前記ブロックにおける水平方向位置を示し、前記第2カウント値は、前記メモリに格納する前記画素データに対応する前記画素の前記ブロックにおける垂直方向位置を示し、前記第3カウント値は、前記メモリに格納する前記画素データに対応する前記ブロックの前記画像における水平方向位置を示し、前記第4カウント値は、前記メモリに格納する前記画素データに対応する前記ブロックの前記画像における垂直方向位置を示すことが望ましい。これにより、間引き量に関わらず、所定のアドレスを生成することができる。
かかるユニットであって、前記第1カウント値に基づいて第1アドレス値を算出し、前記第2カウント値に基づいて第2アドレス値を算出し、前記第3カウント値に基づいて第3アドレス値を算出し、前記第4カウント値に基づいて第4アドレス値を算出し、前記第1アドレス値、前記第2アドレス値、前記第3アドレス値及び前記第4アドレス値を加算することにより前記アドレスを生成することが望ましい。これにより、単純な加算処理だけでアドレスを生成することができ、処理速度を高めることができる。
かかるユニットであって、所定アドレス数毎に前記メモリへ前記画素データの格納が行われ、前記第1カウント値と、前記所定アドレス数と、を乗算して前記第1アドレス値を算出し、前記第2カウント値と、前記メモリへ格納後の前記画素データの示す画像の水平方向のブロック数と、前記ブロックの前記水平方向の1行分の前記画素データを格納するための1行分アドレス数と、を乗算して前記第2アドレス値を算出し、前記第3カウント値と、前記1行分アドレス数と、を乗算して前記第3アドレス値を算出し、前記第4カウント値と、前記ブロック数と、1ブロック分の前記画素データを格納するための1ブロックアドレス数と、を乗算して前記第4アドレス値を算出することが望ましい。これにより、単純な加算処理だけでアドレスを生成することができ、処理速度を高めることができる。
かかるユニットであって、前記間引き量に応じて、前記1行分アドレス数及び前記1ブロックアドレス数を変更することが望ましい。これにより、間引き量に関わらず、所望のアドレスを生成することができる。
===複合装置の概要===
図1は、複合装置の全体斜視図である。図2は、複合装置の構成のブロック図である。複合装置1は、原稿から画像を読み取るためのスキャナ機能と、外部のコンピュータ3からの印刷データに基づいて画像を紙に印刷するプリンタ機能と、原稿から読み取った画像を紙に印刷するコピー機能と、を有する。
この複合装置1は、スキャナ部10と、プリンタ部20と、カードリーダ部30と、パネル部40と、コントローラ60と、SDRAM90とを有する。スキャナ部10の主な構成要素は、複合装置1の上部収容部1Aに設けられている。プリンタ部20の主な構成要素は、複合装置1の下部収容部1Bに設けられている。カードリーダ部30は、ユーザがメモリカードをセットし易いように、下部収容部1Bの前面に設けられている。パネル部40は、ユーザが操作し易いように、上部収容部1Aの前面に設けられている。コントローラ60は、下部収容部1Bの内部の基板に設けられている。
図3は、プリンタ部の説明図である。この図は、複合装置1の上部収容部1Aが持上げられてプリンタ部20を露出させたときの様子を示している。
プリンタ部20は、紙を搬送する搬送ユニット(不図示)と、インクを吐出するヘッドを移動させるキャリッジ21とを有する。そして、プリンタ部20は、搬送ユニットにより紙を搬送する搬送動作と、移動するヘッドからインクを吐出して紙にドットを形成するドット形成動作とを交互に繰り返して、紙に画像を印刷する。不図示の搬送ユニットは、複合装置1の背面の背面給紙口22又は複合装置1の前面の前面給紙口23にセットされた紙を給紙し、複合装置1の前面の排紙トレイ24へ印刷された紙を排紙する。
下部収容部1Bの前面の左右には、インクカートリッジカバー25が設けられている。インクカートリッジ26の取り付け時又は交換時、ユーザは、このインクカートリッジカバー25を開き、インクカートリッジ26を取り付け又は交換する。取り付け後又は交換後にユーザがインクカートリッジカバー25を閉じることにより、インクカートリッジ26のセットが完了する。このインクカートリッジ26にはインクが収容されており、このインクはヘッドに供給されてヘッドから吐出される。
図4は、スキャナ部の説明図である。この図は、複合装置1の上蓋11を開いたときの様子を示している。
スキャナ部10は、上蓋11と、原稿台ガラス12とを有する。上蓋11には、白色の原稿マット11Aが取り付けられている。原稿台ガラス12に原稿が置かれた状態で上蓋11が閉じられると、原稿が原稿マット11Aと原稿台ガラス12との間で平らにセットされる。原稿台ガラス12の下には、読取キャリッジ等のスキャナ部10の他の構成要素がある。
図5は、パネル部の説明図である。
パネル部40は、液晶ディスプレイ41と、各種のボタンを有する。ボタンの種類としては、例えば、電源ボタン42、設定ボタン43、ストップボタン44、モード選択ボタン45、カーソル操作ボタン群46、スタートボタン47等がある。電源ボタン42は、複合装置1の電源をオン/オフする。設定ボタン43は、ヘッドクリーニング、ノズルチェック、インク残量等の設定や確認を行う。ストップボタン44は、動作中の機能を中止する。モード選択ボタン45は、複合装置1の機能の選択を行う。カーソル操作ボタン群46は、液晶ディスプレイ41に表示される項目の設定等を行う。スタートボタン47は、カラーボタン47C及びモノクロボタン47Bを有し、カラー印刷又はモノクロ印刷の開始に用いられる。
液晶ディスプレイ41には、図示するような各種の設定画面だけでなく、カードリーダ部30によって読み取られたメモリカードの画像データも表示される。
===コントローラ===
図6は、コントローラ60の構成の説明図である。
コントローラ60は、CPU61と、ROM62と、SDRAM63と、カードASIC64と、制御ASIC70とを有する。CPU61は、各種の演算処理を行う演算処理部であり、複合装置1の全体の制御を司る。ROM62は、複合装置1に各種の処理を実行させるためのプログラムを記憶するメモリである。SDRAM63は、CPU61の演算領域を提供する。カードASIC64は、カードリーダ部30にセットされたメモリカードとの間でデータの読み取り又は書き込みを行うための専用回路である。制御ASIC70は、各種の処理を行うための専用回路である。この制御ASIC70は、特定の処理を行うためのユニットを複数備えている。以下、制御ASIC70の各ユニットについて説明する。
USBインターフェイスユニット71は、外部のコンピュータとの間でデータを送受信するためのユニットである。USBインターフェイスユニット71を介して、例えば印刷データを受信したり、スキャナ部10により読み取られた原稿の画像データを送信したりする。
JPEGデコードユニット72は、JPEG形式の画像データをデコードするユニットである。JPEGデコードユニット72は、デコードした画像データを、ブロック単位(MCU:最小符号化単位)でYUV色空間のデータ(YUVデータ)を出力するユニットである。
ピクセル化ユニット73は、ブロック単位のYUVデータを画素単位のYUVデータにして出力するユニットである。また、ピクセル化ユニット73は、入力された画像データに対して、1/1(間引きなし)、1/2、1/4及び1/8の間引きを行う。
色変換ユニット74は、YUVデータを、RGB色空間のデータ(RGBデータ)にして出力するユニットである。色変換ユニット74は、YUVデータに対して所定の演算に基づくRGBデータを生成するだけでなく、SDRAM90のガンマ補正テーブルを参照してRGBデータをガンマ補正し、ガンマ補正されたRGBデータを出力することもできる。
並び替えユニット75は、入力されてくるRGBデータの画像データ上の位置に応じたアドレスを生成し、そのアドレスに格納されるようにRGBデータをSDRAM90に格納するユニットである。画像データを0°、90°、180°又は270°にて回転させる場合、並び替えユニットは、回転量に応じたアドレスを生成する。また、ピクセル化ユニット73が間引き処理を行う場合、並び替えユニットは、間引き量に応じたアドレスを生成する。
バスコントロールユニット76は、制御ASIC70に接続されたSDRAM90へのCPU61からのアクセスを可能にするユニットである。すなわち、バスコントロールユニット76は、CPU61がSDRAM90にデータを書き込む書き込み処理や、SDRAM90からデータを読み取る読み取り処理を行うためのユニットである。つまり、CPU61とSDRAM90との間のデータのやり取りは、バスコントロールユニット76を介して行われる。
印刷データ生成ユニット81は、RGBデータを印刷データに変換するユニットである。詳しくは、印刷データ生成ユニット81は、SDRAM90のルックアップテーブルを参照しながら256階調のRGBデータをCMYK色空間の256階調のデータに変換する色変換処理を行い、ディザテーブルを参照しながら256階調のCMYKデータを4階調のCMYKデータに変換するハーフトーン処理を行い、画素データであるCMYKデータを印刷される画素順に並び替えるインターレース処理を行う。
スキャナコントロールユニット82は、スキャナ部10を制御するためのユニットである。スキャナコントロールユニット82は、スキャナ部10を制御するための制御データをスキャナ部10へ送信したり、スキャナ部10から送信されてくる画像データをSDRAM90へ格納したりする。
プリンタコントロールユニット83は、プリンタ部20を制御するためのユニットである。プリンタコントロールユニット83は、SDRAM90に格納された印刷データの画素データに応じてプリンタ部20のヘッドからインクを吐出させたり、印刷データのコマンドデータに応じてプリンタ部20のモータを駆動してキャリッジ21を移動させたりする。
ディスプレイコントロールユニット84は、パネル部40の液晶ディスプレイ41の表示を制御するユニットである。ディスプレイコントロールユニット84は、液晶ディスプレイ41の設定をしたり、SDRAM90に格納された画像データを表示するため液晶ディスプレイ41へ送信したりする。
SDRAMコントローラ86は、SDRAM90へのデータの書き込み・読み出しを制御するとともに、各ユニットからSDRAM90に対するアクセスを管理する。各ユニットがSDRAM90にアクセスする場合、各ユニットはSDRAMコントローラ86に対してリクエストを発する。SDRAMコントローラ86は、各ユニットからリクエストがあったときに、どのユニットのアクセスを優先させるべきかを決定し、優先順序に従って各ユニットのリクエストに応じてSDRAM90へアクセスする。つまり、SDRAMコントローラ86は、各ユニットとSDRAM90との間でアクセスをスムーズに行わせる役割を果たしている。
各ユニットは、処理対象となるデータをSDRAM90へバッファすることができる。また、図示していないが、各ユニットはCPU61によって設定される。
===複合装置の各種機能の概要===
次に、図6を参照しながら、複合装置1の各種機能について説明する。以下に説明するように、複合装置1は、主な機能として、プリンタ機能、スキャナ機能、コピー機能、ダイレクトプリント機能などを有する。
<プリンタ機能について>
コンピュータには、複合装置1のプリンタドライバが予めインストールされている。そして、プリンタドライバは、コンピュータに、アプリケーションプログラム等で作成された画像データを印刷データに変換させる。この印刷データには、コマンドデータと画素データとが含まれている。コマンドデータは、複合装置1のプリンタ部20を制御するためのデータである。画素データは、印刷画像を構成するドットの有無・色・階調に関するデータであり、本実施形態ではCMYK色空間の4階調のデータ(CMYK2ビットデータ)である。そして、プリンタドライバは、コンピュータに、印刷データを複合装置1へ送信させる。
コントローラ60は、コンピュータからの印刷データを、コマンドデータと画素データとに分離して、SDRAM90にバッファする。そして、プリンタコントロールユニット83は、受信したコマンドデータに基づいてプリンタ部20を制御し、画素データに基づいてヘッドからインクを吐出させ、印刷を行う。本実施形態では、CMYK2ビットデータに基づいてヘッドからインクが吐出され、紙上の各画素に大ドット・中ドット・小ドットが形成される。
このような処理を複合装置1が行うことによって、複合装置1はプリンタとして機能する。
<スキャナ機能について>
コンピュータには、複合装置1のスキャナドライバが予めインストールされている。ユーザは、コンピュータ上でスキャナドライバの設定を行い、例えば読取解像度や読み取り範囲等の設定を行う。ユーザは、スキャナ部10に原稿5をセットした後、コンピュータ上でスキャナドライバによりスキャン開始を指示すると、スキャナドライバは、コンピュータに、ユーザの設定内容に応じた制御データを複合装置1へ送信させる。
スキャナコントロールユニット82は、コンピュータからの制御データに基づいてスキャナ部10を制御し、スキャナ部10から原稿5の画像データを取得する。本実施形態では、RGB色空間の256階調のデータ(RGB8ビットデータ)の画素データから構成される画像データを取得する。そして、コントローラ60は、取得した画像データをコンピュータへ送信する。
このような処理を複合装置1が行うことによって、複合装置1はスキャナとして機能する。
<コピー機能について>
ユーザは、パネル部40を操作して設定を行い、例えば紙の大きさ、原稿の大きさ、倍率、コピーモード(はやい/きれい)等の設定を行う。スキャナ部10に原稿5をセットした後、ユーザがパネル部40のスタートボタン47を押すと、コピー開始を指示する開始信号がパネル部40からコントローラ60へ送られる。スキャナコントロールユニット82は、ユーザの設定内容に応じた制御データをスキャナ部10へ送信し、スキャナ部10は、制御データに基づいて原稿5を読み取り、RGB8ビットデータの画素データから構成される画像データをスキャナコントロールユニット82へ送信する。スキャナコントロールユニット82は、スキャナ部10からの画像データをSDRAM90にバッファする。
次に、印刷データ生成ユニット81は、スキャナ部10から取得した画像データを、印刷データに変換する。スキャナ部10からの画像データはRGB8ビットデータの画素データから構成されており、印刷データ生成ユニット81は、このRGB8ビットデータを、色変換処理し、ハーフトーン処理し、インターレース処理し、生成された印刷データをSDRAM90へバッファする。そして、プリンタコントロールユニット83は、SDRAM90にバッファされた印刷データに応じてプリンタ部20を制御して、印刷を行う。
このような処理を複合装置1が行うことによって、複合装置1はコピー機として機能する。
<ダイレクトプリント機能>
ユーザは、画像データを記憶しているメモリカードをカードリーダ部30へセットする。カードASIC64は、メモリカードがカードリーダ部30へセットされると、メモリカードに記憶されている画像データを読み出し、バスコントロールユニット76を介してSDRAM90に画像データをバッファする。
画像データがJPEG形式の場合、JPEGデコードユニット72がJPEG形式の画像データをデコードし、ブロック単位のYUVデータを出力する。このブロック単位のYUVデータは、ピクセル化ユニット73によって、画素単位のYUVデータに変換される。また、この画素単位のYUVデータは、色変換ユニット74によってRGBデータに変換され、並び替えユニット75によって各RGBデータがSDRAM90の所定のアドレスにバッファされる。
ディスプレイコントロールユニット84は、SDRAM90にバッファされているRGBデータを液晶ディスプレイに表示する。これにより、ユーザは、メモリカードに記憶されている画像データの内容を確認できる。そして、ユーザは、パネル部40を操作して表示される画像データを切り替えて、印刷を希望する画像が表示されているときにカラーボタン47Cを押す。
カラーボタン47Cが押されると、表示中の画像の画像データがカードASIC64によってSDRAM90にバッファされ、JPEG形式の画像データであればJPEGデコードユニット72、ピクセル化ユニット73及び色変換ユニット74によってRGBデータに変換され、並び替えユニット75によって各RGBデータがSDRAM90の所定アドレスにバッファされる。
印刷データ生成ユニット81は、SDRAM90にバッファされているRGBデータを印刷データに変換し、プリンタコントロールユニット83は印刷データに基づいてプリンタ部20を制御し、画像が印刷される。
このような処理を複合装置1が行うことによって、複合装置1はメモリカードからダイレクトに印刷を行うダイレクトプリント機能を実現する。
なお、ダイレクトプリント機能として、複合装置1は、USB接続されたデジタルカメラからUSBインターフェイスユニット71を介してJPEG形式の画像データをSDRAM90にバッファし、これを印刷することもできる。
===JPEGデコードユニット72の機能===
既に説明した通り、JPEGデコードユニット72は、JPEG形式の画像データをデコードするユニットである。JPEGデコードユニット72は、デコードした画像データを、ブロック単位(MCU:最小符号化単位)でYUV色空間のデータ(YUVデータ)を出力する。
なお、YUVデータとは、Yデータ、Uデータ及びVデータから構成されるデータである。Yデータは輝度を示すデータであり、ここでは各画素につき1バイトのデータ量が割り当てられている。Uデータ及びVデータは、色差を示すデータであり、ここでは各画素につき1バイトのデータ量が割り当てられている。
ブロック単位のYUVデータは、ブロック単位のYデータ、ブロック単位のUデータ及びブロック単位のVデータから構成される。JPEGの符号化/復号化は8×8画素を1つの単位として行われるので、1つのブロック単位につき8×8画素分の画素データが含まれている。このため、1つのブロック単位のデータは、64バイト分のデータ量になる。
なお、画素単位のYUVデータは、1バイトのYデータと、1バイトのUデータと、1バイトのVデータとから構成される。ユニットの処理単位が4バイトである場合、又は、ユニットとSDRAMコントローラ86との間のデータ転送の単位が4バイト又は4バイトの整数倍である場合、画素単位のYUVデータは、1バイトのダミーデータと、1バイトのYデータと、1バイトのUデータと、1バイトのVデータとから構成される。
図7A〜図7Eは、JPEGデコードユニット72の出力の説明図の説明図である。図7Aは、元画像を示す画像データの説明図である。図7Bは、サンプリング比が4:4:4の場合におけるブロック単位のデータの対応関係の説明図である。図7Cは、サンプリング比が4:2:2の場合におけるブロック単位のデータの対応関係の説明図である。図7Dは、サンプリング比がV4:2:2の場合におけるブロック単位のデータの対応関係の説明図である。図7Eは、サンプリング比が4:2:0の場合におけるブロック単位のデータの対応関係の説明図である。ここでは、説明のため、画像が48×32画素から構成されるものとする。このため、JPEGデコードユニット72の出力する画像データは、6×4のブロック単位(MCU)から構成される。
人間の目は輝度に関する解像度に敏感で、色度に関する解像度には鈍感である。この性質を利用して、JPEG圧縮の際に、色差に関する情報を部分的に圧縮することが行われる。この圧縮率は、サブサンプリング比で表される。
サブサンプリング比が4:4:4の場合、1つのブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。なお、サブサンプリング比が4:4:4の場合、ブロック単位のYデータに含まれる1画素分のYデータに対して、ブロック単位のUデータに含まれる1画素分のUデータと、ブロック単位のVデータに含まれる1画素分のVデータとがそれぞれ対応付けられている。このサブサンプリング比のデータ形式のことを444形式と呼ぶ。
サブサンプリング比が4:2:2の場合、2つのブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。なお、サブサンプリング比が4:2:2の場合、ブロック単位のYデータに含まれる2画素分のYデータに対して、ブロック単位のUデータに含まれる1画素分のUデータと、ブロック単位のVデータに含まれる1画素分のVデータとがそれぞれ対応付けられている。サブサンプリング比が4:2:2の場合、1つのブロック単位のUデータやVデータに対応付けられている2つのブロック単位のYデータが、水平方向に並ぶ場合と、垂直に並ぶ場合とがある。前者の場合のサブサンプリング比を単に4:2:2と呼び、後者の場合のサブサンプリング比をV4:2:2と呼ぶ。また、前者のデータ形式を422形式と呼び、後者のデータ形式をV422と呼ぶ。
サブサンプリング比が4:2:0の場合、2×2のブロック単位(水平方向に2つ、垂直方向に2つの計4つのブロック単位)のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。なお、サブサンプリング比が4:2:0の場合、ブロック単位のYデータに含まれる2×2画素分のYデータに対して、ブロック単位のUデータに含まれる1画素分のUデータと、ブロック単位のVデータに含まれる1画素分のVデータとがそれぞれ対応付けられている。このサブサンプリング比のデータ形式のことを420形式と呼ぶ。
444形式の画像データの場合、デコードされた画像データは、24のブロック単位のYデータと、24のブロック単位のUデータと、24のブロック単位のVデータとから構成される。JPEGデコードユニット72は、図中で「1」の付されたブロック単位のYUVデータを出力し、その後も番号順にブロック単位のYUVデータを出力する。
422形式及びV422形式の画像データの場合、デコードされた画像データは、24のブロック単位のYデータと、12のブロック単位のUデータと、12のブロック単位のVデータとから構成される。JPEGデコードユニット72は、図中で「1」の付された2つのブロック単位のYデータと、1つのブロック単位のUデータと、1つのブロック単位のVデータとからなるブロック単位のYUVデータを出力し、その後も番号順に2つのブロック単位のYデータと、1つのブロック単位のUデータと、1つのブロック単位のVデータとからなるブロック単位のYUVデータを出力する。なお、422形式の画像データの場合には、水平方向に並ぶ2つのブロック単位のYデータが出力される。一方、V422形式の画像データの場合には垂直方向に並ぶ2つのブロック単位のYデータが出力される。
420形式の画像データの場合、デコードされた画像データは、24のブロック単位のYデータと、6のブロック単位のUデータと、6のブロック単位のVデータとから構成される。JPEGデコードユニット72は、図中で「1」の付された4つのブロック単位のYデータと、1つのブロック単位のUデータと、1つのブロック単位のVデータとからなるブロック単位のYUVデータを出力し、その後も番号順に4つのブロック単位のYデータと、1つのブロック単位のUデータと、1つのブロック単位のVデータとからなるブロック単位のYUVデータを出力する。
===ピクセル化ユニット73の機能===
図8は、ピクセル化ユニット73の機能の説明図である。
ピクセル化ユニット73には、それぞれ対応付けられているブロック単位のYUVデータが入力される。このため、入力されるブロック単位のYデータのデータ量は、444形式の場合には64バイトであるが、422形式及びV422の場合には128バイトであり、420形式の場合には256バイトである。なお、入力されるブロック単位のUデータ及びVデータは、サブサンプリング比に関わらず、64バイトである。
ピクセル化ユニット73にブロック単位のYUVデータが入力されると、ブロック単位のYUVデータはSRAMの所定のアドレスに格納される。そして、ピクセル化ユニットは、ブロック単位のYデータに含まれる1バイトのYデータと、ブロック単位のUデータに含まれる1バイトのUデータと、ブロック単位のVデータに含まれる1バイトのVデータを、1つの画素データとして出力する(この画素データに含まれるYUVデータのYデータ、Uデータ及びVデータは、それぞれ対応付けられた関係にあるデータである)。
ピクセル化ユニット73にはSRAMが2つ用意されている。一方のSRAMにブロック単位のYUVデータを格納して画素単位のYUVデータを出力している間に、他方のSRAMに次のブロック単位のYUVデータを格納する。そして、一方のSRAMから画素単位のYUVデータを出力した後、すぐに他方のSRAMから画素単位のYUVデータを出力し、その間に更に次のブロック単位のYUVデータを一方のSRAMに格納する。
以下では一方のSRAMについてのみ説明を行なうが、他方のSRAMについても同様である。
図9A〜図9Dは、ピクセル化ユニット73の出力順の説明図である。
図中において、ブロック単位のデータを構成する8×8画素分の画素データに対して、番号が付してある。例えば、ブロック単位のYデータの中のi番の番号が付された画素のYデータのことを、「Yデータ[i]」と表すことにする。また、Uデータ及びVデータでも同様に表すことにする。また、Yデータ[i]と、Uデータ[j]と、Vデータ[k]とから構成されるYUVデータのことを、「YUVデータ[i,j,k]」と表すことにする。
<444形式の場合の出力順について>
図9Aは、444形式の場合のピクセル化ユニット73の出力順の説明図である。
444形式の場合、1つのブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。このため、ピクセル化ユニット73は、444形式の場合、互いに対応付けられている、1つのブロック単位のYデータ、1つのブロック単位のUデータ、及び1つのブロック単位のVデータを、SRAMに格納する。
また、444形式の場合、1画素分のYデータに対して、1画素分のUデータと、1画素分のVデータとがそれぞれ対応付けられている。例えば、図中の1番の画素のYデータ[1]に対して、1番の画素のUデータ[1]と、1番の画素のVデータ[1]が対応付けられている。図中において、対応付けられているUデータの画素とVデータの画素は、同じ番号が付されている。
そして、ピクセル化ユニット73は、1番から64番まで順に、画素単位のYUVデータを出力する。すなわち、ピクセル化ユニット73は、YUV[1,1,1]→YUV[2,2,2]→YUV[3,3,3]→YUV[4,4,4]→・・・→YUV[63,63,63]→YUV[64,64,64]の順に、YUVデータを出力する。
ところで、444形式の場合、図7Bの番号順に、ブロック単位のYUVデータがピクセル化ユニット73に入力され、ピクセル化ユニット73は、入力されたブロック単位のYUVデータに含まれる64画素分の画素単位のYUVデータを順に出力する。このため、444形式の場合、ピクセル化ユニット73は、図7Aに示すアルファベット順に、各ブロックの64画素分のYUVデータの出力を行うことになる。
<422形式の場合の出力順について>
図9Bは、422形式の場合のピクセル化ユニット73の出力順の説明図である。
422形式の場合、2つのブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。このため、ピクセル化ユニット73は、422形式の場合、互いに対応付けられている、1つのブロック単位のYデータ、1つのブロック単位のUデータ、及び1つのブロック単位のVデータを、SRAMに格納する。ここでは、2つのブロック単位のYデータの一方をY1データと呼び、他方をY2データと呼ぶ。Y1データの8×8画素は、Y2データの8×8画素に対して、画像データ上で水平方向に隣接しており、ここでは水平方向左側に位置する。Y1データとY2データの画像データ上の位置関係が水平方向に隣接しているため、Y1データにはブロック単位のUデータ(又はVデータ)のうちの水平方向左側の4×8画素(水平方向4画素×垂直方向8画素)が対応付けられており、Y2データにはブロック単位のUデータ(又はVデータ)のうちの水平方向右側の4×8画素が対応付けられている。
また、422形式の場合、2画素分のYデータに対して、1画素分のUデータと、1画素分のVデータとがそれぞれ対応付けられている。同じUデータ(又はVデータ)に対応付けられるYデータの2画素は、画像データ上で水平方向に隣接している。例えば、1番の画素のYデータ[1]及び2番の画素のYデータ[2]に対して、1番の画素のUデータ[1]と、1番の画素のVデータ[1]が対応付けられている。図中において、対応付けられているUデータの画素とVデータの画素は、同じ番号が付されている。また、Uデータ(又はVデータ)のn番の画素は、Yデータのn番及びn+1番の画素と対応付けられている。
そして、ピクセル化ユニット73は、1番から128番まで順に、画素単位のYUVデータを出力する。すなわち、ピクセル化ユニット73は、YUV[1,1,1]→YUV[2,1,1]→YUV[3,3,3]→YUV[4,3,3]→・・・→YUV[8,7,7]→YUV[9,9,9]→YUV[10,9,9]→・・・YUV[64,63,63]→YUV[65,65,65]→YUV[66,65,65]→・・・→YUV[128,127,127]の順に、YUVデータを出力する。つまり、422形式の場合、2つのブロック単位のうちの水平方向左側に位置するブロック単位の64画素分のYUVデータを順に出力した後、水平方向右側に位置するブロック単位の64画素分のYUVデータを順に出力する。
ところで、422形式の場合、図7Cの番号順に、ブロック単位のYUVデータがピクセル化ユニット73に入力され、ピクセル化ユニット73は、入力されたブロック単位のYUVデータに含まれる128画素分の画素単位のYUVデータを順に出力する。このため、422形式の場合、ピクセル化ユニット73は、図7Aに示すアルファベット順に、各ブロックの64画素分のYUVデータの出力を行うことになる。
<V422形式の場合の出力順について>
図9Cは、V422形式の場合のピクセル化ユニット73の出力順の説明図である。
V422形式の場合、2つのブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。このため、ピクセル化ユニット73は、422形式の場合、互いに対応付けられている、1つのブロック単位のYデータ、1つのブロック単位のUデータ、及び1つのブロック単位のVデータを、SRAMに格納する。ここでも、2つのブロック単位のYデータの一方をY1データと呼び、他方をY2データと呼ぶ。Y1データの8×8画素は、Y2データの8×8画素に対して、画像データ上で垂直方向に隣接しており、ここでは垂直方向上側に位置する。Y1データとY2データの画像データ上の位置関係が垂直方向に隣接しているため、Y1データにはブロック単位のUデータ(又はVデータ)のうちの垂直方向上側の8×4画素(水平方向8画素×垂直方向4画素)が対応付けられており、Y2データにはブロック単位のUデータ(又はVデータ)のうちの垂直方向下側の8×4画素が対応付けられている。
また、V422形式の場合、2画素分のYデータに対して、1画素分のUデータと、1画素分のVデータとがそれぞれ対応付けられている。同じUデータ(又はVデータ)に対応付けられるYデータの2画素は、画像データ上で垂直方向に隣接している。例えば、1番の画素のYデータ[1]及び9番の画素のYデータ[9]に対して、1番の画素のUデータ[1]と、1番の画素のVデータ[1]が対応付けられている。図中において、対応付けられているUデータの画素とVデータの画素は、同じ番号が付されている。また、Uデータ(又はVデータ)のn番の画素は、Yデータのn番及びn+8番の画素と対応付けられている。
そして、ピクセル化ユニット73は、1番から128番まで順に、画素単位のYUVデータを出力する。すなわち、ピクセル化ユニット73は、YUV[1,1,1]→YUV[2,2,2]→・・・→YUV[8,8,8]→YUV[9,1,1]→YUV[10,2,2]・・・→YUV[64,56,56]→YUV[65,65,65]→YUV[66,66,66]→・・・→YUV[128,120,120]の順に、YUVデータを出力する。つまり、V422形式の場合、2つのブロック単位のうちの垂直方向上側に位置するブロック単位の64画素分のYUVデータを順に出力した後、垂直方向下側に位置するブロック単位の64画素分のYUVデータを順に出力する。
ところで、V422形式の場合、図7Dの番号順に、ブロック単位のYUVデータがピクセル化ユニット73に入力され、ピクセル化ユニット73は、入力されたブロック単位のYUVデータに含まれる128画素分の画素単位のYUVデータを順に出力する。このため、V422形式の場合、ピクセル化ユニット73は、図7Aに示す「A」のブロックの64画素分のYUVデータの出力を行い、次に「G」のブロックの64画素分のYUVデータの出力を行い、続いて、B→H→C→I→D→J→E→K→F→L→M→S→N→T→O→U→P→V→Q→W→R→Xの順に、各ブロックの64画素分のYUVデータの出力を行うことになる。
<420形式の場合の出力順について>
図9Dは、420形式の場合のピクセル化ユニット73の出力順の説明図である。
420形式の場合、2×2のブロック単位のYデータに対して、1つのブロック単位のUデータと、1つのブロック単位のVデータとがそれぞれ対応付けられている。ここでは、2×2の左上のブロック単位のYデータをY1データと呼び、右上のブロック単位のYデータをY2データと呼び、左下のブロック単位のYデータをY3データと呼び、右下のブロック単位のYデータをY4データと呼ぶ。Y1データにはブロック単位のUデータ(又はVデータ)のうちの左上側の4×4画素が対応付けられており、Y2データにはブロック単位のUデータ(又はVデータ)のうちの右上側の4×4画素が対応付けられており、Y3データにはブロック単位のUデータ(又はVデータ)のうちの左下側の4×4画素が対応付けられており、Y4データにはブロック単位のUデータ(又はVデータ)のうちの左上側の4×4画素が対応付けられている
また、420形式の場合、2×2画素分のYデータに対して、1画素分のUデータと、1画素分のVデータとがそれぞれ対応付けられている。同じUデータ(又はVデータ)に対応付けられるYデータの2×2画素は、画像データ上で互いに隣接している。例えば、1番、2番、9番及び10番の2×2画素のYデータに対して、1番の画素のUデータと、1番の画素のVデータが対応付けられている。図中において、対応付けられているUデータの画素とVデータの画素は、同じ番号が付されている。また、Uデータ(又はVデータ)のn番の画素は、Yデータのn番、n+1番、n+8番及びn+9番の画素と対応付けられている。
そして、ピクセル化ユニット73は、1番から256番まで順に、画素単位のYUVデータを出力する。420形式の場合、2×2のブロック単位のうちの左上側に位置するブロック単位の64画素分のYUVデータを順に出力し、次に右上側に位置するブロック単位の64画素分のYUVデータを順に出力し、次に左下側に位置するブロック単位の64画素分のYUVデータを順に出力し、次に右下側に位置するブロック単位の64画素分のYUVデータを順に出力する。
ところで、420形式の場合、図7Eの番号順に、ブロック単位のYUVデータがピクセル化ユニット73に入力され、ピクセル化ユニット73は、入力されたブロック単位のYUVデータに含まれる256画素分の画素単位のYUVデータを順に出力する。このため、420形式の場合、ピクセル化ユニット73は、図7Aに示す「A」のブロックの64画素分のYUVデータの出力を行い、次に「B」のブロックの64画素分のYUVデータの出力を行い、次に「G」のブロックの64画素分のYUVデータの出力を行い、次に「H」のブロックの64画素分のYUVデータの出力を行い、続いて、C→D→I→J→E→F→K→L→M→N→S→T→O→P→U→V→Q→R→W→Xの順に、各ブロックの64画素分のYUVデータの出力を行うことになる。
<間引き処理について>
前述の説明では、ピクセル化ユニット73は、ブロック単位のYデータに含まれる全ての画素について、画素単位のYUVデータを順に出力していた。しかし、必ずしも全ての画素について画素単位のYUVデータを出力する必要はない。すなわち、ビクセル化ユニット73は、入力されたブロック単位のデータに含まれる画素のうちの所定の画素のYUVデータのみを出力し、他の画素のYUVデータを間引くように出力しても良い。
図10A〜図10Cは、444形式の間引き処理の説明図である。図10Aは1/2間引き処理の説明図であり、図10Bは1/4間引き処理の説明図であり、図10Cは1/8間引き処理の説明図である。
1/2間引き処理の場合、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、水平方向4画素×垂直方向4画素のYUVデータを出力する。図中には、出力される画素データの対応する画素を、太線で示している。なお、YUVデータを出力する際に、ピクセル化ユニット73は、番号順に、画素単位のYUVデータを出力する。すなわち、ピクセル化ユニット73は、YUV[1,1,1]→YUV[3,3,3]→YUV[5,5,5]→・・・→YUV[53,53,53]→YUV[55,55,55]の順に、YUVデータを出力する。
1/4間引き処理の場合、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、水平方向2画素×垂直方向2画素のYUVデータを、番号順に出力する。1/8間引き処理の場合、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、1画素のYUVデータ[1,1,1]を出力する。
図11A〜図11Cは、422形式の間引き処理の説明図である。図11Aは1/2間引き処理の説明図であり、図11Bは1/4間引き処理の説明図であり、図11Cは1/8間引き処理の説明図である。図中には、ピクセル化ユニット73が出力する画素データに対応する画素データが太線で示されている。
422形式における1/2間引き処理の場合、ピクセル化ユニット73は、168×8画素の2ブロック分のデータの中から、水平方向8画素×垂直方向4画素のYUVデータを出力する。図中には、出力される画素データの対応する画素を、太線で示している。なお、YUVデータを出力する際に、ピクセル化ユニット73は、番号順に、画素単位のYUVデータを出力する。すなわち、ピクセル化ユニット73は、YUV[1,1,1]→YUV[3,3,3]→YUV[5,5,5]→・・・→YUV[53,53,53]→YUV[55,55,55]→YUV[65,65,65]→YUV[67,67,67]→・・・→YUV[117,117,117]→YUV[119,119,119]→の順に、YUVデータを出力する。なお、1/4間引き処理及び1/8間引き処理については、ピクセル化ユニット73が出力する画素データに対応する画素データが太線で示されているので、詳しい説明は省略する。
図12A〜図12Cは、V422形式の間引き処理の説明図である。図12Aは1/2間引き処理の説明図であり、図12Bは1/4間引き処理の説明図であり、図12Cは1/8間引き処理の説明図である。図中には、ピクセル化ユニット73が出力する画素データに対応する画素データが太線で示されているので、詳しい説明は省略する。
図13A〜図13Cは、420形式の間引き処理の説明図である。図13Aは1/2間引き処理の説明図であり、図13Bは1/4間引き処理の説明図であり、図13Cは1/8間引き処理の説明図である。図中には、ピクセル化ユニット73が出力する画素データに対応する画素データが太線で示されているので、詳しい説明は省略する。
ここでは、出力される画素データの対応する画素を太線で示している。なお、いずれのデータ形式の場合でも、また、いずれの間引き処理の場合でも、ピクセル化ユニット73は、番号順に、画素単位のYUVデータを出力する。
===色変換ユニット74の機能===
色変換ユニット74は、ピクセル化ユニット73から順次入力されるYUVデータを、RGBデータに変換して出力する。
色変換ユニット74では、例えば以下のような演算を行うことによって、YUVデータをRGBデータに変換する。
R=Y+1.40200×V
G=Y−0.34414×U−0.71414×V
B=Y+1.77200×U
色変換ユニット74から出力されるRGBデータは、Rデータ、Gデータ、Bデータ及びダミーデータから構成される。Rデータは、レッドの階調を示すデータであり、8ビットデータである。Gデータは、グリーンの階調を示すデータであり、8ビットデータである。Bデータは、ブルーの階調を示すデータであり、8ビットデータである。ダミーデータは、ダミーの8ビットデータである。このため、RGBデータは、4バイトのデータ量になる。
ピクセル化ユニット73は、最初に「A」のブロックの1番の画素のYUVデータを出力し、続いて、2番〜8番の画素のYUVデータを順次出力するため、色変換ユニット74は、「A」のブロックの1番の画素のRGBデータを出力し、続いて、2番〜8番の画素のRGBデータを順次出力する。このように、色変換ユニット74は、ピクセル化ユニット73から入力してくるYUVデータの順に、YUVデータをRGBデータに変換し、そのRGBデータを並び替えユニット75へ順に出力する。
===並び替えユニット75の機能(間引きなし)===
<並び替えユニット75の機能について>
まず、間引き処理が行われない場合の並び替えユニット75の機能について説明する。以下の説明では、さらに説明を簡略化するため、画像が16(水平方向)×24画素(垂直方向)から構成されるものとする(このため、画像データは、2(水平方向)×3(垂直方向)のブロック単位から構成される)。
並び替えユニット75は、入力されてくる画素単位のRGBデータ(画素データ)を、順にSDRAM90の所定のアドレスに格納する。画像データを0°、90°、180°又は270°にて回転させる場合、並び替えユニットは、回転量に応じたアドレスに各画素データを格納する。SDRAM90に格納された画素データをアドレス順に並べると、回転量を反映した画像になる。SDRAM90に格納された画像データが回転後の画像になるように、並び替えユニット75は、入力されてくる画素データに対応するアドレスを生成し、そのアドレスに画素データを順次格納する。
図14A〜図14Dは、回転後の画像データの説明図である。図中の左側の図は、連続するアドレスの画素データを所定画素ごとに改行して並べた状態の説明図である。図中の右側の図は、連続して入力されてくる1ブロック分の64画素の画素データの並び順の説明図である。
また、図15A及び図15Bは、回転後の画像の画素と、その画素に対応する画素データの格納されるアドレスの先頭アドレスとの関係の説明図である。図15Aは、回転量が0°又は180°の場合の説明図であり、図15Bは、回転量が90°又は270°の場合の説明図である。
回転量が0°又は180°のときのように回転後の画像が水平方向16画素×垂直方向24画素から構成される場合、水平方向に並ぶ16画素の画素データ(RGBデータ)は、SDRAM90の連続するアドレスに格納される。例えば、回転後の画像の一番上の一行目の16画素は、0番地〜3f番地の領域に格納される。このアドレスの次に連続する16画素分のアドレスには、この水平方向に並ぶ16画素と垂直方向に隣接する16画素(水平方向に並ぶ16画素)の画素データが格納される。例えば、回転後の画像の2行目の16画素は、1行目の16画素の格納されるアドレスに連続して、40番地〜7f番地の領域に格納される。
回転量が90°又は270°のときのように回転後の画像が水平方向24画素×垂直方向16画素から構成される場合、水平方向に並ぶ24画素の画素データは、SDRAM90の連続するアドレスに格納される。例えば、回転後の画像の一番上の一行目の24画素は、0番地〜5f番地の領域に格納される。このアドレスの次に連続する24画素分のアドレスには、この水平方向に並ぶ24画素と垂直方向に隣接する24画素(水平方向に並ぶ24画素)の画素データが格納される。例えば、回転後の画像の2行目の24画素は、1行目の24画素の格納されるアドレスに連続して、60番地〜bf番地の領域に格納される。
回転量0°の場合(図14A及び図15A参照)、SDRAM90の最初のアドレス(0番地)には「A」のブロックの1番の画素の画素データが格納される。そして、このアドレスと連続する番地0〜番地1fには、「A」のブロックの1番〜8番の画素の画素データが格納される。また、このアドレスと連続している20番地〜3f番地には、「B」のブロックの1番〜8番の画素の画素データが格納される。そして、3f番地の次のアドレスである40番地に、「A」のブロックの9番の画素の画素データが格納され、40番地〜5f番地に、「A」のブロックの9番〜16番の画素の画素データが格納される。このような順に従って、「A」及び「B」のブロックの各64画素の画素データがSDRAM90の所定のアドレスに格納される。そして、「B」のブロックの64番の画素の画素データの次に、「C」のブロックの1番の画素の画素データが格納される。また、「C」のブロックの1番〜8番の画素の画素データが、連続するアドレスである200番地〜21f番地に格納される。このような順に従って、「A」〜「F」のブロックの各64画素の画素データが、SDRAM90の所定のアドレスに格納される。
ここで、同じブロックの画素の画素データの格納先について注目する。1番〜8番の画素の画素データは連続するアドレスに格納される。例えば、「A」のブロックの1番〜8番の画素データは、0番地〜1f番地に格納される。また、9番〜16番の画素の画素データも、連続するアドレスに格納される。例えば、「A」のブロックの9番〜16番の画素データは、40番地〜5f番地に格納される。しかし、1番〜8番の画素の画素データを格納するアドレスと、9番〜16番の画素の画素データを格納するアドレスとは、互いに連続するアドレスではない。例えば、「A」のブロックの8番の画素の画素データと9番の画素の画素データは、互いに連続するアドレスには格納されていない。つまり、各ブロック内の64画素の画素データは、必ずしも連続するアドレスに格納されるわけではない。
回転量90°の場合(図14B及び図15B参照)、SDRAM90の最初のアドレス(0番地)には「E」のブロックの57番の画素の画素データが格納される。そして、このアドレスと連続する番地0〜1fには、「E」のブロックの左側1列目の8画素(1番、9番、17番、25番、33番、41番、49番及び57番の画素)の画素データが格納される。また、このアドレスと連続している20番地〜3f番地には、「C」のブロックの左側1列目の8画素の画素データが格納される。さらに、このアドレスと連続している40番地〜5f番地には、「A」のブロックの左側1列目の8画素の画素データが格納される。そして、「A」のブロックの1番の画素の画素データを格納するアドレスの次のアドレス(60番地)に、「F」のブロックの58番の画素の画素データが格納され、60番地〜7f番地に、「F」のブロックの左側2列目の8画素(2番、10番、18番、26番、34番、42番、50番及び58番の画素)の画素データが格納される。このような順に従って、「E」、「C」及び「A」のブロックの各64画素の画素データがSDRAM90の所定のアドレスに格納される。そして、「A」のブロックの8番の画素の画素データの次に、「F」のブロックの57番の画素の画素データが格納される。また、「F」のブロックの左側1列目の8画素(1番、9番、17番、25番、33番、41番、49番及び57番の画素)の画素データが、連続するアドレスである300番地〜31f番地に格納される。このような順に従って、「A」〜「F」のブロックの各64画素の画素データが、SDRAMの所定のアドレスに格納される。
なお、同じブロックの画素の画素データの格納先について注目すると、各ブロック内の64画素の画素データは、必ずしも連続するアドレスに格納されるわけではない。
回転量180°の場合(図14C及び図15A参照)、SDRAM90の最初のアドレス(0番地)には「F」のブロックの64番の画素の画素データが格納される。なお、他の画素データの格納先については、説明を省略する。
回転量270°の場合(図14D及び図15B参照)SDRAM90の最初のアドレス(0番地)には「B」のブロックの8番の画素の画素データが格納される。なお、他の画素データの格納先については、説明を省略する。
このように、並び替えユニットは、回転量に応じた所定のアドレスに、入力される画素単位のRGBデータ(画素データ)を格納する。
言い換えると、並び替えユニット75は、入力される画素単位のRGBデータ(画素データ)を、上述した通りのアドレスに、格納するように構成されている。例えば、例えば「A」のブロックの1番の画素のRGBデータが入力されたとき、回転量が0°ならば0番地に格納し、回転量が90°ならば5c番地に格納し、回転量が180°ならば5fc番地に格納し、回転量が270°ならば5a0番地に格納するように、構成されている。
そこで、このような機能を備えた並び替えユニット75の構成について、以下に説明する。
===並び替えユニット75の構成===
<全体構成について>
図16は、並び替えユニット75の構成のブロック図である。並び替えユニット75は、セレクタ751と、データレジスタ752と、指示部753と、アドレス生成部754と、SDRAMインターフェイス755とを有する。
セレクタ751は、データレジスタ752へ出力する信号を選択するものである。セレクタ751は、指示部753からの指示に基づいて、色変換ユニット74から入力されるRGBデータ又はSDRAM90から入力されるRGBデータのいずれかを選択する。ここでは、セレクタ751は、色変換ユニット74から入力されるRGBデータを選択し、そのRGBデータをデータレジスタ752へ出力する。このRGBデータは4バイトデータである。なお、後述する通り、SDRAM90とのデータの読み出し・書き込みは8バイト単位で行われるため、SDRAM90から入力されるRGBデータをセレクタ751が選択する場合、2画素分のRGBデータがデータレジスタ752へ出力される。
データレジスタ752は、セレクタ751から入力されたRGBデータを少量格納するためのものである。本実施形態では、データレジスタ752には8画素分のRGBデータが格納できる。後述するように、SDRAM90とのデータの読み出し・書き込みは8バイト単位で行われるため、SDRAM90へ書き込むための2画素分の画素データがデータレジスタ752に用意された段階で、データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。
指示部753は、制御信号に基づいて、セレクタ751やアドレス生成部754などを設定するものである。指示部753に入力される制御信号は、CPU61から出力される。この制御信号には、例えば、回転量に関する情報、間引き量に関する情報、画像データのサイズに関する情報などが含まれている。
アドレス生成部754は、RGBデータを格納すべきアドレス値を生成するものである。アドレス生成部754は、アドレス値をSDRAMインターフェイス755へ出力する。アドレス生成部754へは、SDRAMインターフェイス755からACK信号が入力する。このACK信号が入力する毎に、アドレス生成部754が生成するアドレス値が変化する。なお、アドレス生成部754については、後で詳述する。
SDRAMインターフェイス755は、RGBデータの書き込みをSDRAMコントローラ86へ指示するためのものである。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、2画素分のRGBデータと、そのRGBデータを書き込むべきアドレスを示すアドレス値とを出力する。指定されたアドレスへRGBデータの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力される。このACK信号があると、SDRAMインターフェイス755は、アドレス生成部754へACK信号を出力する。
ところで、並び替えユニット75は、色変換ユニット74から入力されるRGBデータを、上述した通りのアドレスに格納する。すなわち、アドレス生成部754は、色変換ユニット74から入力されるRGBデータを格納すべきアドレス値を、順次出力する。
そこで、次に、このようなアドレス生成部754の構成について、以下に説明する。
<アドレス生成部754の構成について>
図17は、アドレス生成部754の構成の説明図である。アドレス生成部754は、Xカウンタ101と、Yカウンタ102と、XMCUカウンタ103と、YMCUカウンタ104と、PX算出部105と、PY算出部106と、BX算出部107と、BY算出部108と、加算器109を有する。また、アドレス生成部754は、4つのアップダウンセレクタ110A〜110Dと、Vカウンタ112と、Hカウンタ113とを有する。
Xカウンタ101は、カウント条件が満たされたときに、Xカウント値をインクリメント又はデクリメントするカウンタである。Xカウンタ101のカウント条件は、後で説明する通り、回転量や間引き量に応じて変更される。インクリメントするか又はデクリメントするかは、アップダウンカウンタ110Aの設定に応じて決定される。Xカウンタ101は、開始値から終了値まで順にカウントを行い、Xカウント値が終了値のときにカウントが行われると、Xカウント値はリセットされて開始値になる。この開始値及び終了値は、回転量や間引き量に応じて変更される。Xカウンタ101には、前述のACK信号と、Yカウンタ102からのYカウント値が入力する。このACK信号とYカウント値は、カウント条件に用いられる。Xカウンタ101は、Yカウンタ102、XMCUカウンタ103、YMCUカウンタ104、PX算出部105、Vカウンタ112及びHカウンタ113へ、Xカウント値を出力する。
なお、Xカウント値は、ブロック内におけるアドレス生成対象画素の水平方向位置を示す値になる。
Yカウンタ102は、カウント条件が満たされたときに、Yカウント値をインクリメント又はデクリメントするカウンタである。Yカウンタ102のカウント条件は、後で説明する通り、回転量や間引き量に応じて変更される。インクリメントするか又はデクリメントするかは、アップダウンカウンタ110Bの設定に応じて決定される。Yカウンタ102は、開始値から終了値まで順にカウントを行い、Yカウント値が終了値のときにカウントが行われると、Yカウント値はリセットされて開始値になる。この開始値及び終了値は、回転量や間引き量に応じて変更される。Yカウンタ102には、前述のACK信号と、Xカウンタ101からのXカウント値が入力する。このACK信号とXカウント値は、カウント条件に用いられる。Yカウンタ102は、Xカウンタ101、XMCUカウンタ103、YMCUカウンタ104、PY算出部106、Vカウンタ112及びHカウンタ113へ、Yカウント値を出力する。
なお、Yカウント値は、ブロック内におけるアドレス生成対象画素の垂直方向位置を示す値になる。
XMCUカウンタ103は、カウント条件が満たされたときに、XMCUカウント値をインクリメント又はデクリメントするカウンタである。XMCUカウンタ103のカウント条件は、後で説明する通り、回転量や間引き量に応じて変更される。インクリメントするか又はデクリメントするかは、アップダウンカウンタ110Cの設定に応じて決定される。XMCUカウンタ103は、開始値から終了値まで順にカウントを行い、XMCUカウント値が終了値のときにカウントが行われると、XMCUカウント値はリセットされて開始値になる。この開始値及び終了値は、回転量や間引き量に応じて変更される。XMCUカウンタ103には、Xカウンタ101からのXカウント値、Yカウンタ102からのYカウント値、YMCUカウンタ104からのカウント値、Vカウンタ112からのVカウント値、及びHカウンタ113からのHカウント値が入力する。これらのカウント値は、カウント条件に用いられる。XMCUカウンタ103は、YMCUカウンタ104及びBX算出部107へ、XMCUカウント値を出力する。
なお、XMCUカウント値は、アドレス生成対象画素のブロックの画像データ内における水平方向位置を示す値になる。
YMCUカウンタ104は、カウント条件が満たされたときに、YMCUカウント値をインクリメント又はデクリメントするカウンタである。YMCUカウンタ104のカウント条件は、後で説明する通り、回転量や間引き量に応じて変更される。インクリメントするか又はデクリメントするかは、アップダウンカウンタ110Dの設定に応じて決定される。YMCUカウンタ104は、開始値から終了値まで順にカウントを行い、YMCUカウント値が終了値のときにカウントが行われると、YMCUカウント値はリセットされて開始値になる。この開始値及び終了値は、回転量や間引き量に応じて変更される。YMCUカウンタ104には、Xカウンタ101からのXカウント値、Yカウンタ102からのYカウント値、XMCUカウンタ103からのカウント値、Vカウンタ112からのVカウント値、及びHカウンタ113からのHカウント値が入力する。これらのカウント値は、カウント条件に用いられる。YMCUカウンタ104は、XMCUカウンタ103及びBY算出部108へ、YMCUカウント値を出力する。
なお、YMCUカウント値は、アドレス生成対象画素のブロックの画像データ内における垂直方向位置を示す値になる。
PX算出部105は、Xカウンタ101からのXカウント値に基づいて、値PXを算出するものである。PX算出部105は、間引き量に基づいて、Xカウント値に対する値PXを変更する。PX算出部105は、値PXを加算器109へ出力する。
PY算出部106は、Yカウンタ102からのYカウント値に基づいて、値PYを算出するものである。PY算出部106は、間引き量に基づいて、Yカウント値に対する値PYを変更する。PY算出部106は、値PYを加算器109へ出力する。
BX算出部107は、XMCUカウンタ103からのXMCUカウント値に基づいて、値BXを算出するものである。BX算出部107は、間引き量に基づいて、XMCUカウント値に対する値BXを変更する。BX算出部107は、値BXを加算器109へ出力する。
BY算出部108は、YMCUカウンタ104からのYMCUカウント値に基づいて、値BYを算出するものである。BY算出部108は、間引き量に基づいて、YMCUカウント値に対する値BYを変更する。BY算出部108は、値BYを加算器109へ出力する。
加算器109は、入力値を加算してアドレス値を生成するものである。具体的には、加算器109は、値PX、値PY、値BX及び値BYを加算して、アドレス値を生成する。加算器109は、アドレス生成部754の出力として、アドレス値をSDRAMインターフェイス755へ出力する。
Vカウンタ112は、カウント条件が満たされたときに、Vカウント値をインクリメント又はデクリメントするカウンタである。Vカウンタ112のカウント条件は、後で説明する通り、回転量や間引き量に応じて変更される。また、後で説明する通り、データ形式に応じて、Vカウンタ112が未使用になることもある。インクリメントするか又はデクリメントするかは、不図示のアップダウンカウンタの設定に応じて決定される。Vカウンタ112は、開始値から終了値まで順にカウントを行い、Vカウント値が終了値のときにカウントが行われると、Vカウント値はリセットされて開始値になる。この開始値及び終了値は、回転量や間引き量などに応じて変更される。Vカウンタ112には、Xカウンタ101からのXカウント値と、Yカウンタ102からのYカウント値が入力する。このXカウント値とYカウント値は、カウント条件に用いられる。Vカウンタ112は、XMCUカウンタ103、YMCUカウンタ104、BX算出部107へ、Vカウント値を出力する。
Hカウンタ113は、Hカウント値をインクリメント又はデクリメントするカウンタである。Hカウンタ113の説明は、Vカウンタ112の説明と同様であるので、説明を省略する。
===並び替えユニット75の動作1(間引きなし)===
まず、間引き処理がピクセル化ユニット73で行われない場合の並び替えユニット75の動作について説明する。以下の説明では、前述の説明と同様に、画像が16(水平方向)×24画素(垂直方向)から構成されるものとする(このため、画像データは、2(水平方向)×3(垂直方向)のブロック単位から構成される)。
<(1)444形式又は422形式の場合>
図18A〜図18Dは、データ形式が444形式又は422形式の場合におけるカウント条件の説明図である。図18Aは、回転量0°の場合のカウント条件を示している。図18Bは、回転量90°の場合のカウント条件を示している。図18Cは、回転量180°の場合のカウント条件を示している。図18Dは、回転量270°の場合のカウント条件を示している。
並び替えユニット75の指示部753は、図に示すような条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。
<<(1−1)0°回転>>
図19Aは、データ形式が444形式又は422形式の場合であって、回転量が0°の場合におけるアドレス生成部の動作の説明図である。図20Aは、回転量が0°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。図21は、回転量が0°(及び180°)の場合におけるアドレス生成部の各カウンタのカウント値とアドレス生成対象画素との関係の説明図である。以下、図14A及び図18Aも参照しながら、444形式・回転量0°の場合(間引きなしの場合)の動作を説明する。
まず、並び替えユニット75の指示部753(図16参照)は、図18Aに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。このときの各カウンタは、開始値を出力する。具体的には、Xカウンタ101はXカウント値「0」を出力し、Yカウンタ102はYカウント値「0」を出力し、XMCUカウンタ103はXMCUカウント値「0」を出力し、YMCUカウンタ104はYMCUカウント値「0」を出力する。
なお、図18Aに示すカウント条件のうち、XMCUカウンタの終了値は、回転後の画像の水平方向の画素数に基づいて決定され、具体的には、水平方向の画素数を8で割った値に1を引いた値になる。このXMCUカウンタの終了値は、回転前の画像の水平方向のブロック数(回転後の画像の水平方向のブロックの数)から1を引いた値になる。同様に、YMCUカウンタの終了値は、回転後の画像の垂直方向の画素数に基づいて決定され、具体的には、垂直方向の画素数を8で割った値に1を引いた値になる。このYMCUカウンタの終了値は、回転前の画像の垂直方向のブロック数(回転後の画像の垂直方向のブロックの数)から1を引いた値になる。仮に48×32画素の画像の場合(図7B参照)ならば、XMCUカウンタの終了値が「5」になり、YMCUカウンタの終了値が「3」になる。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う(図19Aの各算出部の枠内参照)。
PX算出部105は、入力された「Xカウント値」と、1度に書き込まれる2画素分の画素データを格納するためのアドレス数「0x8」とを乗算し、その乗算結果を値PXとして出力するように設定される。この設定により、PX算出部105は、Xカウント値「0」が入力すると値PX「0x0」を出力し、Xカウント値「1」が入力すると値PX「0x8」を出力し、Xカウント値「2」が入力すると値PX「0x10」を出力し、Xカウント値「3」が入力すると値PX「0x18」を出力するようになる。
PY算出部106は、入力された「Yカウント値」と、水平方向に並ぶブロック数と、ブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値PYとして出力するように設定される。この設定により、PY算出部106は、入力された「Yカウント値」と、水平方向に並ぶブロック数「2」と、8画素分の画素データを格納するためのアドレス数「0x20」とを乗算し、その乗算結果を値PYとして出力するようになる。
BX算出部107は、BX算出部107は、入力された「XMCUカウント値」と、ブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BXとして出力するように設定される。この設定により、BX算出部107は、入力された「XMCUカウント値」と、8画素分の画素データを格納するためのアドレス数「0x20」とを乗算し、その乗算結果を値BXとして出力するようになる。
BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数と、1ブロック分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BYとして出力するように設定される。この設定により、BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数「2」と、1ブロック分の画素データを格納するためのアドレス数「0x100」とを乗算し、その乗算結果を値BYとして出力するようになる。
なお、各算出部での乗算処理はビットシフトを利用しているので、乗算処理には時間がかからないようになっている。
上記の通り、各カウンタ等及び各算出部の設定が終わると、加算器109からはアドレス値として「0」が出力される(図20Aの上図左のアドレス値「0」を参照)。つまり、アドレス生成部754からSDRAMインターフェイス755へアドレス値「0」が出力される(図16参照)。
次に、色変換ユニット74から最初のRGBデータが入力してくる。444形式の場合(間引きなしの場合)、最初のRGBデータは、「A」のブロックの1番の画素の画素データである(図14A参照)。このRGBデータは、セレクタ751を介して、データレジスタ752に一旦格納される。このとき、データレジスタ752には2画素分の画素データが揃っていないので、データレジスタ752は書き込み要求を出さない。
更に、色変換ユニット74から次のRGBデータが入力してくる。このRGBデータは、「A」のブロックの2番の画素の画素データである(図14A参照)。このとき、データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。
最初の書き込み要求があったとき、SDRAMインターフェイス755には、「A」のブロックの1番及び2番の画素の画素データと、アドレス値「0」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、2画素分のRGBデータと、そのRGBデータを書き込むべきアドレスを示すアドレス値とを出力する。これにより、「A」のブロックの1番の画素の画素データは0番地〜3番地に格納され、2番の画素の画素データは4番地〜7番地に格納される。
1番及び2番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力される。このACK信号があると、SDRAMインターフェイス755は、アドレス生成部754へACK信号を出力する。
アドレス生成部754では、このACK信号により、Xカウンタ101がインクリメントされ、Xカウンタ101がXカウント値「1」を出力する。このとき、他のカウンタのカウンタ値は変化しない。この結果、加算器109から、アドレス値として「8」が出力される(図20Aの上図左のアドレス値「8」を参照)。
このようにして、3番及び4番の画素の画素データが8番地〜f番地に格納され、5番及び6番の画素の画素データが10番地〜17番地に5格納され、7番及び8番の画素の画素データが18番地〜1f番地に格納される。
7番及び8番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力され、ACK信号がアドレス生成部754に入力する。このときまでのXカウンタ101のXカウント値は、終了値である「3」になっている。このため、ACK信号がXカウンタ101に入力すると、Xカウント値はリセットされて開始値「0」になる。Xカウント値がリセットされると、Yカウンタ102のYカウント値がインクリメントされる(図18A及び図19A参照)。これにより、Yカウンタ102がYカウント値「1」を出力する。このとき、XMCUカウンタ103及びYMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「40」が出力される(図20Aの上図中央のアドレス値「40」を参照)。
そして、色変換ユニット74から「A」のブロックの9番の画素の画素データが入力してくる(図14A参照)。また、その次に、10番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる。データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。この書き込み要求があったとき、SDRAMインターフェイス755には、「A」のブロックの9番及び10番の画素の画素データと、アドレス値「40」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、「A」のブロックの9番の画素の画素データを40番地〜43番地に格納させ、10番の画素の画素データを44番地〜47番地に格納させる。
このようにして、「A」のブロックの9番〜16番、17番〜24番、25番〜32番、33番〜40番、41番〜48番、49番〜56番及び57番〜64番の画素データが、SDRAM90の所定のアドレスに格納される。
63番及び64番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「3」であり、Yカウンタ102のYカウント値は終了値「7」であり、XMCUカウンタ103のXMCUカウント値は「0」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値はリセットされて開始値「0」になる。Xカウント値がリセットされると、Yカウンタ102のYカウント値がリセットされて(図18A及び図19A参照)、Yカウント値は開始値「0」になる。Yカウント値がリセットされると、XMCUカウンタ103のXMCUカウント値がインクリメントされる(図18A及び図19A参照)。これにより、XMCUカウンタ103がXMCUカウント値「1」を出力する。このとき、YMCUカウンタ104のYMCUカウント値は変化しない。この結果、加算器109から、アドレス値として「20」が出力される(図20Aの中央図のアドレス値「20」を参照)。
そして、「B」のブロックの1番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる(図14A参照)。また、その次に、2番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる。データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。この書き込み要求があったとき、SDRAMインターフェイス755には、「B」のブロックの1番及び2番の画素の画素データと、アドレス値「20」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、「B」のブロックの1番の画素の画素データを20番地〜23番地に格納させ、2番の画素の画素データは24番地〜27番地に格納させる。
そして、「B」のブロックの1番〜64番の画素データが、「A」のブロックの1番〜64番の画素データとほぼ同様の手順により、SDRAM90の所定のアドレスに格納される。
「B」のブロックの63番及び64番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「3」であり、Yカウンタ102のYカウント値は終了値「7」であり、XMCUカウンタ103のXMCUカウント値は終了値「1」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値、Yカウント値及びXMCUカウント値がリセットされて(図18A及び図19A参照)開始値「0」になる。XMCUカウント値がリセットされると、YMCUカウンタ104のYMCUカウント値がインクリメントされる(図18A及び図19A参照)。これにより、YMCUカウンタ104がYMCUカウント値「1」を出力する。この結果、加算器109から、アドレス値として「200」が出力される(図20Aの下図のアドレス値「200」を参照)。
このようにして、残りの「C」〜「F」のブロックの各64画素分の画素データが、SDRAM90の所定のアドレスに格納される。この結果、図14Aに示す順に、16×24画素の画素データがSDRAM90の所定のアドレスに格納される。
<<(1−2)90°回転>>
図19Bは、データ形式が444形式又は422形式の場合であって、回転量が90°の場合におけるアドレス生成部の動作の説明図である。図20Bは、回転量が90°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。図22は、回転量が90°(及び270°)の場合におけるアドレス生成部の各カウンタのカウント値とアドレス生成対象画素との関係の説明図である。以下、図14B及び図18Bも参照しながら、444形式・回転量90°の場合(間引きなしの場合)の動作を説明する。
まず、並び替えユニット75の指示部753(図16参照)は、図18Bに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。このときの各カウンタは、開始値を出力する。具体的には、Xカウンタ101はXカウント値「3」を出力し、Yカウンタ102はYカウント値「0」を出力し、XMCUカウンタ103はXMCUカウント値「2」を出力し、YMCUカウンタ104はYMCUカウント値「0」を出力する。
なお、図18Bに示すカウント条件のうち、XMCUカウンタの開始値は、回転後の画像の水平方向の画素数に基づいて決定される。このXMCUカウンタの終了値は、回転前の画像の垂直方向のブロック数(回転後の画像の水平方向のブロックの数)から1を引いた値になる。同様に、YMCUカウンタの終了値は、回転後の画像の垂直方向の画素数に基づいて決定される。このYMCUカウンタの終了値は、回転前の画像の水平方向のブロック数(回転後の画像の垂直方向のブロックの数)から1を引いた値になる。仮に48×32画素の画像の場合(図7C参照)ならば、XMCUカウンタの開始値が「3」になり、YMCUカウンタの終了値が「5」になる。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う。なお、前述の0°回転の場合と比べると、PX算出部105の設定内容は同じであるが、PY算出部106、BX算出部107及びBY算出部108の設定内容は異なっている(図19Bの各算出部の枠内参照)。
この設定により、PX算出部105は、Xカウント値「0」が入力すると値PX「0x0」を出力し、Xカウント値「1」が入力すると値PX「0x8」を出力し、Xカウント値「2」が入力すると値PX「0x10」を出力し、Xカウント値「3」が入力すると値PX「0x18」を出力するようになる。また、PY算出部106は、入力された「Yカウント値」と、水平方向に並ぶブロック数「3」と、8画素分の画素データを格納するためのアドレス数「0x20」とを乗算し、その乗算結果を値PYとして出力するようになる。また、BX算出部107は、入力された「XMCUカウント値」と、8画素分の画素データを格納するためのアドレス数「0x20」とを乗算し、その乗算結果を値BXとして出力するようになる。また、BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数「3」と、1ブロック分の画素データを格納するためのアドレス数「0x100」とを乗算し、その乗算結果を値BYとして出力するようになる。
上記の通り、各カウンタ等及び各算出部の設定が終わると、加算器109からはアドレス値として「58」が出力される(図20Bの上図左のアドレス値「58」を参照)。つまり、アドレス生成部754からSDRAMインターフェイス755へアドレス値「58」が出力される(図16参照)。
次に、色変換ユニット74から最初のRGBデータが入力してくる。444形式の場合(間引きなしの場合)、最初のRGBデータは、「A」のブロックの1番の画素の画素データである(図14B参照)。このRGBデータは、セレクタ751を介して、データレジスタ752に一旦格納される。このとき、データレジスタ752には2画素分の画素データが揃っていないので、データレジスタ752は書き込み要求を出さない。続いて、色変換ユニット74から2番〜8番の画素データが入力してくる。このときも、データレジスタ752には、同時に書き込むべき2画素分の画素データが揃っていないので、データレジスタ752は書き込み要求を出さない。
更に、色変換ユニット74から9番の画素データが入力してくる。このとき、データレジスタ752は、書き込み要求とともに、この9番の画素データと、一旦格納していた1番の画素の画素データを、SDRAMインターフェイス755へ出力する。
最初の書き込み要求があったとき、SDRAMインターフェイス755には、「A」のブロックの9番及び1番の画素の画素データと、アドレス値「58」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、2画素分のRGBデータと、そのRGBデータを書き込むべきアドレスを示すアドレス値とを出力する。これにより、「A」のブロックの9番の画素の画素データは58番地〜5b番地に格納され、1番の画素の画素データは5c番地〜5f番地に格納される。
9番及び1番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力される。このACK信号があると、SDRAMインターフェイス755は、アドレス生成部754へACK信号を出力する。アドレス生成部754では、このACK信号により、Yカウンタ102がインクリメントされ、Yカウンタ102がYカウント値「1」を出力する。このとき、他のカウンタのカウンタ値は変化しない。この結果、加算器109から、アドレス値として「b8」が出力される(図20Bの上図左のアドレス値「b8」を参照)。
次に、色変換ユニット74から10番の画素データが入力してくる。このとき、データレジスタ752は、書き込み要求とともに、この10番の画素データと、一旦格納していた2番の画素の画素データを、SDRAMインターフェイス755へ出力する。そして、SDRAMインターフェイス755にはアドレス値「b8」が入力されているので、10番の画素の画素データはb8番地〜bb番地に格納され、2番の画素の画素データはbc番地〜bf番地に格納される。
このようにして、色変換ユニット74から11番〜16番の画素データが入力してくると、11番及び3番の画素の画素データが118番地〜11f番地に格納され、12番及び4番の画素の画素データが178番地〜17f番地に格納され、13番及び5番の画素の画素データが1d8番地〜1df番地に格納され、14番及び6番の画素の画素データが238番地〜23f番地に格納され、15番及び7番の画素の画素データが298番地〜29f番地に格納され、16番及び8番の画素の画素データが2f8番地〜2ff番地に格納される。
16番及び8番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は「3」であり、Yカウンタ102のYカウント値は終了値「7」であり、XMCUカウンタ103のXMCUカウント値は「0」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、16番及び8番の画素の画素データの書き込みが終了し、ACK信号がYカウンタ102に入力すると、Yカウント値はリセットされて開始値「0」になる。Yカウント値がリセットされると、Xカウンタ101のXカウント値がデクリメントされる(図18B及び図19B参照)。これにより、Xカウンタ101がXカウント値「2」を出力する。このとき、XMCUカウンタ103及びYMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「50」が出力される(図20Bの上図中央のアドレス値「50」を参照)。
そして、色変換ユニット74から「A」のブロックの17番〜24番の画素の画素データが入力してくる(図14B参照)。このとき、データレジスタ752には、同時に書き込むべき2画素分の画素データが揃っていないので、データレジスタ752は書き込み要求を出さない。
更に、色変換ユニット74から25番の画素の画素データが順に入力してくる。このとき、データレジスタ752は、書き込み要求とともに、この25番の画素データと、一旦格納していた17番の画素の画素データを、SDRAMインターフェイス755へ出力する。そして、SDRAMインターフェイス755にはアドレス値「50」が入力されているので、25番の画素の画素データは50番地〜53番地に格納され、17番の画素の画素データは54番地〜57番地に格納される。
このようにして、「A」のブロックの1番〜64番の画素の画素データがSDRAM90の所定のアドレスに格納される。
64番及び56番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「0」であり、Yカウンタ102のYカウント値は終了値「7」であり、XMCUカウンタ103のXMCUカウント値は「2」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、64番及び56番の画素の画素データの書き込みが終了し、ACK信号がYカウンタ102に入力すると、Yカウント値はリセットされて開始値「0」になる。Yカウント値がリセットされると、Xカウンタ101のXカウント値がリセットされて(図18B及び図19B参照)、Xカウント値は開始値「3」になる。Xカウント値がリセットされると、YMCUカウンタ104のYMCUカウント値がインクリメントされる(図18B及び図19B参照)。これにより、YMCUカウンタ104がYMCUカウント値「1」を出力する。このとき、XMCUカウンタ103のXカウント値は変化しない。この結果、加算器109から、アドレス値として「358」が出力される(図20Bの中央図のアドレス値「358」を参照)。
そして、「B」のブロックの1番〜64番の画素データが、「A」のブロックの1番〜64番の画素データとほぼ同様の手順により、SDRAM90の所定のアドレスに格納される。
「B」のブロックの64番及び56番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「0」であり、Yカウンタ102のYカウント値は終了値「7」であり、XMCUカウンタ103のXMCUカウント値は「2」であり、YMCUカウンタ104のYMCUカウント値は終了値「1」である。このため、63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Yカウント値がリセットされて開始値「0」になり、Xカウント値もリセットされて開始値「3」になり、YMCUカウント値もリセットされて開始値「0」になる(図18B及び図19B参照)。YMCUカウント値がリセットされると、XMCUカウンタ103のXMCUカウント値がデクリメントされる(図18B及び図19B参照)。これにより、XMCUカウンタ103がXMCUカウント値「1」を出力する。この結果、加算器109から、アドレス値として「38」が出力される(図20Bの下図のアドレス値「38」を参照)。
このようにして、残りの「C」〜「F」のブロックの各64画素分の画素データが、SDRAM90の所定のアドレスに格納される。この結果、図14Bに示す順に、24×16画素の画素データがSDRAM90の所定のアドレスに格納される。
<<(1−3)180°回転>>
回転量が180°の場合、指示部753は、図18Cに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。また、指示部753は、前述の0°回転の場合と同様の設定内容にて、PX算出部105、PY算出部106、BX算出部107及びBY算出部108を設定する。
図20Cは、回転量が180°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。ここでは詳しい動作については説明を省略するが、図14Cに示す順に、16×24画素の画素データがSDRAM90の所定のアドレスに格納される。
<<(1−4)270°回転>>
回転量が270°の場合、指示部753は、図18Dに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。また、指示部753は、前述の90°回転の場合と同様の設定内容にて、PX算出部105、PY算出部106、BX算出部107及びBY算出部108を設定する。
図20Dは、回転量が270°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。ここでは詳しい動作については説明を省略するが、図14Dに示す順に、24×16画素の画素データがSDRAM90の所定のアドレスに格納される。
<(2)V422形式の場合>
図23A〜図23Dは、データ形式がV422形式の場合におけるカウント条件の説明図である。図23Aは、回転量0°の場合のカウント条件を示している。図23Bは、回転量90°の場合のカウント条件を示している。図23Cは、回転量180°の場合のカウント条件を示している。図23Dは、回転量270°の場合のカウント条件を示している。
並び替えユニット75に入力されてくる画素データの順序が444形式とV422形式とでは異なるため、前述の444形式及び422形式の場合(図18A〜図18B)と比較すると、カウント条件が異なっている。なお、図中において「2UP」とあるのは、インクリメントする際に、カウンタがカウント値を2つ上げることを意味する。また、「2DOWN」とあるのは、デクリメントする際に、カウンタがカウント値を2つ下げることを意味する。
V422形式の場合、Vカウンタ112が用いられる。Vカウンタ112が出力するVカウント値は、アドレス生成対象画素が前述のY1のブロックに属するか、Y2のブロックに属するかを示す値になる(図9C参照)。アドレス生成対象画素がY1のブロックに属する場合にはVカウンタ値が「0」になり、アドレス生成対象画素がY2のブロックに属する場合にはVカウンタ値が「1」になる。
ここでは、0°回転の場合の並び替えユニット75の動作について説明する。
図24は、データ形式がV422形式の場合であって、回転量が0°の場合におけるアドレス生成部の動作の説明図である。図25は、回転量が0°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。
まず、並び替えユニット75の指示部753(図16参照)は、図23Aに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。このときの各カウンタは、開始値を出力する。
なお、図23Aに示すカウント条件のうち、XMCUカウンタの開始値は、回転後の画像の水平方向の画素数に基づいて決定される。同様に、YMCUカウンタの終了値は、回転後の画像の垂直方向の画素数に基づいて決定される。仮に48×32画素の画像の場合(図7D参照)ならば、XMCUカウンタの開始値が「5」になり、YMCUカウンタの終了値が「3」になる。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う。なお、前述の444形式(又は422形式)であって0°回転の場合(図19A参照)と比べると、PX算出部105、PY算出部106及びBX算出部107の設定内容は同じであるが、BY算出部108の設定内容は異なっている(図24の各算出部の枠内参照)。
BY算出部108は、入力された「YMCUカウント値」と「Vカウント値」とを加算し、この加算結果と、水平方向に並ぶブロック数と、1ブロック分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BYとして出力するように設定される。この設定により、BY算出部108は、入力された「YMCUカウント値」と「Vカウント値」とを加算し、この加算結果と、水平方向に並ぶブロック数「2」と、1ブロック分の画素データを格納するためのアドレス数「0x100」とを乗算し、その乗算結果を値BYとして出力するようになる。
上記の通り、各カウンタ等及び各算出部の設定が終わると、加算器109からはアドレス値として「0」が出力される(図25の上図左のアドレス値「0」を参照)。つまり、アドレス生成部754からSDRAMインターフェイス755へアドレス値「0」が出力される(図16参照)。そして、「A」のブロックの1番及び2番の画素の画素データが0番地〜7番地に格納される。
「A」のブロックの63番及び64番の画素の画素データの書き込みの際、Xカウント値は終了値「3」であり、Yカウント値は終了値「7」であり、Vカウント値は「0」であり、XMCUカウント値は「0」であり、YMCUカウント値は「0」である(このときのアドレス値は「1d8」である)。
「A」のブロックの63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値は「0」になり、Yカウント値は「0」になり、Vカウント値は「1」になる。このとき、XMCUカウンタ103及びYMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「200」が出力される(図25の中央図のアドレス値「200」を参照)。そして、「A」のブロックの64番の画素の画素データの後に入力されてくる、「C」のブロックの1番及び2番の画素の画素データが、200番地〜207番地に格納される。
「C」のブロックの63番及び64番の画素の画素データの書き込みの際、Xカウント値は終了値「3」であり、Yカウント値は終了値「7」であり、Vカウント値は終了値「1」であり、XMCUカウント値は「0」であり、YMCUカウント値は「0」である(このときのアドレス値は「3d8」である)。
「C」のブロックの63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値は「0」になり、Yカウント値は「0」になり、Vカウント値は「0」になり、XMCUカウント値は「1」になる。このとき、YMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「20」が出力される。そして、「C」のブロックの64番の画素の画素データの後に入力されてくる、「B」のブロックの1番及び2番の画素の画素データが、20番地〜27番地に格納される。
「D」のブロックの63番及び64番の画素の画素データの書き込みの際、Xカウント値は終了値「3」であり、Yカウント値は終了値「7」であり、Vカウント値は終了値「1」であり、XMCUカウント値は終了値「1」であり、YMCUカウント値は「0」である(このときのアドレス値は「3f8」である)。
「D」のブロックの63番及び64番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値は「0」になり、Yカウント値は「0」になり、Vカウント値は「0」になり、XMCUカウント値は「0」になり、YMCUカウント値は「2」になる(YMCUカウンタ104は2ずつYMCUカウント値をインクリメントする)。この結果、加算器109から、アドレス値として「400」が出力される。そして、「D」のブロックの64番の画素の画素データの後に入力されてくる、「E」のブロックの1番及び2番の画素の画素データが、400番地〜407番地に格納される。
なお、他の回転(90°、180°及び270°)の場合についても、図23B〜図23Dのカウント条件に従って、並び替えユニット75が同様に動作する。
ここでは、他の回転の場合については説明を省略する。
<(3)420形式の場合>
図26A〜図26Dは、データ形式が420形式の場合におけるカウント条件の説明図である。図26Aは、回転量0°の場合のカウント条件を示している。図26Bは、回転量90°の場合のカウント条件を示している。図26Cは、回転量180°の場合のカウント条件を示している。図26Dは、回転量270°の場合のカウント条件を示している。
並び替えユニット75に入力されてくる画素データの順序が前述のデータ形式とV422形式とでは異なるため、前述のデータ形式の場合(図18A〜図18B、図23A〜図23D)と比較すると、カウント条件が異なっている。
420形式の場合、Vカウンタ112だけでなく、Hカウンタ113も用いられる。Hカウンタ113が出力するHカウント値は、アドレス生成対象画素が前述のY1又はY3のブロックに属するか、若しくは、Y2又はY4のブロックに属するかを示す値になる(図9D参照)。アドレス生成対象画素がY1又はY3のブロックに属する場合にはHカウンタ値が「0」になり、アドレス生成対象画素がY2又はY4のブロックに属する場合にはHカウンタ値が「1」になる。また、Vカウンタ112が出力するVカウント値は、アドレス生成対象画素が前述のY1又はY2のブロックに属するか、Y3又はY4のブロックに属するかを示す値になる(図9D参照)。アドレス生成対象画素がY1又はY2のブロックに属する場合にはVカウンタ値が「0」になり、アドレス生成対象画素がY3又はY4のブロックに属する場合にはVカウンタ値が「1」になる。
ここでは、0°回転の場合の並び替えユニット75の動作について説明する。
図27は、データ形式が420形式の場合であって、回転量が0°の場合におけるアドレス生成部の動作の説明図である。図28は、データ形式が420形式の場合であって、回転量が0°の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。
まず、並び替えユニット75の指示部753(図16参照)は、図26Aに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。このときの各カウンタは、開始値を出力する。
なお、図26Aに示すカウント条件のうち、XMCUカウンタの開始値は、回転後の画像の水平方向の画素数に基づいて決定される。同様に、YMCUカウンタの終了値は、回転後の画像の垂直方向の画素数に基づいて決定される。仮に48×32画素の画像の場合(図7E参照)ならば、XMCUカウンタの開始値が「5」になり、YMCUカウンタの終了値が「3」になる。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う。なお、前述のV422形式であって0°回転の場合(図24参照)と比べると、PX算出部105、PY算出部106及びBY算出部108の設定内容は同じであるが、BX算出部107の設定内容は異なっている(図27の各算出部の枠内参照)。
BX算出部107は、入力された「XMCUカウント値」と「Hカウント値」とを加算し、この加算結果と、ブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BXとして出力するように設定される。この設定により、BX算出部107は、入力された「XMCUカウント値」と「Hカウント値」とを加算し、この加算結果と、8画素分の画素データを格納するためのアドレス数「0x20」とを乗算し、その乗算結果を値BXとして出力するようになる。
ここでは書き込み動作の説明を省略するが、このように設定を行えば、画素データがSDRAM90の所定のアドレスに格納されるようになる。
なお、他の回転(90°、180°及び270°)の場合についても、図26B〜図26Dのカウント条件に従って、並び替えユニット75が同様に動作する。
ここでは、他の回転の場合については説明を省略する。
===並び替えユニット75の動作2(間引き処理時)===
次に、間引き処理がピクセル化ユニット73で行われた場合の並び替えユニット75の動作について説明する。なお、間引き前の元画像は、16(水平方向)×24画素(垂直方向)から構成されるものとする(このため、間引き前の元画像データは、2(水平方向)×3(垂直方向)のブロック単位から構成される)。
以下の説明では、データ形式が444形式(及び422形式)であって回転量が0°の場合について説明する。
図29A〜図29Dは、データ形式が444形式(及び422形式)であって回転量が0°の場合におけるカウント条件の説明図である。図29Aは、間引き量がない場合のカウント条件(参考例、図18Aと同じ)を示している。図29Bは、間引き量が1/2の場合のカウント条件を示している。図29Cは、間引き量が1/4の場合のカウント条件を示している。図29Dは、間引き量が1/8の場合のカウント条件を示している。
並び替えユニット75の指示部753は、図に示すような条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。
<1/2間引き処理>
444形式における1/2間引き処理の場合、既に説明した通り、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、水平方向4画素×垂直方向4画素のYUVデータを出力する(図10A参照)。このため、444形式における1/2間引き処理の場合、並び替えユニット75へは、まず、「A」のブロックの1番の画素の画素データ(RGBデータ)が入力し、続いて、3番→5番→7番→17番→・・・→53番→55番の順に各画素の画素データが入力する。そして、444形式における1/2間引き処理の場合、「A」のブロックの各画素データが並び替えユニット75へ入力した後、続いて「B」のブロックの各画素データが、「A」のブロックの場合と同様の順に、並び替えユニット75へ入力する。
図30Aは、間引き量が1/2の場合におけるアドレス生成部の動作の説明図である。図31Aは、間引き量が1/2の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。図32Aは、間引き量が1/2の場合におけるアドレス生成部の各カウンタのカウント値とアドレス生成対象画素との関係の説明図である。以下、図29Bも参照しながら、444形式・回転量0°における1/2間引き処理の動作を説明する。
まず、並び替えユニット75の指示部753(図16参照)は、図29Bに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。このときの各カウンタは、開始値を出力する。具体的には、Xカウンタ101はXカウント値「0」を出力し、Yカウンタ102はYカウント値「0」を出力し、XMCUカウンタ103はXMCUカウント値「0」を出力し、YMCUカウンタ104はYMCUカウント値「0」を出力する。
なお、図29Bに示すカウント条件のうち、XMCUカウンタの終了値は、間引き処理後の画像の水平方向の画素数に基づいて決定される。このXMCUカウンタの終了値は、画像の水平方向のブロック数から1を引いた値になる。同様に、YMCUカウンタの終了値は、間引き処理後の画像の垂直方向の画素数に基づいて決定される。このYMCUカウンタの終了値は、画像の垂直方向のブロック数から1を引いた値になる。仮に48×32画素の画像の場合(図7B参照)ならば、XMCUカウンタの終了値が「5」になり、YMCUカウンタの終了値が「3」になる。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う(図30Aの各算出部の枠内参照)。
PX算出部105は、入力された「Xカウント値」と、1度に書き込まれる2画素分の画素データを格納するためのアドレス数「0x8」とを乗算し、その乗算結果を値PXとして出力するように設定される。この設定により、PX算出部105は、Xカウント値「0」が入力すると値PX「0x0」を出力し、Xカウント値「1」が入力すると値PX「0x8」を出力するようになる(なお、PX算出部に入力するXカウント値は0又は1である)。
PY算出部106は、入力された「Yカウント値」と、水平方向に並ぶブロック数と、間引き後のブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値PYとして出力するように設定される。この設定により、PY算出部106は、入力された「Yカウント値」と、間引き後の水平方向に並ぶブロック数「2」と、4画素分の画素データを格納するためのアドレス数「0x10」とを乗算し、その乗算結果を値PYとして出力するようになる。
BX算出部107は、BX算出部107は、入力された「XMCUカウント値」と、間引き後のブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BXとして出力するように設定される。この設定により、BX算出部107は、入力された「XMCUカウント値」と、4画素分の画素データを格納するためのアドレス数「0x10」とを乗算し、その乗算結果を値BXとして出力するようになる。
BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数と、間引き後の1ブロック分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値BYとして出力するように設定される。この設定により、BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数「2」と、間引き後の1ブロック分の画素データを格納するためのアドレス数「0x40」とを乗算し、その乗算結果を値BYとして出力するようになる。
上記の通り、各カウンタ等及び各算出部の設定が終わると、加算器109からはアドレス値として「0」が出力される(図31Aの上図左のアドレス値「0」を参照)。つまり、アドレス生成部754からSDRAMインターフェイス755へアドレス値「0」が出力される(図16参照)。
次に、色変換ユニット74から最初のRGBデータが入力してくる。データ形式が444形式であって間引き量が1/2の場合、最初のRGBデータは、「A」のブロックの1番の画素の画素データである(図10A参照)。このRGBデータは、セレクタ751を介して、データレジスタ752に一旦格納される。このとき、データレジスタ752には2画素分の画素データが揃っていないので、データレジスタ752は書き込み要求を出さない。
更に、色変換ユニット74から次のRGBデータが入力してくる。このRGBデータは、「A」のブロックの3番の画素の画素データである(図10A参照)。このとき、データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。
最初の書き込み要求があったとき、SDRAMインターフェイス755には、「A」のブロックの1番及び3番の画素の画素データと、アドレス値「0」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、2画素分のRGBデータと、そのRGBデータを書き込むべきアドレスを示すアドレス値とを出力する。これにより、「A」のブロックの1番の画素の画素データは0番地〜3番地に格納され、3番の画素の画素データは4番地〜7番地に格納される。
1番及び3番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力される。このACK信号があると、SDRAMインターフェイス755は、アドレス生成部754へACK信号を出力する。
アドレス生成部754では、このACK信号により、Xカウンタ101がインクリメントされ、Xカウンタ101がXカウント値「1」を出力する。このとき、他のカウンタのカウンタ値は変化しない。この結果、加算器109から、アドレス値として「8」が出力される(図31Aの上図左のアドレス値「8」を参照)。そして、「A」のブロックの5番及び7番の画素の画素データが8番地〜f番地に格納される。
5番及び7番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力され、ACK信号がアドレス生成部754に入力する。このときまでのXカウンタ101のXカウント値は、終了値である「1」になっている。このため、ACK信号がXカウンタ101に入力すると、Xカウント値はリセットされて開始値「0」になる。Xカウント値がリセットされると、Yカウンタ102のYカウント値がインクリメントされる(図29B及び図31A参照)。これにより、Yカウンタ102がYカウント値「1」を出力する。このとき、XMCUカウンタ103及びYMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「20」が出力される(図31Aの中央図のアドレス値「20」を参照)。
そして、色変換ユニット74から「A」のブロックの17番の画素の画素データが入力してくる(図10A参照)。また、その次に、19番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる。データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。この書き込み要求があったとき、SDRAMインターフェイス755には、「A」のブロックの17番及び19番の画素の画素データと、アドレス値「20」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、「A」のブロックの17番の画素の画素データを20番地〜23番地に格納させ、19番の画素の画素データを24番地〜27番地に格納させる。
このようにして、「A」のブロックの4画素(水平方向)×4画素(垂直方向)の画素データが、SDRAM90の所定のアドレスに格納される。
53番及び55番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「1」であり、Yカウンタ102のYカウント値は終了値「3」であり、XMCUカウンタ103のXMCUカウント値は「0」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、53番及び55番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値はリセットされて開始値「0」になる。Xカウント値がリセットされると、Yカウンタ102のYカウント値がリセットされて(図29B及び図30A参照)、Yカウント値は開始値「0」になる。Yカウント値がリセットされると、XMCUカウンタ103のXMCUカウント値がインクリメントされる(図29B及び図30A参照)。これにより、XMCUカウンタ103がXMCUカウント値「1」を出力する。このとき、YMCUカウンタ104のYMCUカウント値は変化しない。この結果、加算器109から、アドレス値として「10」が出力される(図31Aの中央図のアドレス値「10」を参照)。
そして、「B」のブロックの1番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる(図10A参照)。また、その次に、3番の画素の画素データが色変換ユニット74から並び替えユニット75に入力してくる。データレジスタ752は、書き込み要求とともに、2画素分のRGBデータをSDRAMインターフェイス755へ出力する。この書き込み要求があったとき、SDRAMインターフェイス755には、「B」のブロックの1番及び3番の画素の画素データと、アドレス値「10」が入力している。SDRAMインターフェイス755は、SDRAMコントローラ86に対して、「B」のブロックの1番の画素の画素データを10番地〜13番地に格納させ、3番の画素の画素データは14番地〜17番地に格納させる。
そして、「B」のブロックの4画素(水平方向)×4画素(垂直方向)の画素データが、「A」のブロックの4画素(水平方向)×4画素(垂直方向)の画素データとほぼ同様の手順により、SDRAM90の所定のアドレスに格納される。
「B」のブロックの53番及び55番の画素の画素データの書き込みの際、Xカウンタ101のXカウント値は終了値「1」であり、Yカウンタ102のYカウント値は終了値「3」であり、XMCUカウンタ103のXMCUカウント値は終了値「1」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、53番及び55番の画素の画素データの書き込みが終了し、ACK信号がXカウンタ101に入力すると、Xカウント値、Yカウント値及びXMCUカウント値がリセットされて(図29B及び図31A参照)開始値「0」になる。XMCUカウント値がリセットされると、YMCUカウンタ104のYMCUカウント値がインクリメントされる(図29B及び図31A参照)。これにより、YMCUカウンタ104がYMCUカウント値「1」を出力する。この結果、加算器109から、アドレス値として「40」が出力される(図31Aの下図のアドレス値「80」を参照)。
このようにして、残りの「C」〜「F」のブロックの各4画素(水平方向)×4画素(垂直方向)の画素データが、SDRAM90の所定のアドレスに格納される。この結果、図32Aに示すように、8×12画素の画素データがSDRAM90の所定のアドレスに格納される。
<1/4間引き処理>
444形式における1/4間引き処理の場合、既に説明した通り、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、水平方向2画素×垂直方向2画素のYUVデータを出力する(図10B参照)。このため、444形式における1/4間引き処理の場合、並び替えユニット75へは、まず、「A」のブロックの1番の画素の画素データ(RGBデータ)が入力し、続いて、5番→33番→37番の順に各画素の画素データが入力する。そして、444形式における1/4間引き処理の場合、「A」のブロックの各画素データが並び替えユニット75へ入力した後、続いて「B」のブロックの各画素データが、「A」のブロックの場合と同様の順に、並び替えユニット75へ入力する。
図30Bは、間引き量が1/4の場合におけるアドレス生成部の動作の説明図である。図31Bは、間引き量が1/4の場合におけるアドレス生成部の各カウンタのカウント値のタイミングチャートである。図32Bは、間引き量が1/4の場合におけるアドレス生成部の各カウンタのカウント値とアドレス生成対象画素との関係の説明図である。以下、図29Cも参照しながら、444形式・回転量0°における1/4間引き処理の動作を説明する。
まず、並び替えユニット75の指示部753(図16参照)は、図29Bに示す条件にて、各カウンタの開始値及び終了値、アップダウンセレクタ110A〜110Dによる各カウンタのカウント方向(インクリメント又はデクリメント)、及び各カウンタのカウント条件などを設定する。なお、1/4間引き処理の場合、Xカウンタ101は、常に「0」が出力されるように設定される。
また、指示部753は、PX算出部105、PY算出部106、BX算出部107及びBY算出部108の設定を行う(図30Bの各算出部の枠内参照)。なお、前述の1/2間引きの場合と比べると、間引き量に応じて各算出部の設定内容は異なっている
この設定により、PX算出部105は、常に「0x0」の値PXを出力する(なお、PX算出部に入力するXカウント値は常に0である)。また、PY算出部106は、入力された「Yカウント値」と、水平方向に並ぶブロック数「2」と、2画素分の画素データ(間引き後のブロックの水平方向1行分の画素データ)を格納するためのアドレス数「0x8」とを乗算し、その乗算結果を値PYとして出力するようになる(なお、PY算出部に入力するYカウント値は0又は1である)。また、BX算出部107は、入力された「XMCUカウント値」と、2画素分の画素データ(間引き後のブロックの水平方向1行分の画素データ)を格納するためのアドレス数「0x8」とを乗算し、その乗算結果を値BXとして出力するようになる。また、BY算出部108は、入力された「YMCUカウント値」と、水平方向に並ぶブロック数「2」と、間引き後の1ブロック分の画素データを格納するためのアドレス数「0x10」とを乗算し、その乗算結果を値BYとして出力するようになる。
上記の通り、各カウンタ等及び各算出部の設定が終わると、加算器109からはアドレス値として「0」が出力される(図31Bの上図左のアドレス値「0」を参照)。つまり、アドレス生成部754からSDRAMインターフェイス755へアドレス値「0」が出力される(図16参照)。そして、「A」のブロックの1番及び5番の画素の画素データが0番地〜7番地に格納される。
1番及び5番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力される。このACK信号があると、SDRAMインターフェイス755は、アドレス生成部754へACK信号を出力する。
アドレス生成部754では、このACK信号により、Yカウンタ102がインクリメントされ、Yカウンタ102がYカウント値「1」を出力する。このとき、他のカウンタのカウンタ値は変化しない。この結果、加算器109から、アドレス値として「10」が出力される(図31Bの上図左のアドレス値「10」を参照)。そして、「A」のブロックの33番及び37番の画素の画素データが10番地〜17番地に格納される。
このようにして、「A」のブロックの2画素(水平方向)×2画素(垂直方向)の画素データが、SDRAM90の所定のアドレスに格納される。
33番及び37番の画素の画素データの書き込みが終了すると、SDRAMコントローラ86からSDRAMインターフェイス755へACK信号が出力され、ACK信号がアドレス生成部754に入力する。このときまでのYカウンタ102のYカウント値は、終了値である「1」になっている。このため、ACK信号が入力すると、Yカウント値はリセットされて開始値「0」になる。Yカウント値がリセットされると、XMCUカウンタ103のXMCUカウント値がインクリメントされる(図29C及び図31B参照)。これにより、XMCUカウンタ103がXMCUカウント値「1」を出力する。このとき、Xカウンタ101及びYMCUカウンタ104のカウント値は変化しない。この結果、加算器109から、アドレス値として「8」が出力される(図31Bの中央図のアドレス値「8」を参照)。そして、「B」のブロックの1番及び5番の画素の画素データが8番地〜f番地に格納される。また、「B」のブロックの2画素(水平方向)×2画素(垂直方向)の画素データが、「A」のブロックの2画素(水平方向)×2画素(垂直方向)の画素データとほぼ同様の手順により、SDRAM90の所定のアドレスに格納される。
「B」のブロックの33番及び37番の画素の画素データの書き込みの際、Yカウンタ102のYカウント値は終了値「1」であり、XMCUカウンタ103のXMCUカウント値は終了値「1」であり、YMCUカウンタ104のYMCUカウント値は「0」である。このため、33番及び37番の画素の画素データの書き込みが終了し、ACK信号がに入力すると、Yカウント値及びXMCUカウント値がリセットされて(図29C及び図31B参照)開始値「0」になる。XMCUカウント値がリセットされると、YMCUカウンタ104のYMCUカウント値がインクリメントされる(図29C及び図31B参照)。これにより、YMCUカウンタ104がYMCUカウント値「1」を出力する。この結果、加算器109から、アドレス値として「20」が出力される(図31Bの下図のアドレス値「20」を参照)。
このようにして、残りの「C」〜「F」のブロックの各2画素(水平方向)×2画素(垂直方向)の画素データが、SDRAM90の所定のアドレスに格納される。この結果、図32Bに示すように、4×6画素の画素データがSDRAM90の所定のアドレスに格納される。
<1/8間引き処理>
444形式における1/8間引き処理の場合、既に説明した通り、ピクセル化ユニット73は、8×8画素のブロック単位のデータの中から、1番の画素のYUVデータを出力する(図10C参照)。このため、444形式における1/8間引き処理の場合、並び替えユニット75へは、まず、「A」のブロックの1番の画素の画素データ(RGBデータ)が入力し、続いて、「B」のブロックの1番の画素の画素データが入力する。そして、444形式における1/8間引き処理の場合、各ブロックの1番の画素の画素データが順に、並び替えユニット75へ入力する。
図30Cは、間引き量が1/8の場合におけるアドレス生成部の動作の説明図である。
ここでは、詳しい説明は省略するが、図29D及び図30Cに示すように、間引き量に応じて各カウンタや各算出部等を設定することによって、画素データがSDRAM90の所定のアドレスに格納される。なお、間引き量が1/8の場合、1度に書き込まれる2画素分の画素データは、それぞれ別のブロックの画素データである。例えば、最初の書き込みの際には、「A」のブロックの1番の画素の画素データと、「B」のブロックの1番の画素の画素データとが、一緒にSDRAM90へ書き込まれる。
<他の回転量について>
回転量が0°の場合について説明したが、他の回転量の場合でも良い。ここでは、回転量が90°の場合について説明する。
図33A〜図33Dは、データ形式が444形式(及び422形式)であって回転量が90°の場合におけるカウント条件の説明図である。図33Aは、間引き量がない場合のカウント条件(参考例、図18Bと同じ)を示している。図33Bは、間引き量が1/2の場合のカウント条件を示している。図33Cは、間引き量が1/4の場合のカウント条件を示している。図33Dは、間引き量が1/8の場合のカウント条件を示している。
ここでは、詳しい説明は省略するが、このように回転量及び間引き量に応じて各カウンタや各算出部等を設定することによって、画素データがSDRAM90の所定のアドレスに格納される。例えば間引き量が1/2の場合において回転量が90°の場合、12×8画素の画素データがSDRAM90の所定のアドレスに格納される。
なお、回転量が180°及び270°の場合についての説明は省略するが、同様に回転量及び間引き量に応じて各カウンタや各算出部等を設定することによって、画素データがSDRAM90の所定のアドレスに格納される。
<他のデータ形式について>
データ形式が444形式及び422形式について説明したが、他のデータ形式の場合でも良い。ここでは、V422形式の場合について説明する。
図34A〜図34Dは、データ形式がV422形式であって回転量が0°の場合におけるカウント条件の説明図である。図34Aは、間引き量がない場合のカウント条件(参考例、図18Bと同じ)を示している。図34Bは、間引き量が1/2の場合のカウント条件を示している。図34Cは、間引き量が1/4の場合のカウント条件を示している。図34Dは、間引き量が1/8の場合のカウント条件を示している。
ここでは、詳しい説明は省略するが、このようにデータ形式及び間引き量に応じて各カウンタや各算出部等を設定することによって、画素データがSDRAM90の所定のアドレスに格納される。なお、データ形式が420形式の場合についての説明は省略するが、同様にデータ形式及び間引き量に応じて各カウンタや各算出部等を設定することによって、画素データがSDRAM90の所定のアドレスに格納される。
===その他の実施の形態===
一実施形態としての複合装置等を説明したが、上記の実施形態は、本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物が含まれることは言うまでもない。
前述の実施形態では、YUV色空間のYUVデータを対象としているが、これに限られるものではない。例えば、YUVデータの代わりにYIQ色空間のYIQデータを対象としても良い。
前述の実施形態では、1度に2画素分の画素データをSDRAM90へ書き込むようにSDRAMコントローラ86が構成されているが、これに限られるものではない。例えば、1画素分の画素データずつSDRAM90へ書き込みを行っても良い。
===まとめ===
(1)前述の実施形態において、並び替えユニット75は、画素に対応する画素データがブロックの順に入力するユニットであり、アドレスを生成するユニットであり、生成したアドレスに、入力した画素データをSDRAM90(メモリに相当)に格納するユニットである。なお、並び替えユニット75は、入力する画素データに対応する画素と、SDRAM90へ格納後の画素データの示す画像との位置関係に応じたアドレスを生成し、生成したアドレスにその画素データを格納する。例えば、回転量が0°の場合、「B」のブロックの1番の画素データを、画像の上略中央の位置に対応するアドレス(20番地)に格納する(図15A参照)。
このような並び替えユニット75の機能をソフトウェアで実現しようとすると、アドレス生成処理に時間がかかってしまう。そこで、ハードウェアによって実現することが考えられる。
そこで、本実施形態では、並び替えユニット75は、ハードウェアによる構成として、Xカウンタ101(第1カウンタに相当)と、Yカウンタ102(第2カウンタに相当)とを備え、Xカウンタ101のXカウント値(第1カウント値に相当)及びYカウンタ102のYカウント値(第2カウント値に相当)に基づいてアドレスを生成する。
ところで、元の画像データを間引いて、間引き後の画像データを構成する画素データが入力してくる場合、間引き量に応じてアドレスを生成する必要がある。例えば、間引き量が1/2の場合、「B」のブロックの1番の画素データを、間引き後の画像の上略中央の位置に対応するアドレス(10番地)に格納する必要がある。仮に、間引き量が0のためのアドレス生成部と、間引き量が1/2のためのアドレス生成部とを別々に設けるとすると、ハードウェアの回路規模が増大する。
そこで、本実施形態では、間引き量に応じて、Xカウンタ101の開始値(第1開始値に相当)及び終了値(第1終了値に相当)の少なくとも一方を変更し、Yカウンタ102の開始値(第2開始値に相当)及び終了値(第2終了値に相当)の少なくとも一方を変更する。
例えばデータ形式が444形式であって回転量が0°の場合、Xカウンタ101の終了値は、間引きがなければ「3」になるが、1/2間引きであれば「1」に変更される(図29A及び図29B参照)。また、Yカウンタ102の終了値は、間引きがなければ「7」になるが、1/2間引きであれば「3」に変更される。(なお、例えばデータ形式が444形式であって回転量が90°の場合、Xカウンタ101の開始値は、間引きがなければ「3」になるが、1/2間引きであれば「1」に変更される(図29A及び図29B参照)。また、Yカウンタ102の終了値は、間引きがなければ「7」になるが、1/2間引きであれば「3」に変更される。)
本実施形態では、このようにXカウンタ101とYカウンタ102とを有効利用することによって、回路規模を縮小している。
(2)前述の実施形態では、並び替えユニット75は、XMCUカウンタ103(第3カウンタに相当)及びYMCUカウンタ104(第4カウンタに相当)を備えている。そして、Yカウント値がリセットされたときにXMCUカウント値(第3カウント値に相当)をカウントし、XMCUカウント値がリセットされたときにYMCUカウント値(第4カウント値に相当)をカウントする(例えば図18A及び図19A参照)。
このようにすれば、並び替えユニット75は、Xカウント値、Yカウント値、XMCUカウント値及びYMCUカウント値に基づいて、所定のアドレスを生成することができる。
(3)前述の実施形態では、並び替えユニット75は、例えば回転量が0°の場合(第1状態に相当する場合)、Yカウント値がリセットされたときにXMCUカウント値をカウントし、XMCUカウント値がリセットされたときにYMCUカウント値をカウントする(例えば図18A及び図19A参照)。一方、回転量が90°の場合(第2状態に相当する場合)、Xカウント値がリセットされたときにYMCUカウント値をカウントし、YMCUカウント値がリセットされたときにXMCUカウント値をカウントする(例えば図18B及び図19B参照)。
このようにすれば、回転量に関わらず、並び替えユニット75は、Xカウント値、Yカウント値、XMCUカウント値及びYMCUカウント値に基づいて、所定のアドレスを生成することができる。
(4)前述の実施形態では、SDRAM90への2画素分の画素データの書き込み(格納)がある毎にACK信号が入力し、このACK信号がある毎に、回転量が0°ならばXカウンタ101がXカウント値をカウント(インクリメント又はデクリメント)し、回転量が90°ならばYカウンタ102がYカウント値をカウントする。このようにすれば、並び替えユニット75は、入力する画素データに追従するように、その画素データに対応するアドレスを生成することができる。
(5)前述の実施形態では、図21、図32A及び図32Bに示す通り、間引き量に関わらず、Xカウント値は、ブロック内におけるアドレス生成対象画素(メモリに格納する画素データに対応する画素に相当)の水平方向位置を示す値になる。同様に、Yカウント値は、ブロック内におけるアドレス生成対象画素の垂直方向位置を示す値になる。また同様に、XMCUカウント値は、アドレス生成対象画素のブロックの画像データ内における水平方向位置を示す値になる。また同様に、YMCUカウント値は、アドレス生成対象画素のブロックの画像データ内における垂直方向位置を示す値になる。
このため、間引き量に関わらず、並び替えユニット75は、Xカウント値、Yカウント値、XMCUカウント値及びYMCUカウント値に基づいて、所定のアドレスを生成することができる。
(6)前述の実施形態では、PX算出部105がXカウント値に基づいて値PX(第1アドレス値に相当)を算出し、PY算出部106がYカウント値に基づいて値PY(第2アドレス値に相当)を算出し、BX算出部107がXMCUカウント値に基づいて値BX(第3アドレス値に相当)を算出し、BY算出部108がYMCUカウント値に基づいて値BY(第4アドレス値に相当)を算出する。そして、並び替えユニットは、値PX、値PY、値BX及び値BYを加算することによって、アドレスを生成する。これにより、単純な加算を行うだけでアドレスを生成することができ、アドレス生成処理を早く行うことができる。
(7)前述の実施形態では、PX算出部105は、Xカウント値と、1度に書き込まれる2画素分の画素データを格納するためのアドレス数「0x8」とを乗算し、その乗算結果を値PXとして出力するように設定される。また、PY算出部106は、Yカウント値と、水平方向に並ぶブロック数と、ブロックの水平方向1行分の画素データを格納するためのアドレス数とを乗算し、その乗算結果を値PYとして出力するように設定される。BX算出部107は、BX算出部107は、XMCUカウント値と、ブロックの水平方向1行分の画素データを格納するためのアドレス数(1行分アドレス数に相当)とを乗算し、その乗算結果を値BXとして出力するように設定される。BY算出部108は、YMCUカウント値と、水平方向に並ぶブロック数と、1ブロック分の画素データを格納するためのアドレス数(1ブロックアドレス数に相当)とを乗算し、その乗算結果を値BYとして出力するように設定される。
これにより、単純な加算を行うだけでアドレスを生成することができ、アドレス生成処理を早く行うことができる。
(8)前述の実施形態では、間引き量に応じて、各算出部の設定が変更される(例えば図19A及び図30A〜図30C参照)。このようにすれば、間引き量に関わらず、並び替えユニット75は、所望のアドレスを生成することができる。
(9)なお、前述の実施形態の全ての構成要素を備えれば、全ての効果を奏することができる。但し、全ての構成要素を必ずしも備える必要はない。