(57)【要約】      （修正有）【課題】画像処理用の記述子ベースストリームプロセッサおよびそれに関連する方法を提供する。【解決手段】画像フレームに関連するカーネルパターンを定義すること、定義されたカーネルパターンを用いて画像フレームを処理することを含む。さらに、定義されたカーネルパターンに基づくカーネルスイッチルックアップテーブルを生成することを含む。ストリームコントローラは、定義されたカーネルパターンおよびカーネルスイッチルックアップテーブルに従って、画像フレームに対してカーネルを実行することを指示する動作が可能である。【選択図】図２
2014142939.tif 000002
【特許請求の範囲】
【請求項１】
画像フレームに関連するカーネルパターンを定義すること、および
前記定義されたカーネルパターンを用いて、前記画像フレームを処理することを含む、方法。
【請求項２】
画像フレームに関連するカーネルパターンを定義することが、
前記画像フレームに関連するカーネルブロックを定義すること、
前記画像フレームに関連するカーネル記述子を定義すること、および
前記画像フレームに関連するリンクテーブルを定義することを含む、
請求項１に記載の方法。
【請求項３】
定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成することをさらに含む、請求項１に記載の方法。
【請求項４】
画像フレームに関連するカーネルブロックを定義することが、処理中に、それに対して実施される同一のカーネルを有する、画像フレームのピクセルをグループ化することを含む、請求項２に記載の方法。
【請求項５】
画像フレームに関連するカーネル記述子を定義することが、
前記画像プレームの画像フレーム部分を定義すること、および
前記画像フレーム部分に関連する、垂直記述子および水平記述子を定義すること
を含む、請求項２に記載の方法。
【請求項６】
水平記述子を定義することが、水平方向において、
画像フレーム部分に関連するカーネルを定義すること、
前記画像フレーム部分に関連するカーネル幅を定義すること、および
前記画像フレーム部分に関連するループ特性を定義することを含む、請求項５に記載の方法。
【請求項７】
垂直記述子を定義することが、垂直方向において、
画像フレーム部分に関連するリンクテーブルを定義すること
前記画像フレーム部分に関連するカーネル高さを定義すること、および
前記画像フレーム部分に関連するループ特性を定義することを含む、請求項５に記載の方法。
【請求項８】
画像フレームに関連するリンクテーブルを定義することが、水平リンクテーブルおよび垂直リンクテーブルを定義することを含む、請求項２に記載の方法。
【請求項９】
水平リンクテーブルを定義することが、水平方向におけるカーネル順序を定義することを含む、請求項８に記載の方法。
【請求項１０】
垂直リンクテーブルを定義することが、垂直方向におけるカーネル順序を定義することを含む、請求項８に記載の方法。
【請求項１１】
定義されたカーネルパターンを用いて画像フレームを処理することが、
前記画像フレームに関連する垂直リンクテーブルをフェッチすること、
前記垂直リンクテーブルと関連する垂直記述子をフェッチすること、
前記垂直記述子と関連する水平リンクテーブルをフェッチすること、
前記水平リンクテーブルに関連する水平記述子をフェッチすること、および
前記水平記述子に関連するカーネルをフェッチすること
を含む、請求項１に記載の方法。
【請求項１２】
処理することが、
カーネルを用いて、垂直記述子および水平記述子に関連する画像フレーム部分を処理することをさらに含む、請求項１１に記載の方法。
【請求項１３】
プロセッサの１つまたは２つ以上のプロセッサによって実行されるときに、方法を実行させる、命令がコード化されている非一時的コンピュータ可読媒体であって、前記方法は、
画像フレームに関連するカーネルパターンを定義すること、および
定義されたカーネルパターンを使用して画像フレームを処理すること
を含む、前記非一時的コンピュータ可読媒体。
【請求項１４】
画像フレームに関連するカーネルパターンを定義することが、
前記画像フレームに関連するカーネルブロックを定義すること、
前記画像フレームに関連するカーネル記述子を定義すること、および
前記画像フレームに関連するリンクテーブルを定義することを含む、請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１５】
方法が、定義されたカーネルパターンに基づいてカーネルスイッチルックアップテーブルを生成することをさらに含む、請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１６】
処理することが、
画像フレームに関連する垂直リンクテーブルをフェッチすること、
前記垂直リンクテーブルに関連する垂直記述子をフェッチすること、
前記垂直記述子に関連する水平リンクテーブルをフェッチすること、
前記水平リンクテーブルに関連する水平記述子をフェッチすること、
前記水平記述子に関連するカーネルをフェッチすること、および
前記カーネルを用いて画像フレームを処理すること
を含む、請求項１３に記載の非一時的コンピュータ可読媒体。
【請求項１７】
画像フレームに関連する定義されたカーネルパターンを記憶するカーネル記憶メモリ、および
前記定義されたカーネルパターンに関連するカーネルスイッチルックアップテーブルを記憶するカーネルルックアップテーブル（ＬＵＴ）メモリ
を含む、ストリームコントローラを含む装置であって、
前記ストリームコントローラは、前記定義されたカーネルパターンおよび前記カーネルスイッチルックアップテーブルによる、画像フレームに対するカーネルの実行を指示する動作が可能である、前記装置。
【請求項１８】
ストリームコントローラが、画像フレームに対して実施されるカーネルを記憶する、少なくとも２つのカーネルバッファをさらに含む、請求項１７に記載の装置。
【請求項１９】
ストリーム処理ユニットを含む画像プロセッサをさらに含み、ストリームコントローラが、ストリーム処理ユニットに、定義されたカーネルパターンに従って、画像フレームに対してカーネルを実行するように指示する動作が可能である、請求項１７に記載の装置。
【請求項２０】
定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成する動作が可能なコンパイラをさらに含む、請求項１７に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般的には、画像処理用のストリームプロセッサに関し、より具体的には、ストリームプロセッサの画像処理用のストリームコントローラ、関連するコンパイラ、および関連する方法に関する。
【背景技術】
【０００２】
近年、ディジタルカメラおよび画像センサデバイス（ＣＣＤ／ＣＭＯＳ画像センサなど）が、広く普及している。画像センサデバイスにおける画像処理を改善するために、様々な努力が払われている。例えば、カメラは、通常、アナログ／ディジタルフロントエンド、およびディジタルバックエンドを含む。カメラ性能を改善するために、例えばキャノン株式会社（Cannon, Inc.）製のＤＩＧＩＣ５のような、複雑なディジタルバックエンドプロセッサが開発されている。これらのバックエンドプロセッサは、例えば、ノイズキャンセレーション、シェーディング補正、顔検出、固定パターンノイズ補正、手ブレ防止（anti-shaking）、高ＩＳＯ、その他の所望機能、またはそれらの組合せなどの、様々なカメラ機能を提供することができる。バックエンドプロセッサは強力ではあるが、開発サイクルが長く、コストが高いとともに、帯域幅も、ディジタルバックエンドプロセッサによって実行される機能を制限する。したがって、バックエンドプロセッサの作業負荷を低減するために、一部の機能は、ディジタルフロントエンドプロセッサに移されている。例えば、固定パターンノイズ除去回路やリオーダ回路（reorder circuit）などの、固定回路をディジタルフロントエンドプロセッサに組み込むことができる。そのような回路は、強力ではあるが、ディジタルフロントエンドプロセッサを再設計することを必要とし、これには時間を要し、またコスト効率も低い。
【０００３】
プログラマブルストリーム画像プロセッサは、異なるカメラアプリケーションを取り扱うための、高効率で低遅延（low latency）の解決策を提供する。例えば、様々なプログラミングを実装して、ストリームプロセッサが、固定パターンノイズ補正、リオーダ機能、およびその他所望機能を処理できることを確実にすることができる。ストリームコントローラは、画像を処理するときに、データ処理フローおよびカーネルスイッチングを制御するので、プログラマブルストリームプロセッサの重要部分である。既存のプログラマブルストリームプロセッサおよび関連するストリームコントローラは、その意図する目的に対して概して適当であったが、それらは、すべての点において完全に満足できるものではなかった。
【発明の概要】
【０００４】
本開示は、任意好適な環境において実装される、様々なストリームプロセッサ態様を提供する。一例示用態様は、画像フレームを処理するための方法を提供する。いくつかの態様は、画像フレームに関連するカーネルパターンを定義し、定義されたカーネルパターンを用いて画像フレームを処理すること含む。様々な実装形態において、画像フレームに関連するカーネルパターンを定義することは、画像フレームに関連するカーネルブロックを定義すること、画像フレームに関連するカーネル記述子を定義すること、および画像フレームに関連するリンクテーブルを定義することを含む。この方法には、定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成することをさらに含めてもよい。様々な実装形態において、画像フレームに関連するカーネルブロックを定義することは、処理中にそれに対して実施される同一のカーネルを有する、画像フレームのピクセルをグループ化することを含む。
【０００５】
様々な実装形態において、画像フレームに関連するカーネル記述子を定義することは、画像フレームの画像フレーム部分を定義すること、およびその画像フレーム部分に関連する、垂直記述子および水平記述子を定義することを含む。水平記述子は、水平方向において、画像フレーム部分に関連するカーネルを定義し、画像フレーム部分に関連するカーネル幅を定義し、かつ／または画像フレーム部分に関連するループ特性を定義することができる。
【０００６】
垂直記述子は、垂直方向において、画像フレーム部分に関連するリンクテーブルを定義し、画像フレーム部分に関連するカーネル高さを定義し、かつ／または画像フレーム部分に関連するループ特性を定義することができる。様々な実装形態において、画像フレームと関連するリンクテーブルは、水平リンクテーブルおよび垂直リンクテーブルを含む。水平リンクテーブルは、水平方向におけるカーネル順序を定義し、垂直リンクテーブルは、垂直方向におけるカーネル順序を定義することができる。様々な実装形態において、定義されたカーネルパターンを用いて画像フレームを処理することは、画像フレームに関連する垂直リンクテーブルをフェッチすること、垂直リンクテーブルに関連する垂直記述子をフェッチすること、垂直記述子に関連する水平リンクテーブルをフェッチすること、水平リンクテーブルに関連する水平記述子をフェッチすること、および水平記述子に関連するカーネルをフェッチすることを含む。この処理には、カーネルを用いて、垂直記述子および水平記述子に関連する画像フレーム部分を処理することをさらに含めることができる。
【０００７】
態様によっては、非一時的（non-transitory）コンピュータ可読媒体には、処理システムの１つまたは２つ以上のプロセッサによって実行されると本明細書に記載の方法を実行させる、命令がコード化されている。態様によっては、装置はストリームコントローラを含む。様々な実装形態において、ストリームコントローラは、画像フレームに関連する、定義されたカーネルパターンを記憶するためのカーネル記憶メモリ、および定義されたカーネルパターンに関連するカーネルスイッチルックアップテーブルを記憶するためのカーネルルックアップテーブル（ＬＵＴ）メモリを含む。様々な実装形態において、ストリームコントローラは、定義されたカーネルパターンおよびカーネルスイッチルックアップテーブルに従って、画像フレーム上の様々なカーネルの実行を指示する動作が可能である。
【０００８】
ストリームコントローラには、画像フレームに対して実施されるカーネルを記憶するための少なくとも２つのカーネルバッファをさらに含めることができる。態様によっては、当該装置は、ストリーム処理ユニットを含む画像プロセッサをさらに含み、この場合に、ストリームコントローラは、定義されたカーネルパターンに従ってカーネルを画像フレームに対して実行するように、ストリーム処理ユニットに指示する動作が可能である。態様によっては、当該装置は、定義されたカーネルパターンに基づいて、カーネルスイッチルックアップテーブルを生成する動作が可能なコンパイラをさらに含む。様々な実装形態において、当該装置は、本明細書において記載した方法を実施する。
【０００９】
本開示は、添付の図と合わせて読めば、以下の詳細な説明から最もよく理解される。なお、業界の標準的慣行に従って、様々な特徴は、実寸通りに描かれておらず、例証の目的だけに用いられていることを強調したい。実際に、様々な特徴の寸法は、考察を分かり易くするために、任意に拡大または縮小されていることがある。
【図面の簡単な説明】
【００１０】
【図１Ａ】図１Ａは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。
【図１Ｂ】図１Ｂは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。
【図１Ｃ】図１Ｃは、本開示の様々な観点による、画像処理中の画像フレームに応用可能な、様々な例示的なカーネルパターンの概略ブロック図である。
【図２】図２は、本開示の様々な観点による、画像フレームを処理する画像プロセッサによって実現することのできる、画像フレームに対して実施されるカーネル（演算または計算）に関連するカーネルパターンを定義する例示的な方法のフローチャートである。
【図３】図３は、本開示の様々な観点による、図２の方法を実施することにより画像処理中に定義することのできる、画像フレームの例示的なカーネルパターンの概略ブロック図である。
【図４】図４は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。
【図５】図５は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。
【図６】図６は、本開示の様々な観点による、画像処理中の画像フレームに対して実施されるカーネルを定義する記述子ベースカーネル定義を実装するための例示的なアセンブラコードを提示する。
【図７】図７は、本開示の様々な観点による、画像フレームを処理するときに、画像プロセッサによって実装することのできる、図２の方法を使用して定義されるもののような、記述子ベースカーネル定義を使用して、画像フレームに対して実施しようとするカーネルをフェッチする例示的な方法のフローチャートである。
【図８】図８は、本開示の様々な観点による、画像処理用の例示的な画像プロセッサの概略ブロック図である。
【図９】図９は、本開示の様々な観点による、図８の画像プロセッサに実装することができる、例示的なストリームコントローラの概略ブロック図である。
【図１０】図１０は、本開示の様々な観点による、図８の画像プロセッサに実装することができる、例示的ストリームコントローラの概略ブロック図である。
【図１１】図１１は、本開示の様々な観点による、図９のストリームコントローラを実装することのできる、例示的なカメラの概略ブロック図である。
【００１１】
例示用態様の詳細な説明
以下の開示は、本開示の異なる特徴を実現するための、多数の異なる態様、または実施例を提示する。本開示を簡略化するために、構成要素および配設の具体例を以下に記載する。これらは、勿論のこと、例示にすぎず、限定を意図するものではない。さらに、本開示は、様々な実施例において参照番号および／または文字を繰り返すことがある。このような繰返しは、簡潔性と明瞭性のためであり、それ自体で、考察される様々な態様および／または構成の間の関係を要求するものではない。
【００１２】
図１Ａ〜１Ｃは、本開示の様々な観点による、画像処理中に画像フレーム１００に適用することのできる、様々なカーネルパターンの概略ブロック図である。図１Ａ〜１Ｃは、本開示の発明概念をさらに良く理解する目的で、分かり易くするために簡略化されている。さらなる特徴を、画像フレーム１００および関連するカーネルパターンに加えることが可能であり、また以下に示す特徴の一部は、画像フレーム１００および関連するカーネルパターンのその他の態様において、置換または消去することができる。
【００１３】
図１Ａは、画像処理中に画像フレーム１００に適用することのできる、カーネルパターン１１０を示し、ここでカーネルパターン１１０は、カーネル０（Ｋ０）（例えば、バックグラウンドカーネル）、カーネル１（Ｋ１）、およびカーネル２（Ｋ２）を含む。Ｋ０、Ｋ１、およびＫ２は、カーネルパターン１１０に従って、画像フレーム１００上で動作する。画像フレーム１００は、水平ピクセルラインの群ＨＬ０、ＨＬ１、ＨＬ２、…ＨＬＮおよび垂直ピクセルラインの群ＶＬ０、ＶＬ１、ＶＬ２、…ＶＬＮに区画して、カーネルパターン１１０内部に様々なカーネル順序を定義することができる。例えば、ｘ方向（または水平方向）において、画像フレーム１００は、以下のようなカーネルパターン１１０のカーネル順序を定義するように区画することができる：
例えば、Ｋ０に従って処理される水平画像ラインの群ＨＬ０のような、第１の群の水平画像ライン；
例えば、カーネル順序内部でＫ１→Ｋ０が複数回、繰り返す、カーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ１→Ｋ０に従って処理される、水平画像ラインの群ＨＬ１のような、第２の群の水平画像ライン；
例えば、Ｋ０に従って処理される水平画像ラインの群ＨＬ２のような、第３の群の水平画像ライン；
例えば、カーネル順序内部で第１のＫ２→Ｋ０が複数回、繰り返す、カーネル順序Ｋ０→Ｋ２→Ｋ０→Ｋ２→Ｋ０に従って処理される、水平画像ラインの群ＨＬ３のような、第４の群の水平画像ライン；および
画像フレーム１００が処理されるまで、以下同様である。
【００１４】
カーネルパターン１１０は、水平方向に定義される、カーネル順序間のループを含む。例えば、ｙ方向（または垂直方向）において、画像フレーム１００は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる：
例えば、Ｋ０を連続的にループ動作する垂直画像ラインの群ＶＬ０のような、第１の群の垂直画像ライン；
例えば、複数回繰り返す、ループカーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ２→Ｋ０を含む、垂直画像ラインの群ＶＬ１のような、第２の群の垂直画像ライン；
例えば、Ｋ０を連続的にループ動作する垂直画像ラインの群ＶＬ２のような、第３の群の垂直画像ライン；および
画像フレーム１００が処理されるまで、以下同様である。
垂直方向において、上記のループは、画像処理要件に応じて複数回、ループ動作してもよい。
【００１５】
図１Ｂは、同様に、画像処理中に画像フレーム１００に適用することのできる、カーネルパターン１２０を示し、ここでカーネルパターン１２０は、画像フレーム１００に対して動作するためのＫ０，Ｋ１、Ｋ２、およびカーネル３（Ｋ３）を含む。画像フレーム１００は、水平ピクセルラインの群ＨＬ０、ＨＬ１、ＨＬ２、…ＨＬＮおよび垂直ピクセルラインの群ＶＬ０、ＶＬ１、ＶＬ２、…ＶＬＮに区画して、カーネルパターン１２０内部に様々なカーネル順序を定義することができる。例えば、ｘ方向（または水平方向）において、画像フレーム１００は、カーネルパターン１２０の以下のカーネル順序を定義するように区画することができる：
例えば、Ｋ０に従って処理される水平画像ラインの群ＨＬ０などの、第１の群の水平画像ライン；
例えば、カーネル順序内部でＫ２→Ｋ０が複数回、繰り返すカーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ２→Ｋ０→Ｋ３→Ｋ０に従って処理される、水平画像ラインの群ＨＬ１および水平画像ラインの群ＨＬ３などの、第２の群の水平画像ライン；
例えば、カーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ３→Ｋ０に従って処理される、水平画像ラインの群ＨＬ２などの、第３の群の水平画像ライン；および
画像フレーム１００が完全に処理されるまで、以後同様。
【００１６】
カーネルパターン１２０は、水平方向に定義された、カーネル順序の間にループを含む。例えば、ｙ方向（または垂直方向）において、画像フレーム１００は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる：
例えば、Ｋ０を連続的にループ動作する、垂直画像ラインの群ＶＬ０のような、第１の群の垂直画像ライン；
例えば、第１のＫ１→Ｋ０が、カーネル順序内部で複数回、繰り返す、ループカーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ１→Ｋ０を含む、垂直画像ラインの群ＶＬ１のような、第２の群の垂直画像ライン；
例えば、Ｋ０を連続的にループ動作する、垂直画像ラインの群ＶＬ２のような、第３の群の垂直画像ライン；
カーネル順序内部で第１のＫ２→Ｋ０が複数回、繰り返す、ループカーネル順序Ｋ０→Ｋ２→Ｋ０→Ｋ２→Ｋ０を含む、垂直画像ラインの群ＶＬ３のような、第４の群の垂直画像ライン；
例えば、カーネル順序内部で第１のＫ３→Ｋ０が複数回、繰り返す、ループカーネル順序Ｋ０→Ｋ３→Ｋ０→Ｋ３→Ｋ０を含む、垂直画像ラインの群ＶＬＮ−１のような、第Ｎ−１群の垂直画像ライン；および
画像フレーム１００が処理されるまで、以下同様。
垂直方向において、上記ループは、画像処理要件に応じて複数回、ループ動作してもよい。
【００１７】
図１Ｃは、同様に、画像処理中に画像フレーム１００に適用することのできる、カーネルパターン１３０を示し、ここでカーネルパターン１３０は、画像フレーム１００に対して動作するためのＫ０，Ｋ１、Ｋ２、およびＫ３を含む。画像フレーム１００は、水平ピクセルラインの群ＨＬ０、ＨＬ１、ＨＬ２、ＨＬ３、ＨＬ４、ＨＬ５、およびＨＬ６、および垂直ピクセルラインの群ＶＬ０、ＶＬ１、ＶＬ２、ＶＬ３、ＶＬ４、ＶＬ５、およびＶＬ６に区画して、カーネルパターン１２０内部に様々なカーネル順序を定義することができる。例えば、ｘ方向（または水平方向）において、画像フレーム１００は、カーネルパターン１３０の以下のカーネル順序を定義するように区画することができる：
例えば、Ｋ０に従って処理される、水平画像ラインの群ＨＬ０および水平画像ラインの群ＨＬ６のような、第１の群の水平画像ライン；
例えば、カーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ２→Ｋ０→Ｋ１→Ｋ０に従って処理される、水平画像ラインの群ＨＬ１および水平画像ラインの群ＨＬ５のような、第２の群の水平画像ライン；
例えば、Ｋ０に従って処理される、水平画像ラインの群ＨＬ２および水平画像ラインの群ＨＬ５のような、第３の群の水平画像ライン；および
画像フレーム１００が完全に処理されるまで、以下同様。
【００１８】
カーネルパターン１３０は、水平方向に定義された、カーネル順序の間にループを含む。例えば、ｙ方向（または垂直方向）において、画像フレーム１００は、水平画像ラインによって定義されるカーネル順序のループを定義するように、例えば以下のように、区画することができる：
例えば、Ｋ０を連続的にループ動作する、垂直画像ラインの群ＶＬ０および垂直画像ラインの群ＶＬ６のような、第１の群の垂直画像ライン；
例えば、ループカーネル順序Ｋ０→Ｋ１→Ｋ０→Ｋ３→Ｋ０→Ｋ１→Ｋ０を含む、垂直画像ラインの群ＶＬ１および垂直画像ラインの群ＶＬ５のような、第２の群の垂直画像ライン；
例えば、Ｋ０を連続的にループ動作する、垂直画像ラインの群ＶＬ２および垂直画像ラインの群ＶＬ４のような、第３の群の垂直画像ライン；
例えば、ループカーネル順序Ｋ０→Ｋ２→Ｋ０→Ｋ３→Ｋ０→Ｋ２→Ｋ０を含む、垂直画像ラインの群ＶＬ３のような、第４の群の垂直画像ライン；および
画像フレーム１００が処理されるまで、以下同様。
垂直方向において、上記ループは、画像処理要件に応じて、複数回、ループ動作をしてもよい。
【００１９】
図１Ａ〜１Ｃにおけるカーネルパターンにより証明されるように、画像フレーム１００などの、画像フレームに対して実施されるカーネル演算は、画像処理要件に応じて、大幅に変化させることができる。さらに強力で、動的な、かつ効率的な画像処理を提供するように進化を続ける画像センサデバイス（例えば、ディジタルカメラ）に対して、そのような画像センサデバイスは、様々な画像フレームに対して実施されるカーネル演算などの、画像処理要件を変化させる能力を必要とする。画像センサデバイスに実装された、従来のストリーム画像プロセッサは、２つの問題：（１）１つの画像フレームに対して２つ以上のカーネルを適用できないこと、または（２）１つの画像フレームに対して複数のカーネルを適用するための追加のハードウェアを必要とすること、のうちの一方に問題があり、この場合に、そのようなハードウェアは、カーネルをスイッチングするときにデータを見失うことが多い。
【００２０】
前述のもののような、現行の画像処理装置および方法の様々な短所に対処するために、本開示は、画像フレームのカーネルパターンを定義する方法、ならびに画像処理用の定義されたカーネルパターンを実現するための、画像プロセッサおよび関連するストリームコントローラを提供する。本明細書に記載の記述子ベースカーネル定義方法を実施することによって、（本明細書において開示するストリームコントローラを実装する）画像プロセッサは、複数カーネルを用いて画像フレームをシームレスに処理することが可能であり、この場合に、画像フレームを処理するのに使用されるカーネルの数は、メモリサイズだけによって制限される。
【００２１】
図２は、本開示の様々な観点による、画像フレームを処理する画像プロセッサによって実現することのできる、画像フレームに対して実施されるカーネル（演算）に関連するカーネルパターンを定義する方法２００のフローチャートである。以下に詳細に述べるように、方法２００は、カーネルブロック（複数を含む）、カーネル記述子（複数を含む）、および画像フレーム上で実行される様々なカーネルを識別する、リンクテーブル（複数を含む）を定義することによって、カーネルパターンを定義する。図３は、本開示の様々な観点による、図２の方法２００を実施することにより画像処理中に定義することのできる、画像フレーム３１０のカーネルパターン３００の概略ブロック図である。図２および図３は、本開示の発明概念がさらに良く理解されるように、同時に考察されるとともに、分かり易くするために簡略化されている。方法２００の前、その間、その後に追加のステップを設けるとともに、方法２００のその他の態様に対して、記載したステップの一部を置換または消去することができる。さらに、追加の特徴を、カーネルパターン３００および画像フレーム３１０に追加することができるとともに、カーネルパターン３００および画像フレーム３１０のその他の態様において、以下に記載する特徴の一部を置換、または消去することができる。
【００２２】
方法２００は、画像フレーム３１０などの画像フレームに関連する、カーネルブロック（複数を含む）を定義することによって、ブロック２１０で始まる。カーネルブロック（複数を含む）を定義するステップは、カーネルブロックが、同一のカーネル（演算または計算）がそれに対して実施される、画像フレームの１つまたは２つ以上のピクセルを含むように、画像ピクセルに対して実施されるカーネル（演算）に応じて、画像ピクセルをグループ化する。カーネルは、画像ピクセルに対して実施されるすべての演算を含む（例えば、ＡＤＤ、ＳＵＢＴＲＡＣＴ、ＬＯＡＤ、ＳＴＯＲＥ、その他の演算、またはそれらの組合せ、および／または画像フレーム３１０を処理するためのパイプラインステージ情報などの、画像処理用に実施されるカーネル演算を指定する、関連する算術論理ユニット（ＡＬＵ）コードおよびメモリ（ＭＥＭ）演算コード（オペレーションコード（opcodes）を含む）。例えば、図３において、３つの異なるカーネル演算を、画像フレーム３１０に対して実行することが可能であり（カーネル０（Ｋ０）、カーネル１（Ｋ１）、およびカーネル２（Ｋ２））、画像フレーム３１０は、Ｋ０に関連するカーネルブロック３２０、Ｋ１に関連するカーネルブロック３２５、およびＫ２に関連するカーネルブロック３３０を定義するように区画される。画像フレーム３１０の処理中に、Ｋ０は、カーネルブロック３２０に含まれる画像フレーム３１０のピクセルに対して実施され、Ｋ１は、カーネルブロック３２５に含まれる画像フレーム３１０のピクセルに対して実施され、Ｋ２は、カーネルブロック３３０に含まれる画像フレーム３１０のピクセルに対して実施される。
【００２３】
当該方法は、画像フレームに関連するカーネル記述子（複数を含む）を定義することによって、ブロック２２０へと続く。カーネル記述子は、画像フレームに適用される、カーネル演算順序を示し、カーネルパターン３００をさらに定義する。本例においては、画像フレーム３１０は、水平ピクセルラインの群ＨＬ０、ＨＬ１、ＨＬ２，…ＨＬＮ、および垂直ラインの群ＶＬ０、ＶＬ１、ＶＬ２、…ＶＬＮに区画されて、画像フレーム部分を定義し、この場合に各画像フレーム部分は、関連するカーネル記述子を有する。本例においては、画像フレーム３１０は、類似の画像フレーム部分が同一カーネル記述子を有するように、類似の画像フレーム部分を定義するように区画することができる。カーネル記述子は、水平記述子（ＨＤＥＳ）および垂直記述子（ＶＤＥＳ）を含み、それに応じて、各画像フレーム部分は、関連する水平記述子および関連する垂直記述子を有する。
【００２４】
水平記述子は、水平方向において、それに関連する画像フレーム部分の様々なカーネル属性、例えば、（Ｋ０、Ｋ１、またはＫ２などの関連する画像フレーム部分に対して動作するカーネルを定義する）カーネルＩＤ、（画像フレーム部分に関連するカーネルの水平ピクセル幅を定義する）カーネル幅、（関連する画像フレーム部分が、水平方向においてループスタート、ループエンド、またはループなしであるかどうかを定義する）ループフラグ、（関連する画像フレーム部分が、水平方向にループエンドであるときに定義される）ループ数、水平方向において画像フレーム部分を記述する上で有用なその他情報、またはそれらの組合せを定義する。垂直記述子は、垂直方向においてそれに関連する画像フレーム部分の様々なカーネル属性、例えば、ＨＬＩＮＫ  ＩＤ（以下に詳細に記述する、水平ピクセルライン群に関連する水平リンクテーブル）、（ＨＬＩＮＫ  ＩＤに関連するカーネルを実行するための、水平ピクセルライン群内部での水平ピクセルラインの数を定義する）カーネル高さ、（関連する画像フレーム部分が、垂直方向においてループスタート、ループエンド、またはループなしであるどうかを定義する）ループフラグ、(関連する画像フレーム部分が垂直方向においてループエンドであるときに定義される）ループ数、垂直方向において画像フレーム部分を記述するのに有用なその他の情報、またはそれらの組合せを定義する。
【００２５】
図３において、画像フレーム３１０は、水平記述子ＨＤＥＳ０、ＨＤＥＳ１、ＨＤＥＳ２、ＨＤＥＳ３、ＨＤＥＳ４、およびＨＤＥＳ５、ならびに垂直記述子ＶＤＥＳ０、ＶＤＥＳ１、ＶＤＥＳ２、ＶＤＥＳ３、ＶＤＥＳ４、およびＶＤＥＳ５によって定義することのできる画像フレーム部分を含む。代替的態様は、水平記述子と垂直記述子の様々な組合せを使用して、画像フレーム部分を定義することができる。本例においては、水平記述子ＨＤＥＳ０、ＨＤＥＳ２、ＨＤＥＳ３、ＨＤＥＳ４、およびＨＤＥＳ５は、画像処理のためにＫ０によって処理される画像フレーム部分を表わし、この場合に、水平記述子ＨＤＥＳ０、ＨＤＥＳ２、ＨＤＥＳ３、ＨＤＥＳ４、およびＨＤＥＳ５はカーネル順序内部で多様なカーネル幅および位置を有し；水平記述子ＨＤＥＳ１は画像処理のためにＫ１によって処理される画像フレーム部分を表わし；水平記述子ＨＤＥＳ４は画像処理のためにＫ２によって処理される画像フレーム部分を表わす。
【００２６】
垂直記述子ＶＤＥＳ０、ＶＤＥＳ１、ＶＤＥＳ２、ＶＤＥＳ３、およびＶＤＥＳ４は、異なるカーネル順序を有する水平ピクセルライン群を表わす。例えば、ＶＤＥＳ０、ＶＤＥＳ２、およびＶＤＥＳ４は水平ピクセルライン群を表わし、この場合にＫ０は画像処理のための単独カーネル演算であり、垂直記述子ＶＤＥＳ０、ＶＤＥＳ２、およびＶＤＥＳ４は、カーネル順序内部で多様なカーネル高さおよび位置を有し；垂直記述子ＶＤＥＳ１は、カーネル演算順序が、画像処理のための交互するＫ０およびＫ１カーネル演算を含む、水平ピクセルライン群を表わし、垂直記述子ＶＤＥＳ３は、カーネル演算順序が、画像処理のための交互するＫ０およびＫ２カーネル演算を含む、水平ピクセルライン群を表わす。
【００２７】
当該方法は、画像フレームに関連するリンクテーブル（複数を含む）を定義することによって、ブロック２３０につながる。リンクテーブル（複数を含む）は、画像フレーム３１０の定義されたカーネルパターン３００に存在する、水平記述子順序および垂直記述子順序を定義する。本例においては、リンクテーブルは、水平リンクテーブル（ＨＬＩＮＫ）および垂直リンクテーブル（ＶＬＩＮＫ）を含む。水平リンクテーブルは、画像フレーム３１０が多数の関連する水平リンクテーブルを有するように、水平ピクセルラインの群の水平画像記述子を収集する。例えば、図３において、画像フレーム３１０は少なくとも３つの関連する水平リンクテーブルを有することができる：
ＨＬＩＮＫ０：    ＨＤＥＳ５
ＨＬＩＮＫ１：    ＨＤＥＳ０→ＨＤＥＳ１→ＨＤＥＳ２→ＨＤＥＳ３
ＨＬＩＮＫ２：    ＨＤＥＳ０→ＨＤＥＳ４→ＨＤＥＳ２→ＨＤＥＳ３
ここで、ＨＬＩＮＫ１に対して、ＨＤＥＳ１はループスタートであって、ＨＤＥＳ２はループエンドであり、ＨＬＩＮＫ２に対して、ＨＤＥＳ４はループスタートであって、ＨＤＥＳ２はループエンドである。
【００２８】
本例においては、水平ピクセルライン群０（ＨＬ０）、水平ピクセルライン群２（ＨＬ２）、水平ピクセルライン群４（ＨＬ４）、水平ピクセルライン群６（ＨＬ６）、および水平ピクセルライン群Ｎ（ＨＬＮ）に対する、カーネル演算順序は同一であるので、ＨＬ０、ＨＬ２、ＨＬ４、ＨＬ６、およびＨＬＮは、同一の水平リンクテーブル、特にＨＬＩＮＫ０を用いて処理することができる。同様に、水平ピクセルライン群１（ＨＬ１）、水平ピクセルライン群５（ＨＬ５）、その他用のカーネル演算順序はまったく同じであるので、ＨＬ１、ＨＬ５、およびその他類似の水平ライン群は、同一の水平リンクテーブル、特にＨＬＩＮＫ１を用いて処理することができる。同様に、水平ピクセルライン群２（ＨＬ２）、水平ピクセルライン群６（ＨＬ６）、その他に対する、カーネル演算順序は同一であるので、ＨＬ２、ＨＬ６、およびその他の類似の水平ラインは、同一の水平リンクテーブル、特にＨＬＩＮＫ２を用いて処理することができる。
【００２９】
水平リンクテーブルの数は、したがって、画像フレーム３１０のカーネルパターン３００により定義される、水平カーネル演算順序の数と等価にすることができる。対象的に、垂直リンクテーブルは、本例において、画像フレーム３１０が、１つの関連する垂直リンクテーブルを有するように、画像フレーム全体に対する垂直記述子を収集する。図３において、画像フレーム３１０に関連する、垂直リンクテーブルは、次のようにすることができる：
ＶＬＩＮＫ：ＶＤＥＳ０→ＶＤＥＳ１→ＶＤＥＳ２→ＶＤＥＳ３→ＶＤＥＳ４→ＶＤＥＳ０
ここで、ＶＤＥＳ０はループスタートであり、ＶＤＥＳ４はループエンドである。
【００３０】
当該方法は、カーネルブロック（複数を含む）、カーネル記述子（複数を含む）、およびリンクテーブル（複数を含む）を用いて画像フレームを処理することによって、ブロック２４０へと続く。本例においては、図４〜６は、本開示の様々な観点による、例えば、画像フレーム３１０に対して実施される（カーネルパターン３００によって定義される）カーネルなどの、画像処理中に画像フレームに対して実施されるカーネルを定義するために、（ブロック２１０、２２０、および２３０において定義されたもののような）記述子ベースカーネル定義を実装するための、例示的なアセンブラコードを提示する。図４は、本開示の様々な観点による、例えば、カーネルパターン３００に関連するカーネル０（Ｋ０）などの、カーネルを定義するための例示的なカーネルアセンブラコードを提示する。
【００３１】
図５は、本開示の様々な観点による、例えば、画像フレーム３１０を処理するためのカーネルパターン３００に関連する水平記述子および垂直記述子などの、画像フレームを処理するためのカーネルパターンに関連する水平記述子および垂直記述子を定義するための、例示的なアセンブラコード提示する。図６は、本開示の様々な観点による、例えば、画像フレーム３１０を処理するためのカーネルパターン３００に関連する水平リンクテーブルおよび垂直リンクテーブルなどの、画像フレームを処理するためのカーネルパターンに関連する水平リンクテーブルおよび垂直リンクテーブルを定義するための、例示的なアセンブラコードを提示する。図４〜６におけるアセンブラコードは、本開示の発明概念をより良く理解する目的で、分かり易くするために簡略化されており、本開示によって様々な態様を提供するために、図４〜６に示されたアセンブラコードの変形形態が企図されるものである。さらに、以下の考察は、記述子ベースカーネル定義を表現するための、例示的なアセンブラコードを提示するが、本開示は、記述子ベースカーネル定義を表現するために、様々なプログラミング言語を使用することを意図し、例示の目的でアセンブラコードを提示するものである。
【００３２】
図４において、例示的なカーネルアセンブラコードは、Ｋ０を定義することができる。このカーネルアセンブラコードは、（カーネル演算を定義する）Ｋｅｒｎｅｌ  ＩｎｄｅｘまたはＩＤ、画像処理のためのパイプラインステージ数（ＰＬ＿ＮＵＭ  ＮＵＭ）、ＡＬＵパイプラインステージ情報、演算コード、その他のカーネル情報、またはそれらの組合せを示す。図５において、例示的アセンブラコードは、画像フレーム３１０に関連する、水平記述子ＨＤＥＳ０、ＨＤＥＳ１、ＨＤＥＳ４、およびＨＤＥＳ５、ならびに垂直記述子ＶＤＥＳ０、ＶＤＥＳ１、およびＶＤＥＳ３を定義する。水平記述子アセンブラコードは、水平記述子と関連するカーネル、カーネル幅、水平記述子がループスタート、ループエンド、ループなしのいずれに関連するか、その他の水平記述子情報、またはそれらの組合せを示す。垂直記述子アセンブラコードは、垂直記述子と関連する水平リンクテーブル、カーネル高さ、垂直記述子がループスタート、ループエンド、ループなしのいずれであるか、その他の垂直記述子情報、またはそれらの組合せを示す。
【００３３】
一例において、このアセンブラコードは、次のことを示すことができる：水平記述子ＨＤＥＳ０は、Ｋ０（カーネル０）、約５０のカーネル幅、およびループなし（０）に関連すること；水平記述子ＨＤＥＳ１は、Ｋ１（カーネル１）、約２００のカーネル幅、およびループスタート（１）に関連すること；水平記述子ＨＤＥＳ４は、Ｋ２（カーネル２）、約２００のカーネル幅、およびループエンド（２）に関連すること；垂直記述子ＶＤＥＳ０は、水平リンクテーブルＨＬＩＮＫ０（ＨＤＥＳ＿ＬＩＮＫ０）、約３２のカーネル高さ、およびループなし（０）に関連すること；垂直記述子ＶＤＥＳ１は、水平リンクテーブルＨＬＩＮＫ１（ＨＤＥＳ＿ＬＩＮＫ１）、約８０のカーネル幅、およびループスタート（１）に関連すること、および垂直記述子ＶＤＥＳ４は、水平リンクテーブルＨＬＩＮＫ２（ＨＤＥＳ＿ＬＩＮＫ２）、約５０のカーネル幅、およびループエンド（２）に関連することである。
【００３４】
同様に、アセンブラコードは、水平記述子ＨＤＥＳ２、ＨＤＥＳ３、およびＨＤＥＳ５、ならびに垂直記述子ＶＤＥＳ２、およびＶＤＥＳ４をさらに定義することができる。図６において、例示的なアセンブラコードは、画像フレーム３１０に関連する、水平リンクテーブルおよび垂直リンクテーブル定義する。例えば、このアセンブラコードは、画像フレーム３１０に関連する、水平リンクテーブルＨＬＩＮＫ０、ＨＬＩＮＫ１、およびＨＬＩＮＫ２、ならびに画像フレーム３１０に関連する垂直リンクテーブルＶＬＩＮＫを定義することができる。図示した例において、アセンブラコードは、画像フレーム３１０に関連するカーネル記述子に対する、水平スタート場所（Ｈ＿ＳＴＡＲＴ  ｌｏｃａｔｉｏｎ）および垂直スタート場所（Ｖ＿ＳＴＡＲＴ  ｌｏｃａｔｉｏｎ）を示す。
【００３５】
図７は、本開示の様々な観点による、例えば、方法２００のブロック２４０におけるように、画像フレームを処理するときに、画像プロセッサによって実装することのできる、画像フレームに対して実施されるカーネル（演算）をフェッチするための方法４００のフローチャートである。図７は、本開示の発明概念をさらに良く理解する目的で、分かり易くするために簡略化されている。方法４００のカーネルフェッチング順序は、例えば、画像フレーム３１０に対して実施されるカーネルパターン３００などの、画像フレームに対して実施されるカーネルパターンを定義する、（上述のような）カーネルブロック（複数を含む）、カーネル記述子（複数を含む）、およびリンクテーブル（複数を含む）を使用する。方法４００は、垂直リンク（ＶＬＩＮＫ）テーブルをフェッチすることにより、例えば垂直リンクテーブルアドレスをフェッチすることによって、ブロック４１０で始まる。一例においては、画像フレーム３１０に関連するカーネルパターン３００を参照して、方法４００は、画像フレーム３１０に関連するＶＬＩＮＫテーブルのアドレスをフェッチすることによって始めることができる。
【００３６】
方法４００は、ＶＬＩＮＫテーブルを解析して、ＶＬＩＮＫテーブルに関連する垂直記述子（ＶＤＥＳ）をフェッチすることによって（特に、ＶＤＥＳに関連するアドレスをフェッチすることによって）、ブロック４２０に続く。例えば、画像フレーム３１０に対して、（図６においてアセンブラコードによって定義された例示的ＶＬＩＮＫテーブルなどの）ＶＬＩＮＫテーブルを解析すると、ＶＤＥＳ０が、ＶＬＩＮＫテーブルに関連する第１の垂直記述子であり、そのためにカーネルフェッチング順序が、ＶＤＥＳ０用のアドレスのフェッチへと進む。次いで、ブロック４３０における方法４００は、垂直記述子を解析して、その垂直記述子に関連する、水平リンク（ＨＬＩＮＫ）テーブルをフェッチする（特に、そのＨＬＩＮＫテーブルに関連するアドレスをフェッチする）。例えば、ＶＤＥＳ０は、（図５における例示的な垂直記述子アセンブラコードによって指定された）ＨＬＩＮＫ０と関連しているので、方法４００は、ＨＬＩＮＫ０テーブルのアドレスをフェッチする。
【００３７】
次いで、当該方法は、ＨＬＩＮＫテーブルを解析し、ＨＬＩＮＫテーブルに関連する水平記述子（ＨＤＥＳ）をフェッチすること（特に、ＨＤＥＳに関連するアドレスをフェッチすること）によって、ブロック４４０に続く。本例においては、ＨＬＩＮＫ０は、ＨＤＥＳ５がＨＬＩＮＫ０に関連する第１の、かつ唯一の水平記述子であることを示し、そのために方法４００はＨＤＥＳ５のアドレスをフェッチする。ブロック４５０において、方法４００は、水平記述子を解析して、水平記述子に関連するカーネルを特定し、次いで、水平記述子に関連するカーネルをフェッチする（特に、カーネルに関連するアドレスをフェッチする）。例えば、カーネル０（Ｋ０）は、（図５における例示的な水平記述子アセンブラコードによって定義されるように）ＨＤＥＳ５と関連しており、したがって方法４００はＫ０をフェッチする。一例において、方法４００は、メモリからＫ０をロードして、その後に、Ｋ０は、対応する垂直記述子および水平記述子、具体的には垂直記述子ＶＤＥＳ０および水平記述子ＨＤＥＳ５によって指定された、画像フレーム３１０の部分に対して動作する。
【００３８】
画像フレーム３１０の部分が処理されると、方法４００は、ブロック４３０において解析されたＨＬＩＮＫテーブルに関連する追加の水平記述子があるかどうかに応じて、ブロック４２０またはブロック４３０に戻る。本例において、ＨＬＩＮＫ０は、単独の関連水平記述子ＨＤＥＳ５を含む。したがって、画像フレーム３１０を処理するために、方法４００は、ＶＬＩＮＫテーブルを解析して、そのＶＬＩＮＫテーブルに関連する次の垂直記述子（ＶＤＥＳ）をフェッチすることによってブロック４２０へと続く。例えば、画像フレーム３１０に対して、（図６における例示的なＶＬＩＮＫテーブルアセンブラコードなどの）ＶＬＩＮＫテーブルを解析すると、ＶＤＥＳ１が次の垂直記述子であることを示し、したがってカーネルフェッチ順序は、ＶＤＥＳ１に対するアドレスのフェッチングへと進む。次いで、ブロック４３０における方法４００は、次の垂直記述子を解析して、次の垂直記述子に関連する水平リンクテーブル（ＨＬＩＮＫ）をフェッチする。
【００３９】
例えば、ＶＤＥＳ１は、（図５における例示的垂直記述子アセンブラコードによって指定される）ＨＬＩＮＫ１テーブルと関連しているので、方法４００はＨＬＩＮＫ１テーブルのアドレスをフェッチする。次いで、当該方法は、ＨＬＩＮＫテーブルを解析し、そのＨＬＩＮＫテーブルに関連する水平記述子（ＨＤＥＳ）をフェッチすることによって、ブロック４４０に続く。本例において、ＨＬＩＮＫ１は、水平記述子ＨＤＥＳ０がＨＬＩＮＫ１テーブルに関連する第１の水平記述子であることを示しており、したがって方法４００はＨＤＥＳ０のアドレスをフェッチする。ブロック４５０において、方法４００は、水平記述子を解析して、水平記述子に関連するカーネルを特定し、次いで、その水平記述子に関連するカーネルをフェッチする（特に、カーネルに関連するアドレスをフェッチする）。例えば、カーネル０（Ｋ９）は、（図５における例示的な水平記述子アセンブラコードによって定義されるように）ＨＤＥＳ０と関連しており、したがって方法４００はＫ０をフェッチする。
【００４０】
一例において、方法４００はメモリからＫ０をロードして、その後にＫ０は、その対応する垂直記述子および水平記述子、垂直記述子ＶＤＥＳ１ならびに水平記述子ＨＤＥＳ０によって指定される、画像フレーム３１０の部分に対して動作する。ＨＬＩＮＫ１テーブルは、水平記述子ＨＤＥＳ１、ＨＤＥＳ２、およびＨＤＥＳ３をさらに含むので、方法４００は、例えば、記述子ＶＤＥＳ１およびＨＤＥＳ１に関連する画像フレーム部分、記述子ＶＤＥＳ１およびＨＤＥＳ２に関連する画像フレーム部分、ならびに記述子ＶＤＥＳ１およびＨＤＥＳ３に関連する画像フレーム部分などの、画像フレーム３１０の部分が、対応する垂直記述子および水平記述子によって処理されるまで、ブロック４３０からブロック４５０までを繰り返すことができる。次いで、ブロック４２０からブロック４５０までのフェッチ順序が、例えば、画像フレーム３１０などの、画像フレームが定義されたカーネルによって処理されるまで、繰り返される。追加のステップを、方法４００の前、その途中、その後に設けることが可能であり、記述したステップの一部を、方法４００のその他の態様に対して、置換または消去することができる。
【００４１】
図８は、本開示の様々な観点による、画像処理用の画像プロセッサ５００の概略ブロック図である。図示した態様においては、画像プロセッサ５００は、ストリーム画像プロセッサとして構成されている。ストリーム画像プロセッサは、画像処理アプリケーションを、画像データストリームに対して動作する一組の計算カーネル中に配設する。図８は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。追加の特徴を、画像プロセッサ５００に追加することが可能であり、以下に記載する特徴の一部は、画像信号プロセッサ５００のその他の態様において置換または消去することができる。
【００４２】
画像プロセッサ５００には、プログラムメモリ５１０、ホストプロセッサ５１５、およびストリーム処理ユニット５２０と組み合わされる、ストリームコントローラ５０５を含めることができる。ストリームコントローラ５０５は、（それに限定はされないが、画像、ビデオ、オーディオ、またはその他のデータタイプを含む）データに対するストリーミング動作の流れを制御することができる。ストリームコントローラ５０５は、ホストプロセッサ５１５からストリーム命令を受け取り（ホストプロセッサ５１５は、その命令をプログラムメモリ５１０からロードすることができる）、次いで、ストリームコントローラ５０５は、ストリーム処理ユニット５２０にそのような命令を出す。本例においては、ホストプロセッサ５１５は、画像処理のために画像フレームに対して実施されるカーネルに関連する命令を出して、ストリームコントローラ５０５は、画像フレームが、以下にさらに記述するように、カーネルを用いてストリーム処理ユニット５２０によって処理されるように、ストリーム処理ユニット５２０に対する命令を順序付ける。一例において、ストリームコントローラ５０５は、ホストプロセッサ５１５からの命令を受け付けて、その命令を記憶し、どの命令がストリーム処理ユニット５２０によって使用可能かを判定する。
【００４３】
ストリーム処理ユニット５２０には、マイクロコントローラ５２５、算術論理ユニット（ＡＬＵ）ブロック５３０、ストリームレジスタファイル５３５、およびストリームメモリ５４０を含めることができる。マイクロコントローラ５２５は、ＡＬＵクラスタがデータのストリームに対してカーネル演算を実施するように、ＡＬＵブロック５３０、特に、ＡＬＵブロック５３０のＡＬＵクラスタ１、ＡＬＵクラスタ２、…ＡＬＵクラスタＮ（ここで、ＮはＡＬＵクラスタの合計数）を制御する。本例においては、ＡＬＵクラスタ１、ＡＬＵクラスタ２、…ＡＬＵクラスタＮは、画像データのストリームに対するカーネル演算を実施する。ＡＬＵクラスタは、単独命令、複数データ方式で動作することが可能であり、この場合に同一の命令が、データストリームの異なる要素に対して、ＡＬＵクラスタによって実行される。一例において、ＡＬＵクラスタ１、ＡＬＵクラスタ２、…ＡＬＵクラスタＮは、少なくとも１つのＡＬＵおよび少なくとも１つのローカルレジスタファイルを含む。ストリームレジスタファイル２３５は、データストリームを記憶し、画像プロセッサ内部での、例えば、ＡＬＵブロック５３０とストリームメモリ５４０の間の、データストリームの転送を容易にすることができる。
【００４４】
図９は、本開示の様々な観点による、ストリームプロセッサ内に実装することのできる、ストリームコントローラ６００の概略ブロック図である。一例において、ストリームコントローラ６００は、図８の画像プロセッサ５００のストリームコントローラ５０５として実装することができる。図９は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。ストリームコントローラ６００に追加の特徴を加えることができるとともに、以下に記述する特徴の一部は、ストリームコントローラ６００のその他の態様において、置換または消去することができる。
【００４５】
ストリームコントローラ６００は、コンパイラ６０２と協働して、データ処理のために、（例えば、図１〜８を参照して）本明細書に記載する、記述子ベースカーネル定義方法を実装する。ストリームコントローラ６００が画像プロセッサ５００のストリームコントローラ５０５として実装されている、本例においては、ストリームコントローラ６００は、コンパイラ６０２と協働して、画像データを処理するための、一例ではカーネルパターン３００による画像フレーム３１０を処理するための、記述子ベースカーネル定義を実装する。コンパイラ６０２は、画像プロセッサ５００のプログラムメモリ５１０に記憶させることができる、画像プロセッサ５００において実行可能な画像処理プログラムとすることができる。本例においては、コンパイラ６０２は、画像データに対して実施されるカーネル演算を定義するプログラム言語をコンパイルする。例えば、コンパイラ６０２は、（図４〜６を参照して記述された、例示的なアセンブラコードのような）画像フレーム３１０に対して実施されるカーネルを定義するアセンブラコードをコンパイルして、カーネルパターン３００に従って画像フレーム３１０を処理するための２値コードを生成する。コンパイラ６０２はまた、プログラム言語によって定義されたカーネルに基づいてカーネルスイッチルックアップテーブル（ＬＵＴ）を生成する。一例において、コンパイラ６０２は、アセンブラコードによって定義される水平リンクテーブルに関連するカーネル定義に基づいて、カーネルスイッチＬＵＴを生成する。
【００４６】
ストリームコントローラ６００は、カーネル記憶メモリ６０５を含む。カーネル記憶メモリ６０５は、データに対して実施されるカーネル演算に関連する情報、例えばカーネル情報、カーネル記述子情報、カーネルパターン情報、その他のカーネル情報、またはそれらの組合せなどを記憶する。一例において、カーネル記憶メモリ６０５は、データに対して実施されるカーネル演算を定義する２値カーネルコードを記憶する。例えば、カーネルパターン３００に従って処理画像フレーム３１０を処理するとき、カーネル記憶メモリ６０５は、カーネルＫ０、Ｋ１、およびＫ２を定義する２値カーネルコード、ならびにカーネルＫ０、Ｋ１、およびＫ２に関連するカーネルパターン３００を記憶する。一例において、（画像プロセッサ５００のホストプロセッサ５１５などの）ホストプロセッサは、コンパイラ６０２によって生成されたカーネル２値コードをカーネル記憶メモリ６０５中に記憶する。
【００４７】
ストリームコントローラ６００はまた、カーネルスイッチルックアップテーブル（ＬＵＴ）メモリ６１０を含む。カーネルスイッチＬＵＴメモリ６１０は、例えば、コンパイラ６０２によって生成されるカーネルスイッチＬＵＴなどの、データに対して実施されるカーネル演算に関連する、カーネルルックアップテーブルを記憶する。図１０は、本開示の様々な態様による、記述子ベースカーネル定義に基づき、コンパイラによって生成することのできる、例示的なカーネルスイッチＬＵＴを示す。図１０において、例示的なカーネルスイッチＬＵＴは、カーネル０（Ｋ０）からカーネル１（Ｋ１）へとスイッチする。カーネルスイッチが行われるとき、ストリーム処理ユニット５２０のすべてのＡＬＵ（例えば、ＡＬＵブロック５３０のＡＬＵ）が、Ｋ０またはＫ１を実行中である。ＡＬＵはパイプライン動作において動作するので、第１のクロックサイクルにおいて、２つのカーネルスイッチングが発生し、この場合に、ＡＬＵ１はＫ０からＫ１にスイッチし、同時にＡＬＵ９は、（例えば、Ｋ０より前のカーネルなどの）先のカーネルからＫ０へとスイッチし；第２のクロックサイクルにおいて、ＡＬＵ２はＫ０をＫ１へスイッチし、同時にＡＬＵ１０は先のカーネルからＫ０にスイッチし；第３のクロックサイクルにおいて、ＡＬＵ３はＫ０からＫ１へスイッチし、同時にＡＬＵ１１は、先のカーネルからＫ０へとスイッチし；後続のクロックサイクルにおいて以下同様である。各クロックサイクルにおいて、ストリームコントローラ６００は、実行のために、カーネルスイッチＬＵＴ中にスイッチを記録する。カーネルスイッチＬＵＴを生成し、画像処理中にそのカーネルスイッチＬＵＴを更新することによって、ストリームコントローラ６００は、カーネル境界においてデータを失うことなく、カーネルパイプライン更新を容易化する。
【００４８】
ストリームコントローラ６００には、メモリインターフェイス６１５、ストリームコントローラマネジャ６２０、ストリームコントローラ有限状態マシン（ＦＳＭ）カーネル／ＬＵＴフェッチングユニット６２５、およびストリームコントローラ命令制御ユニット６３０をさらに含めることができる。メモリインターフェイス６１５は、メモリ読出しおよびメモリ書込み動作、例えば、カーネル記憶メモリ６０５およびカーネルスイッチＬＵＴメモリ６１０へ／からのメモリ読出しおよびメモリ書込みを制御する。ストリームコントローラマネジャ６２０、ＦＳＭカーネル／ＬＵＴフェッチユニット６２５、およびストリームコントローラ命令制御ユニット６３０は、ストリームコントローラ６００および／または画像プロセッサ５００の処理要件に基づいて、画像処理用のメモリから、カーネルを動的にロードして更新するように設計され、構成されている。ストリームコントローラ６００は、このように、様々な画像処理要件を容易化することができる。
【００４９】
動作中に、ストリームコントローラ６００は、例えば、垂直記述子（ＶＤ）入力信号および水平記述子（ＨＤ）入力信号などの、入力信号を受け取る。ＶＤ入力信号は、画像フレーム開始フラグを表わし、ＨＤ入力信号は画像ピクセルライン開始フラグを表わす。ＶＤ入力信号およびＨＤ入力信号は、カウンタ６３５によって、垂直カウンタ信号（ＶＣＮＴ）および水平カウンタ信号（ＨＣＮＴ）をそれぞれ発生するのに使用され、それによってストリームコントローラ６００は、垂直方向と水平方向の両方において、カーネルスイッチ境界（ここで、カーネルスイッチ境界は、画像プロセッサ５００が、画像フレームを処理する間に（例えば、Ｋ０からＫ１へのように）１つのカーネルから別のカーネルに変わる場所である）を特定することが可能であり、カーネル更新コントローラ６４０は、上記で考察したようにカーネルスイッチＬＵＴを更新することができる。
【００５０】
ストリームコントローラ６００は、バンクＡカーネルバッファ６４５およびバンクＢカーネルバッファ６５０を、さらに含む。バンクＡカーネルバッファ６４５およびバンクＢカーネルバッファ６５０は、画像処理中のシームレスなカーネルスイッチングをサポートする。例えば、動作において、ストリーム処理ユニット５２０がバンクＡカーネルバッファ６４５によって記憶されたカーネルを実行する間に、ストリームコントローラ６００は、実行のために次のカーネルをフェッチして、次のカーネルをバンクＢカーネルバッファ６５０に記憶することが可能であり、その逆も可能である。画像処理中に、カーネルバッファ６４５および６５０は、このように、前後にピンポン運動して（ping pong back and forth）、カーネルスイッチングをサポートするとともに、ストリーム処理ユニット５２０のＡＬＵが２つの隣接するカーネルを矛盾なく実行するのをさらにサポートする。２つの隣接するカーネルの実行をサポートすることによって、処理効率を向上させるとともに、ハードウェアコストおよびサイズを低減することができる（例えば、ストリーム処理ユニット５２０のＡＬＵＳの数を低減することができる）。カーネルバッファ６４５および６５０は、パイプラインカーネルスイッチングＬＵＴと協働して、シームレスなカーネルスイッチングを達成する。
【００５１】
このようにストリームコントローラ６００は、処理効率を減少させることなく、またはハードウェアコストまたはオーバヘッドを増大させることなく、フレキシブルな多重カーネル画像処理を容易化し、サポートする。ストリームコントローラ６００は、カーネル境界においてデータを失うことなく、カーネルスイッチングをさらに容易化する。対照的に、従来式のストリームプロセッサは、通常、同一のカーネルを用いて画像フレームを処理し、複数のカーネルを用いて画像フレームを処理する能力に欠ける。一部の従来型ストリームプロセッサは、画像フレームを画像処理する際のカーネルスイッチングをサポートすることができるが、そのようなカーネルスイッチングは、例えば、追加のＡＬＵ、メモリ、その他の計算資源、またはそれらの組合せなどの、追加のコンピュータ資源を追加することによって達成されるものであり、それによってプロセッサ面積オーバヘッドおよびコストを不都合に増大させる。
【００５２】
図１１は、本開示の様々な態様による、例えばディジタルカメラなどの、カメラ７００の概略ブロック図である。カメラ７００は、レンズ部分７１０、画像センサ部分７２０、フロントエンド部分７３０、およびバックエンド部分７４０を含む。一例において、フロントエンド部分７３０は、アナログ・ディジタル部分であり、バックエンド部分７４０はディジタル部分である。フロントエンド部分７３０には、相関する二重サンプラ（複数を含む）７３２、アナログ・ツー・ディジタルコンバータ（複数を含む）７３４、信号処理ユニット７３６（例えば、ディジタル信号プロセッサ）、およびプログラマブルタイミング発生器／画像センサドライバユニットを含めることができる。
【００５３】
バックエンド部分７４０は、画像信号プロセッサ７５０を含む。一例において、画像信号プロセッサ７５０は、ストリームコントローラ６００、および本明細書において考察した（例えば、図１〜１０を参照して記述した）、記述子ベースカーネル定義方法を実施するストリーム画像プロセッサである。バックエンド部分７４０には、縮小命令セットコンピュータ（ＲＩＳＣ）プロセッサ７５２、ディジタル、アナログビデオユニット７５４、入出力（Ｉ／Ｏ）コントローラユニット７５６、ＪＰＥＧおよび／またはＭＰＥＧエンコーダ／デコーダユニット７５８、およびメモリコントローラ７６０をさらに含めることができる。カメラ７００には、レンズ、シャッター、フラッシュコントロールユニット７７０およびメモリユニット７８０（例えば、ＳＤＲＡＭ、ＤＤＲ、その他）をさらに含めることができる。図１１は、本開示の発明概念をさらに良く理解するために分かり易くする目的で簡略化されている。追加の特徴をカメラ７００に追加することが可能であるとともに、以下に記載する特徴の一部は、カメラ７００のその他の態様においては、置換または除去することができる。
【００５４】
本明細書において概説した仕様、寸法、および関係は、例示と教示の目的でのみ提示したものである。これらのそれぞれは、本開示の趣旨、または添付の特許請求項の範囲から逸脱しない範囲で相当に変更してもよい。これらの仕様は、１つの非限定の実施例にのみ適用されものであり、したがってそのように解釈すべきである。前述の説明においては、例示用態様を、特定のプロセッサ配設を参照して説明した。添付の特許請求項の範囲から逸脱することなく、様々な修正および変更を、そのような態様に対して行ってもよい。したがって、説明および図面は、限定の意味ではなく、例証のためのものであるとみなすべきである。
【００５５】
先述の図を参照して記述した動作およびステップは、本明細書に記載した様々な装置、プロセッサ、デバイスおよび／またはシステムによって、またはその内部で実行できる、可能なシナリオの一部だけを示す。これらの動作の一部は、適当な場合には、消去または除去するか、またはステップは、考察した概念の範囲から逸脱することなく、相当に修正または変更してもよい。さらに、これらの動作のタイミングは、相当に改変して、その場合でも本開示で教示された結果を達成することができる。先述の動作フローは、例示と考察の目的で提示したものである。任意適当な配設、時間配列（chronologies）、構成、およびタイミングメカニズムを、考察した概念の教示から逸脱することなく提供できるという点で、実質的なフレキシビリティがシステムによって提供される。
【００５６】
例示用実装形態においては、本明細書において概説した処理活動（processing activities）の少なくとも一部分は、ソフトウェアに実装してもよい。態様によっては、これらの特徴の１つまたは２つ以上を、図１〜１１の要素の外部に設けられるか、または意図する機能を達成するために適当な方法で連結された、ハードウェアに実装してもよい。様々な構成要素は、本明細書において概説した動作を達成するために協調することのできる、ソフトウェア（または往復ソフトウェア（reciprocating software））を含んでもよい。さらにその他の態様においては、これらの要素は、任意適当なアルゴリズム、ハードウェア、ソフトウェア、構成要素、モジュール、インターフェイス、またはその動作を容易化するオブジェクトを含んでもよい。
【００５７】
さらに、本明細書にそれぞれ記載した画像プロセッサ５００、ストリームコントローラ６００、およびカメラ７００（および／またはその関連する構造）は、ネットワーク環境においてデータまたは情報を受信、送信、および／またはその他の方法で通信するための好適なインターフェイスも含んでもよい。さらに、記述したプロセッサに関連する構成要素の一部は、除去するか、または他の方法で連結してもよい。一般的には、図において示した配設は、その表現においてより論理的であってもよく、これに対して、物理的アーキテクチャは、様々な順列、組合せ、および／またはこれらの要素の混生物（hybrid）を含んでもよい。なお、本明細書において概説した動作目的を達成するのに、無数の可能な設計構成を使用することができることに留意されたい。したがって、関連するインフラストラクチャは、無数の代用配設、設計選択、デバイス可能性、ハードウェア構成、ソフトウェア実装、装備選択肢、その他を有する。
【００５８】
一部の例示用態様においては、１つまたは２つ以上のメモリ要素が、本明細書において記載した動作に使用されるデータを記憶することができる。これには、非一時的媒体において命令（例えば、ソフウェア、ロジック、コード、その他）を記憶し、その命令が実行されて、本明細書に記載した活動が実施されるようにすることのできるメモリ要素を含む。任意好適なプロセッサ構成要素が、本明細書において詳述した動作を達成するためのデータに関連する、任意の種類の命令を実行することができる。一例において、画像プロセッサ５００、ストリームコントローラ６００、およびカメラ７００はそれぞれ、１つの状態または実体（state or thing）から別の状態または実体へと、要素または項目（例えば、データ）を変換することもできる。別の例においては、本明細書に概説した活動は、固定ロジックまたはプログラマブルロジック（例えば、プロセッサによって実行される、ソフトウェアおよび／またはコンピュータ命令）で実装してもよく、本明細書において識別される要素は、プログラマブルプロセッサ、プログラマブルディジタルロジック（例えば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブル読出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブル読出し専用メモリ（ＥＥＰＲＯＭ））、ディジタル論理を含むＡＳＩＣ、ソフトウェア、コード、電子命令、フラッシュメモリ、光ディスク、ＣＤ−ＲＯＭ、ＤＶＤＲＯＭ、磁気または光学カード、電子命令を記憶するのに適した他のタイプの機械可読媒体、またはそれらの任意適切な組合せ、のいずれかのタイプとすることができる。
【００５９】
動作に際して、画像プロセッサ５００および／またはストリームコントローラ６００は、それぞれ、任意好適なタイプの非一時的記憶媒体（例えば、ランダムアクセスメモリ（ＲＡＭ）、読出し専用メモリ（ＲＯＭ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、消去可能プログラマブル読出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、その他）、ソフトウェア、ハードウェア、または適切な場合に、特定のニーズに基づいて、その他任意好適な構成要素、デバイス、要素、もしくはオブジェクトに、情報を保持してもよい。さらに、画像プロセッサ５００、ストリームコントローラ６００、およびカメラ７００において追跡、送付、受信、または記憶されている情報は、特定のニーズおよび実装形態に基づいて、任意のデータベース、レジスタ、テーブル、キャッシュ、キュー、コントロールリスト、または記憶構造に提示してもよく、これらのすべては、任意適当な時間フレームにおいて参照することもできる。本明細書において考察したメモリアイテムはいずれも、広義の用語「メモリ」の範囲に包含されるものと解釈すべきである。同様に、本明細書において記述した潜在的な処理要素、モジュール、および機械はいずれも、広義の用語「プロセッサ」の範囲に包含されるものと解釈すべきである。
【００６０】
本明細書において記述した機能の全部または一部を実現するコンピュータプログラムロジックは、それには限定されないが、ソースコード形態、コンピュータ実行可能形態、および様々な中間形態（例えば、アセンブラ、コンパイラ、リンカー、またはロケータ）を含む、様々な形態に具現化される。一例において、ソースコードは、様々なオペレーティングシステムまたはオペレーティング環境での使用のための、例えば、オブジェクトコード、アセンブリ言語、または、例えばＦｏｒｔｒａｎ、Ｃ、Ｃ＋＋、ＪＡＶＡ（登録商標）、またはＨＴＭＬなどの高レベル言語などの、様々なプログラム言語に実装された一連のコンピュータプログラム命令を含む。ソースコードは、様々なデータ構造および通信メッセージを定義して使用してもよい。ソースコードは、（例えば、インタープリタを介して）コンピュータ実行可能形態であるか、またはソースコードは、コンピュータ実行可能形態に（例えば、トランスレータ、アセンブラ、またはコンパイラを介して）変換してもよい。
【００６１】
以上は、当業者が本開示の観点をより良く理解できるように、いくつかの態様の特徴を概説するものである。当業者は、本明細書において紹介した態様と同一の目的を実施すること、および／または同一の利点を達成するために、その他の工程および構造を設計または修正するための基礎として、本開示を容易に使用することができることを理解すべきである。当業者はまた、そのような均等な構築は、本開示の趣旨と範囲から逸脱するものではないこと、およびそれらに、本開示の趣旨と範囲から逸脱することなく、様々な変更、置換および改変を行ってもよいことも認識すべきである。
【００６２】
多数のその他の変更、置換、変形、改変、および修正を、当業者は把握することが可能であり、本開示は、そのようなすべての変更、置換、変形、改変、および修正を、添付の特許請求項の範囲に含めることを意図している。本明細書に添付された特許請求の範囲の解釈において、米国特許商標局（ＵＳＰＴＯ）および、さらには本出願に対して発行される任意の特許の読者を支援するために、出願人が、（ａ）特定の請求項において「〜する手段（means for）」または「〜のステップ（steps for）」の文言が特に使用されない限り、添付の請求項のいずれかに、３５ＵＳＣセクション１１２のパラグラフ（６）を、本明細書の出願日に存在する状態で、引き合い出す意図はないこと、および（ｂ）明細書におけるいかなる文によっても、添付の特許請求の範囲に記載されないいかなる方法でも、本開示を限定する意図がないことを、出願人は注記しておきたい。
【００６３】
例示用態様の実装形態
特定の一例示用実装形態は、画像フレームに関連するカーネルパターンを定義する手段（例えば、ソフトウェア、ロジック、コード、ハードウェア、またはそれらの組合せ）、および定義されたカーネルパターンを用いて画像フレームを処理する手段を含んでもよい。様々な実装形態は、画像フレームに関連するカーネルブロックを定義し、画像フレームに関連するカーネル記述子を定義し、かつ画像フレームに関連するリンクテーブルを定義する手段をさらに含んでもよい。
【図１Ａ】
2014142939.tif 000003
【図１Ｂ】
2014142939.tif 000004
【図１Ｃ】
2014142939.tif 000005
【図２】
2014142939.tif 000006
【図３】
2014142939.tif 000007
【図４】
2014142939.tif 000008
【図５】
2014142939.tif 000009
【図６】
2014142939.tif 000010
【図７】
2014142939.tif 000011
【図８】
2014142939.tif 000012
【図９】
2014142939.tif 000013
【図１０】
2014142939.tif 000014
【図１１】
2014142939.tif 000015
【外国語明細書】
2014142939000001.pdf