(57)【特許請求の範囲】
【請求項１】
複数の入力データからなる入力ストリームが入力され、ストリームデータに所定のタスクを実行して複数の出力データからなる出力ストリームを出力する信号処理部を備える信号処理装置であって、
前記入力ストリームは入力データを前記信号処理部に順次入力し、前記出力ストリームを構成する出力データを前記信号処理部から順次出力し、前記信号処理部の処理の経過に応じた前記ストリームデータにおけるデータの位置情報を示すポインタを備え、
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する値を退避した後、前記第２のタスクを実行し、
前記第２のタスクが完了したとき、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を求め、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの前記入力ストリームにおける位置情報を求め、
前記信号処理装置は、前記入力ストリームを格納し前記出力ストリームを書き込むメモリと、タスク切替制御部とをさらに備え、
前記信号処理部は、入力アドレスレジスタと出力アドレスレジスタとを備え、前記入力アドレスレジスタは、前記信号処理部が読み込む前記入力データの前記メモリ上のアドレスを保持し、前記出力アドレスレジスタは、前記信号処理部が書き込む前記出力データの前記メモリ上のアドレスを保持し、
前記タスク切替制御部は、前記第２のタスクが完了したとき、
出力位置関数により、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの出力ストリームにおける位置情報を算出し、出力アドレス関数により、前記出力位置関数の出力に基づいて、前記次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記出力アドレスレジスタに書き込み、
入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記入力アドレスレジスタに書き込み、
前記第１のタスクが、前記信号処理部によって、前記入力ストリームに信号処理を実施して得た出力ストリームを順次次の信号処理の入力ストリームとする複数の信号処理を含む信号処理タスクであり、
前記複数の信号処理のそれぞれについて、次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの位置情報を出力する部分位置関数を備え、
前記複数の信号処理のうち前記第１のタスクにおいて最後に実行される信号処理に対応する部分位置関数に前記退避したポインタの値を入力し、
前記複数の信号処理のうち前記第１のタスクにおいて後に実行される信号処理に対応する部分位置関数の出力を、その直前に実行される信号処理に対応する部分位置関数に入力することにより、順次ネスティングして、前記入力位置関数を構成する、信号処理装置。
【請求項２】
請求項１において、前記ストリームデータが画像データであって、前記ポインタは、前記信号処理部が出力を完了した出力データの前記出力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを保持し、
前記出力位置関数は、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出し、
前記入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する、信号処理装置。
【請求項３】
請求項１において、前記ストリームデータが画像データであって、前記ポインタは、前記信号処理部が入力を完了した入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを保持し、
前記出力位置関数は、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出し、
前記入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する、信号処理装置。
【請求項４】
請求項１において、前記ストリームデータは画像データであって、前記信号処理部によって実施される信号処理の１つがｎ×ｎ（ｎは３以上の奇数）の空間フィルタであって、前記空間フィルタ処理に対応する部分位置関数が、出力を完了したライン番号を入力し、前記退避させたポインタの値の（ｎ−１）／２ライン前のライン番号を出力し、
前記入力位置関数が前記空間フィルタ処理に対応する前記部分位置関数を含む、信号処理装置。
【請求項５】
請求項１において、前記ストリームデータが画像データであって、前記信号処理部によって実施される信号処理の１つが、先頭から第Ｖ−ｎ＋１ラインの入力ストリームを読み込んで先頭から第ｎラインに出力する垂直方向のサイズがＶの画像の上下反転処理であって、前記ポインタは、前記上下反転処理の出力を完了したライン番号ｐを保持し、前記上下反転処理に対応する部分位置関数は、第Ｖ−ｐラインを出力する、信号処理装置。
【請求項６】
請求項１において、
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する第１の値を退避した後、前記第２のタスクを実行し、
前記第２のタスクを実行中に第３のタスクの優先処理が要求されたとき、前記ポインタが保持する第２の値を退避した後、前記第３のタスクを実行し、
前記第３のタスクが完了したとき、前記退避したポインタの第２の値に基づいて、前記第２のタスクにおいて次に出力すべき出力データの位置情報を求めて前記第２のタスクを再開し、
前記第２のタスクが完了したとき、前記退避したポインタの第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの位置情報を求めて前記第１のタスクを再開する、信号処理装置。
【請求項７】
ＣＰＵとメモリと信号処理部とがそれぞれバスに接続されており、
前記信号処理部は、信号処理モジュールと信号処理制御部とを備え、
前記信号処理モジュールは、入力された複数の入力データからなる入力ストリームを入力し、ストリームデータに所定の信号処理を施して複数の出力データからなる出力ストリームを出力し、
前記信号処理制御部は、前記信号処理モジュールの処理経過に応じた処理対象データのストリームデータにおける位置情報を指すポインタを備え、前記メモリから読み出しアドレスを指定して前記入力データを読み出して前記信号処理モジュールに入力し、書き出しアドレスを指定して前記信号処理モジュールの前記出力データを前記メモリに出力し、
前記ＣＰＵは、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する値を退避させた後、前記信号処理部に前記第２のタスクを実行させ、前記第２のタスクが完了したとき、前記退避させたポインタの値を復帰させ、前記復帰したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データを格納すべき前記メモリ上のアドレスを求めて前記書き出しアドレスを設定し、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データが格納されているアドレスを求めて前記読み出しアドレスを設定し、
前記信号処理制御部は、前記読み出しアドレスを保持する読み出しアドレスレジスタと、前記書き出しアドレスを保持する書き出しアドレスレジスタと、前記ポインタの値を保持するポインタレジスタとを備え、
前記ＣＰＵは、前記優先処理が要求されたとき、前記ポインタレジスタの第１の値を前記メモリに退避し、
前記第２のタスクが完了したとき、前記第１の値を前記メモリから前記ポインタレジスタに復帰し、
出力位置関数により、前記第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を算出し、出力アドレス関数により、前記出力位置関数の出力に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記書き出しアドレスレジスタに書き込み、
入力位置関数により、前記第１の値に基づいて前記先頭の入力データの前記入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記読み出しアドレスレジスタに書き込み、
前記第１のタスクが、前記信号処理部によって、前記入力ストリームに信号処理を実施して得た出力ストリームを順次次の信号処理の入力ストリームとする複数の信号処理を含む信号処理タスクであり、
前記複数の信号処理のそれぞれについて、次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの位置情報を出力する部分位置関数を備え、
前記複数の信号処理のうち前記第１のタスクにおいて最後に実行される信号処理に対応する部分位置関数に前記退避したポインタの値を入力し、
前記複数の信号処理のうち前記第１のタスクにおいて後に実行される信号処理に対応する部分位置関数の出力を、その直前に実行される信号処理に対応する部分位置関数に入力することにより、順次ネスティングして、前記入力位置関数を構成する、半導体装置。
【請求項８】
請求項７において、前記信号処理制御部は、パラメータレジスタをさらに備え、前記信号処理モジュールは、前記パラメータレジスタが保持するパラメータにしたがって信号処理を実行し、
前記ＣＰＵは、前記優先処理が要求されたとき、前記パラメータレジスタが保持する値を退避せずに破棄し、前記信号処理モジュールに前記第２のタスクを実行させるためのパラメータを、前記パラメータレジスタに書き込む、半導体装置。
【請求項９】
請求項８において、前記パラメータは、前記信号処理モジュールが実行する処理の処理内容ごとに前記メモリに格納されており、前記ＣＰＵは、処理タスクが要求されたとき、前記処理タスクの処理内容に対応する前記パラメータを前記メモリから読み出して前記パラメータレジスタに書き込む、半導体装置。
【請求項１０】
ＣＰＵとメモリと信号処理部とコンテキスト処理部がそれぞれバスに接続されており、
前記信号処理部は、信号処理モジュールと信号処理制御部とを備え、
前記信号処理モジュールは、入力された複数の入力データからなる入力ストリームを入力し、ストリームデータに所定の信号処理を施して複数の出力データからなる出力ストリームを出力し、
前記信号処理制御部は、前記信号処理モジュールの処理経過に応じた処理対象データのストリームデータにおける位置情報を指すポインタを備え、前記メモリから読み出しアドレスを指定して前記入力データを読み出して前記信号処理モジュールに入力し、書き出しアドレスを指定して前記信号処理モジュールの前記出力データを前記メモリに出力し、
前記コンテキスト処理部は、コンテキスト位置記憶部と復元部とを備え、
前記コンテキスト処理部は、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する値を前記コンテキスト位置記憶部に退避させた後、前記信号処理部に前記第２のタスクを実行させ、前記第２のタスクが完了したとき、前記退避させたポインタの値を復帰させ、
前記復元部は、前記復帰したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データを格納すべき前記メモリ上のアドレスを求めて前記書き出しアドレスを設定し、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データが格納されているアドレスを求めて前記読み出しアドレスを設定し、
前記信号処理制御部は、前記読み出しアドレスを保持する読み出しアドレスレジスタと、前記書き出しアドレスを保持する書き出しアドレスレジスタと、前記ポインタの値を保持するポインタレジスタとを備え、
前記コンテキスト処理部は、前記優先処理が要求されたとき、前記ポインタレジスタの第１の値を前記コンテキスト位置記憶部に退避し、
前記第２のタスクが完了したとき、前記コンテキスト処理部は、前記第１の値を前記コンテキスト位置記憶部から前記ポインタレジスタに復帰し、
前記復元部は、出力位置関数により、前記第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を算出し、出力アドレス関数により、前記出力位置関数の出力に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記書き出しアドレスレジスタに書き込み、
入力位置関数により、前記第１の値に基づいて前記先頭の入力データの前記入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記読み出しアドレスレジスタに書き込み、
前記第１のタスクが、前記信号処理部によって、前記入力ストリームに信号処理を実施して得た出力ストリームを順次次の信号処理の入力ストリームとする複数の信号処理を含む信号処理タスクであり、
前記複数の信号処理のそれぞれについて、次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの位置情報を出力する部分位置関数を備え、
前記複数の信号処理のうち前記第１のタスクにおいて最後に実行される信号処理に対応する部分位置関数に前記退避したポインタの値を入力し、
前記複数の信号処理のうち前記第１のタスクにおいて後に実行される信号処理に対応する部分位置関数の出力を、その直前に実行される信号処理に対応する部分位置関数に入力することにより、順次ネスティングして、前記入力位置関数を構成する、半導体装置。
【請求項１１】
請求項１０において、前記信号処理制御部は、パラメータレジスタをさらに備え、前記信号処理モジュールは、前記パラメータレジスタが保持する処理パラメータにしたがって信号処理を実行し、
前記復元部は、前記優先処理が要求されたとき、前記パラメータレジスタが保持する値を退避せずに破棄し、前記信号処理モジュールに前記第２のタスクを実行させるための処理パラメータを、前記パラメータレジスタに書き込む、半導体装置。
【請求項１２】
請求項１１において、前記処理パラメータは、前記信号処理モジュールが実行する処理の内容ごとに前記メモリに格納されており、前記復元部は、タスクが要求されたとき、前記タスクの処理内容に対応する前記処理パラメータを前記メモリから前記パラメータレジスタに転送する、半導体装置。
【請求項１３】
請求項１０において、
前記コンテキスト処理部は、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記第１のタスクのコンテキスト番号と前記ポインタが保持する値とを対応付けて前記コンテキスト位置記憶部に退避させ、
前記第２のタスクが完了したとき、前記復元部は、退避した前記コンテキスト番号と復帰した前記ポインタの値とに基づいて、前記書き出しアドレスと前記読み出しアドレスとを設定する、半導体装置。
【請求項１４】
請求項１３において、前記信号処理制御部は、パラメータレジスタをさらに備え、前記信号処理モジュールは、前記パラメータレジスタが保持する処理パラメータにしたがって信号処理を実行し、
前記復元部は、前記優先処理が要求されたとき、前記パラメータレジスタが保持する値を退避せずに破棄し、前記信号処理モジュールに前記第２のタスクを実行させるための処理パラメータを、前記パラメータレジスタに書き込む、半導体装置。
【請求項１５】
請求項１４において、前記処理パラメータは、前記信号処理モジュールが実行する処理の内容ごとに前記メモリに格納されており、前記復元部は、前記優先処理が完了したとき、前記退避したコンテキスト番号に基づいて、前記第１のタスクの処理内容に対応する前記処理パラメータを前記メモリから前記パラメータレジスタに転送する、半導体装置。
【請求項１６】
請求項１５において、
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記コンテキスト処理部は、前記第１のタスクのコンテキスト番号と前記ポインタが保持する第１タスクのポインタ値とを対応付けて前記コンテキスト位置記憶部に退避させ、
前記第２のタスクを実行中に第３のタスクの優先処理が要求されたとき、前記コンテキスト処理部は、前記第２のタスクのコンテキスト番号と前記ポインタが保持する第２タスクのポインタ値とを対応付けて前記コンテキスト位置記憶部に退避させ、
前記第３のタスクが完了したとき、前記復元部は、前記第２のタスクのコンテキスト番号に基づいて前記第２のタスクの処理パラメータを復帰し、前記第２のタスクのポインタの値を復元し、
前記第２のタスクが完了したとき、前記復元部は、前記第１のタスクのコンテキスト番号に基づいて前記第１のタスクの処理パラメータを復帰し、前記第１のタスクのポインタの値を復元する、半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の信号処理タスクを実行する装置およびＬＳＩに係り、特に、優先処理へのタスク切替えに伴うオーバーヘッドを抑えるために有効な技術に関する。
【背景技術】
【０００２】
携帯電話、デジタルカメラ、カーナビゲーションシステムなど、画像を扱うディジタルディジタル機器において、画像の解像度が大型化し、機能が高度化、複雑化する傾向にあるため、画像などのストリームデータを対象とした信号処理を行うＬＳＩなどには、複数の画像処理タスクを実行することが求められている。そのとき、信号処理装置においては、優先処理要求に伴うタスク切替えが発生するが、その際のオーバーヘッドを低く抑えることが求められる。優先処理要求に伴うタスク切替えとは、あるタスクの実行中に他のタスクを優先処理する要求を受け付け、実行中のタスクを中断して優先すべきタスクを実行し、優先処理の完了を待って元のタスクに復帰することをいう。タスク切替えのために、一般には、コンテキストスイッチと呼ばれる手法が用いられる。コンテキストスイッチは、タスク切り替えの際に実行中のタスクの途中経過情報であるレジスタの値や状態を退避し、タスクを切り替えて優先処理を実行し、優先処理が完了したら、退避した情報を復元して元のタスクを再開するという手法である。画像などのストリームデータを対象とした信号処理のタスクは、一般のソフトウェアと比較して、取り扱う情報量が膨大であるため、実行中のタスクの途中経過をメモリなどに退避しようとした場合、退避および復帰に要する時間が膨大となり、オーバーヘッドが大きくなるという問題がある。
【０００３】
特に、画像処理はフレーム単位の処理を行うことが多く、１つのフレームの画像処理が完了する毎に割り込み等通知を行う仕組みを持ち、これらをトリガーとしてシステムとして各種処理を行っていく。処理する画像の高解像化（画像サイズの大型化）、画像処理の複雑化により１フレームの処理にかける時間・データ量がさらに増大してきている。そのため、実行中の画像処理タスクの途中経過をメモリなどに退避しようとした場合、退避および復帰に要する時間はより膨大となり、オーバーヘッドがより大きくなるという問題がある。
【０００４】
特許文献１は、第０００７段落で「画像処理は一括して処理するデータが大量（例えば１画面分の画像）であるため、コンテキストスイッチは出来ない（不可能ではないが非常に効率が悪い）」旨を指摘し、マルチタスクの画像処理を行うために、複数の画像処理装置を設けて並列動作させ、コンテキストスイッチングが発生しないようにスケジューリングしている。
【０００５】
特許文献２は、撮像して得た画像データに対して、画像処理部で圧縮処理などを行って記録する撮像装置において、圧縮処理の実行中に表示を優先して行う技術が開示されている。この装置においては、画像処理部は表示には使用されないので、表示を優先させている間、画像処理部を停止させておけば、処理途中の状態は維持され、優先処理から復帰するときはそのまま画像処理部を再開させればよい。つまり、画像処理部でのコンテキストスイッチは発生しない。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−８６７８９号公報
【特許文献２】特開２００６−１９７５４８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
本願において開示される実施の形態においては、ストリームデータに対してマルチタスクを行う信号処理装置において、優先処理要求に伴うタスク切替えが発生したときに、退避すべき情報量を必要最小限にし、退避および復帰に要する時間的なオーバーヘッドを抑えることを課題とする。
【０００８】
その他の課題と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本願において開示される実施の形態の概要を簡単に説明すれば下記の通りである。
【００１０】
すなわち、信号処理部の処理の経過に応じたストリームデータにおけるデータの位置情報を示すポインタを備え、優先タスクの処理が要求されたときには、そのポインタの値のみを退避する。復帰のときには、退避したポインタの値に基づいて、復帰後のタスクにおいて次に出力すべき出力ストリームデータの位置情報を求め、そのデータを算出するために信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの入力ストリームにおける位置情報を求めて処理を再開する。
【発明の効果】
【００１１】
本願において開示される実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１２】
すなわち、退避すべき情報量はポインタの値のみで必要最小限であり、膨大な情報の退避と復帰を行わず、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施形態１に係る信号処理装置の機能ブロック図である。
【図２】図２は、実施形態１に係る半導体装置のブロック図である。
【図３】図３は、信号処理のタスクを実行中に、さらなる信号処理タスクの実行要求を受けたときの処理フローを表すフローチャートである。
【図４】図４は、優先処理を完了した後、元の信号処理を再開するときの処理フローを表すフローチャートである。
【図５】図５は、タスク切替前の信号処理部の状態を表す説明図である。
【図６】図６は、タスク切替後、優先処理を実行中の信号処理部の状態を表す説明図である。
【図７】図７は、優先処理を完了し復帰した後の、信号処理部の状態を表す説明図である。
【図８】図８は、実施形態１によるタスク切替の効果を表す説明図である。
【図９】図９は、空間フィルタ処理に対応する画像位置関数の考え方を表す説明図である。
【図１０】図１０は、上下反転処理に対応する画像位置関数の考え方を表す説明図である。
【図１１】図１１は、ブレンド処理に対応する画像位置関数の考え方を表す説明図である。
【図１２】図１２は、ブロック処理におけるタスク切替についての説明図である。
【図１３】図１３は、フレーム間処理を行う信号処理装置の機能ブロック図である。
【図１４】図１４は、優先処理中のさらなる優先処理要求によるタスク切替についての説明図である。
【図１５】図１５は、コンテキスト処理部を備える半導体装置のブロック図である。
【発明を実施するための形態】
【００１４】
１．実施の形態の概要
先ず、本願において開示される実施の形態について概要を説明する。実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１５】
〔１〕＜ポインタのみを退避し、復帰後の先頭入力データの位置をポインタから算出＞
複数の入力データからなる入力ストリーム（１１）が入力され、ストリームデータに所定のタスクを実行して複数の出力データからなる出力ストリーム（１２）を出力する信号処理部（１０）を備える、信号処理装置であって、以下のように動作する。
【００１６】
前記入力ストリームは入力データを前記信号処理部に順次入力し、前記出力ストリームを構成する出力データを前記信号処理部から順次出力し、前記信号処理部の処理の経過に応じた前記ストリームデータにおけるデータの位置情報を示すポインタ（２１）を備える。
【００１７】
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき（８１）、前記ポインタが保持する値を退避（８４）した後、前記第２のタスクを実行する（８６）。
【００１８】
前記第２のタスクが完了したとき（８７）、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を求め（９０）、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの前記入力ストリームにおける位置情報を求める（９０）。
【００１９】
これにより、退避すべき情報量はポインタの値のみで必要最小限であり、膨大な情報の退避と復帰を行わず、復帰後の信号処理を再開するために必要な入力データの位置情報はそのポインタ値から算出しているだけなので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【００２０】
〔２〕＜入出力位置関数と入出力アドレス関数＞
項１において、前記信号処理装置は、前記入力ストリームを格納し前記出力ストリームを書き込むメモリ（４０）と、タスク切替制御部（５０）とを備え、以下のように動作する。
【００２１】
前記信号処理部は、入力アドレスレジスタ（２３）と出力アドレスレジスタ（２２）とを備え、前記入力アドレスレジスタは、前記信号処理部が読み込む前記入力データの前記メモリ上のアドレスを保持し、前記出力アドレスレジスタは、前記信号処理部が書き込む前記出力データの前記メモリ上のアドレスを保持する。
【００２２】
前記タスク切替制御部は、前記第２のタスクが完了したとき、出力位置関数により、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの出力ストリームにおける位置情報を算出し、出力アドレス関数（５２）により、前記出力位置関数の出力に基づいて、前記次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記出力アドレスレジスタに書き込む。
【００２３】
前記タスク切替制御部は、前記第２のタスクが完了したとき、入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記入力アドレスレジスタに書き込む。
【００２４】
これにより、タスク切替制御部におけるアドレスの算出が簡略化される。
【００２５】
〔３〕＜ポインタは出力済みライン番号等を保持＞
項２において、前記ストリームデータが画像データであって、前記ポインタは、前記信号処理部が出力を完了した出力データの前記出力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを保持する。
【００２６】
前記出力位置関数は、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する。
【００２７】
前記入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する。
【００２８】
これにより、出力位置関数は、退避したポインタ値に１を加算して出力すればよく、簡略化される。
【００２９】
〔４〕＜ポインタは入力済みライン番号等を保持＞
項２において、前記ストリームデータが画像データであって、前記ポインタは、前記信号処理部が入力を完了した入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを保持する。
【００３０】
前記出力位置関数は、前記退避したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する。
【００３１】
前記入力位置関数により、前記退避したポインタの値に基づいて、前記先頭の入力データの前記入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせを算出する。
【００３２】
これにより、入力位置関数は、退避したポインタ値に１を加算して出力すればよく、簡略化される。
【００３３】
〔５〕＜位置関数を部分位置関数のネスティングにより構成＞
項２、３、または４において、前記第１のタスクが、前記信号処理部によって、前記入力ストリームに信号処理を実施して得た出力ストリームを順次次の信号処理の入力ストリームとする複数の信号処理を含む信号処理タスクであり、以下のように動作する。
【００３４】
前記複数の信号処理のそれぞれについて、次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データの位置情報を出力する部分位置関数を備える。前記複数の信号処理のうち前記第１のタスクにおいて最後に実行される信号処理に対応する部分位置関数に前記退避したポインタの値を入力し、前記複数の信号処理のうち前記第１のタスクにおいて後に実行される信号処理に対応する部分位置関数の出力を、その直前に実行される信号処理に対応する部分位置関数に入力することにより、順次ネスティングして、前記入力位置関数を構成する。
【００３５】
これにより、信号処理が複数の信号処理の組合せである場合であっても、入力位置関数と出力位置関数を適切に構成することができる。
【００３６】
〔６〕＜空間フィルタ（ＦＩＲフィルタ）＞
項５において、前記ストリームデータは画像データであって、前記信号処理部によって実施される信号処理の１つがｎ×ｎ（ｎは３以上の奇数）の空間フィルタであって、前記空間フィルタ処理に対応する部分位置関数が、出力を完了したライン番号を入力し、前記退避させたポインタの値の（ｎ−１）／２ライン前のライン番号を出力し、前記入力位置関数が前記空間フィルタ処理に対応する前記部分位置関数を含む。
【００３７】
これにより、信号処理が画像の空間フィルタを含む実施の形態を提供することができる。
【００３８】
〔７〕＜上下反転処理＞
項５において、前記ストリームデータが画像データであって、前記信号処理部によって実施される信号処理の１つが、先頭から第Ｖ−ｎ＋１ラインの入力ストリームを読み込んで先頭から第ｎラインに出力する垂直方向のサイズがＶの画像の上下反転処理であって、前記ポインタは、前記上下反転処理の出力を完了したライン番号ｐを保持し、前記上下反転処理に対応する部分位置関数は、第Ｖ−ｐラインを出力する。
【００３９】
これにより、信号処理が画像の上下反転処理を含む実施の形態を提供することができる。
【００４０】
〔８〕＜多重の優先処理におけるタスク切替＞
項１乃至７のうちの１項において、以下のように動作する。
【００４１】
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する第１の値を退避した後、前記第２のタスクを実行し、さらに、前記第２のタスクを実行中に第３のタスクの優先処理が要求されたとき、前記ポインタが保持する第２の値を退避した後、前記第３のタスクを実行する。
【００４２】
前記第３のタスクが完了したとき、前記退避したポインタの第２の値に基づいて、前記第２のタスクにおいて次に出力すべき出力データの位置情報を求めて前記第２のタスクを再開し、さらに、前記第２のタスクが完了したとき、前記退避したポインタの第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの位置情報を求めて前記第１のタスクを再開する。
【００４３】
これにより、多重の優先処理におけるタスク切替が可能となる。
【００４４】
〔９〕＜半導体装置＞
ＣＰＵ（４５）とメモリ（４０）と信号処理部（１０）とがそれぞれバス（５５）に接続された半導体装置であって、以下のように構成される。
【００４５】
前記信号処理部は、信号処理モジュール（３０）と信号処理制御部（２０）とを備える。
【００４６】
前記信号処理モジュールは、入力された複数の入力データからなる入力ストリーム（１１）を入力し、ストリームデータに所定の信号処理を施して複数の出力データからなる出力ストリーム（１２）を出力する。
【００４７】
前記信号処理制御部は、前記信号処理モジュールの処理経過に応じた処理対象データのストリームデータにおける位置情報を指すポインタ（２１）を備え、前記メモリから読み出しアドレスを指定して前記入力データを読み出して前記信号処理モジュールに入力し、書き出しアドレスを指定して前記信号処理モジュールの前記出力データを前記メモリに出力する。
【００４８】
前記ＣＰＵは、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する値を退避させた後、前記信号処理部に前記第２のタスクを実行させる。前記第２のタスクが完了したとき、前記退避させたポインタの値を復帰させ、前記復帰したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データを格納すべき前記メモリ上のアドレスを求めて前記書き出しアドレスを設定する。さらに、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データが格納されているアドレスを求めて前記読み出しアドレスを設定する。
【００４９】
これにより、退避および復帰に要する時間的なオーバーヘッドを抑えた、半導体装置を提供することができる。
【００５０】
〔１０〕＜ＣＰＵがタスク切替を制御＞
項９において、前記信号処理制御部は、前記読み出しアドレスを保持する読み出しアドレスレジスタ（２３）と、前記書き出しアドレスを保持する書き出しアドレスレジスタ（２２）と、前記ポインタの値を保持するポインタレジスタ（２１）とを備える。
【００５１】
前記ＣＰＵは、前記優先処理が要求されたとき、前記ポインタレジスタの第１の値を前記メモリに退避する。
【００５２】
前記第２のタスクが完了したとき、前記第１の値を前記メモリから前記ポインタレジスタに復帰する。さらに、出力位置関数により、前記第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を算出し、出力アドレス関数により、前記出力位置関数の出力に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記書き出しアドレスレジスタに書き込む。また、入力位置関数により、前記第１の値に基づいて前記先頭の入力データの前記入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記読み出しアドレスレジスタに書き込む。
【００５３】
これにより、タスク切替制御部におけるアドレスの算出が簡略化される。
【００５４】
〔１１〕＜信号処理パラメータレジスタ＞
項９または１０において、前記信号処理制御部は、パラメータレジスタ（２４）をさらに備え、前記信号処理モジュールは、前記パラメータレジスタが保持するパラメータにしたがって信号処理を実行する。前記ＣＰＵは、前記優先処理が要求されたとき、前記パラメータレジスタが保持する値を退避せずに破棄し、前記信号処理モジュールに前記第２のタスクを実行させるためのパラメータを、前記パラメータレジスタに書き込む。
【００５５】
これにより、信号処理パラメータを退避しないので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【００５６】
〔１２〕＜信号処理パラメータをメモリから転送＞
項１１において、前記パラメータは、前記信号処理モジュールが実行する処理の処理内容ごとに前記メモリに格納されており、前記ＣＰＵは、処理タスクが要求されたとき、前記処理タスクの処理内容に対応する前記パラメータを前記メモリから読み出して前記パラメータレジスタに書き込む。
【００５７】
これにより、信号処理パラメータの管理が簡略化される。
【００５８】
〔１３〕＜コンテキスト処理部＞
ＣＰＵ（４５）とメモリ（４０）と信号処理部（１０）とコンテキスト処理部（７０）がそれぞれバス（５５）に接続された半導体装置であって、以下のように構成される。
【００５９】
前記信号処理部は、信号処理モジュール（３０）と信号処理制御部（２０）とを備える。
【００６０】
前記信号処理モジュールは、入力された複数の入力データからなる入力ストリーム（１１）を入力し、ストリームデータに所定の信号処理を施して複数の出力データからなる出力ストリーム（１２）を出力する。
【００６１】
前記信号処理制御部は、前記信号処理モジュールの処理経過に応じた処理対象データのストリームデータにおける位置情報を指すポインタ（２１）を備え、前記メモリから読み出しアドレス（２３）を指定して前記入力データを読み出して前記信号処理モジュールに入力し、書き出しアドレス（２２）を指定して前記信号処理モジュールの前記出力データを前記メモリに出力する。
【００６２】
前記コンテキスト処理部は、コンテキスト位置記憶部（７２）と復元部（７３）とを備える。
【００６３】
前記コンテキスト処理部は、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記ポインタが保持する値を前記コンテキスト位置記憶部に退避させた後、前記信号処理部に前記第２のタスクを実行させ、前記第２のタスクが完了したとき、前記退避させたポインタの値を復帰させる。
【００６４】
前記復元部は、前記復帰したポインタの値に基づいて、前記第１のタスクにおいて次に出力すべき出力データを格納すべき前記メモリ上のアドレスを求めて前記書き出しアドレスを設定し、前記次に出力すべき出力データを算出するために前記信号処理部に入力する必要がある全ての入力データのうち先頭の入力データが格納されているアドレスを求めて前記読み出しアドレスを設定する。
【００６５】
これにより、退避および復帰に要する時間的なオーバーヘッドを抑え、さらに、ＣＰＵに負荷をかけることなく、タスク切替を実行することができる。
【００６６】
〔１４〕＜コンテキストスイッチ部によるタスク切替制御＞
項１３において、前記信号処理制御部は、前記読み出しアドレスを保持する読み出しアドレスレジスタ（２３）と、前記書き出しアドレスを保持する書き出しアドレスレジスタ（２２）と、前記ポインタの値を保持するポインタレジスタ（２１）とを備え、以下のように動作する。
【００６７】
前記コンテキスト処理部は、前記優先処理が要求されたとき、前記ポインタレジスタの第１の値を前記コンテキスト位置記憶部に退避する。
【００６８】
前記第２のタスクが完了したとき、前記コンテキスト処理部は、前記第１の値を前記コンテキスト位置記憶部から前記ポインタレジスタに復帰する。さらに、前記復元部は、出力位置関数により、前記第１の値に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記出力ストリームにおける位置情報を算出し、出力アドレス関数により、前記出力位置関数の出力に基づいて、前記第１のタスクにおいて次に出力すべき出力データの前記メモリにおけるアドレスを算出して、前記書き出しアドレスレジスタに書き込む。また、入力位置関数により、前記第１の値に基づいて前記先頭の入力データの前記入力ストリームにおける位置情報を算出し、入力アドレス関数により、前記先頭の入力データの前記メモリにおけるアドレスを算出して、前記読み出しアドレスレジスタに書き込む。
【００６９】
これにより、タスク切替制御部におけるアドレスの算出が簡略化される。
【００７０】
〔１５〕＜信号処理パラメータレジスタ＞
項１３または１４において、前記信号処理制御部は、パラメータレジスタ（２４）をさらに備え、前記信号処理モジュールは、前記パラメータレジスタが保持する処理パラメータにしたがって信号処理を実行する。
【００７１】
前記復元部は、前記優先処理が要求されたとき、前記パラメータレジスタが保持する値を退避せずに破棄し、前記信号処理モジュールに前記第２のタスクを実行させるための処理パラメータを、前記パラメータレジスタに書き込む。
【００７２】
これにより、信号処理パラメータを退避しないので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【００７３】
〔１６〕＜信号処理パラメータをコンテキスト処理部がメモリから転送＞
項１５において、前記処理パラメータは、前記信号処理モジュールが実行する処理の内容ごとに前記メモリに格納されており、前記復元部は、タスクが要求されたとき、前記タスクの処理内容に対応する前記処理パラメータを前記メモリから前記パラメータレジスタに転送する。
【００７４】
これにより、信号処理パラメータの管理が簡略化される。
【００７５】
〔１７〕＜コンテキスト番号とポインタの紐付け＞
項１３乃至１６のうちの１項において、以下のように動作する。
【００７６】
前記コンテキスト処理部は、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記第１のタスクのコンテキスト番号と前記ポインタが保持する値とを対応付けて前記コンテキスト位置記憶部に退避させる。前記第２のタスクが完了したとき、前記復元部は、退避した前記コンテキスト番号と復帰した前記ポインタの値とに基づいて、前記書き出しアドレスと前記読み出しアドレスとを設定する。
【００７７】
これにより、復帰処理が簡略化される。
【００７８】
〔１８〕＜信号処理パラメータを復帰＞
項１７において、前記処理パラメータは、前記信号処理モジュールが実行する処理の内容ごとに前記メモリに格納されており、前記復元部は、前記優先処理が完了したとき、前記退避したコンテキスト番号に基づいて、前記第１のタスクの処理内容に対応する前記処理パラメータを前記メモリから前記パラメータレジスタに転送する。
【００７９】
これにより、信号処理パラメータの管理が簡略化される。
【００８０】
〔１９〕＜多重優先処理＞
項１８において、以下のように動作する。
【００８１】
第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、前記コンテキスト処理部は、前記第１のタスクのコンテキスト番号と前記ポインタが保持する第１タスクのポインタ値とを対応付けて前記コンテキスト位置記憶部に退避させる。
【００８２】
前記第２のタスクを実行中に第３のタスクの優先処理が要求されたとき、前記コンテキスト処理部は、前記第２のタスクのコンテキスト番号と前記ポインタが保持する第２タスクのポインタ値とを対応付けて前記コンテキスト位置記憶部に退避させる。
【００８３】
前記第３のタスクが完了したとき、前記復元部は、前記第２のタスクのコンテキスト番号に基づいて前記第２のタスクの処理パラメータを復帰し、前記第２のタスクのポインタの値を復元し、さらに、前記第２のタスクが完了したとき、前記復元部は、前記第１のタスクのコンテキスト番号に基づいて前記第１のタスクの処理パラメータを復帰し、前記第１のタスクのポインタの値を復元する。
【００８４】
これにより、多重の優先処理が可能となる。
【００８５】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００８６】
〔実施形態１〕
実施形態１に係る信号処理装置の構成について説明する。図１は、実施形態１に係る信号処理装置の機能ブロック図である。
【００８７】
実施形態１に係る信号処理装置は、複数の入力データからなる入力ストリーム１１が入力され、ストリームデータに所定のタスクを実行して複数の出力データからなる出力ストリーム１２を出力する信号処理部１０を備え、以下のように動作する。
【００８８】
入力ストリーム１１を構成する入力データは信号処理部１０に順次入力され、出力ストリーム１２を構成する出力データを信号処理部１０から順次出力される。信号処理部１０は、信号処理の経過に応じたストリームデータにおけるデータの位置情報を示すポインタ２１を備える。
【００８９】
信号処理装置は、第１のタスクを実行中に第２のタスクの優先処理が要求されたとき、ポインタ２１が保持する値を退避した後、第２のタスクを実行する。第２のタスクが完了したとき、退避したポインタの値に基づいて、第１のタスクにおいて次に出力すべき出力データの、出力ストリーム１２における位置情報を求め、その出力データを算出するために信号処理部１０に入力する必要がある全ての入力データのうち先頭の入力データの、入力ストリーム１１における位置情報を求める。
【００９０】
入力データおよび出力データの位置情報は、それぞれ、退避したポインタの値ｐを入力とする関数（５１、５２）によって算出することができる。
【００９１】
図１において破線で囲んだ部分が、本実施形態１の本質部分である。
【００９２】
このような信号処理装置は、例えば、図１に示すように、入力ストリーム１１を格納しており出力ストリーム１２を書き込むメモリ４０と、タスク切替制御部５０とを備え、信号処理部１０において、制御部２０に、入力アドレスレジスタ２３と出力アドレスレジスタ２２とを備えて構成することができる。入力アドレスレジスタ２３は、信号処理部１０が読み込む入力データのメモリ４０上のアドレスを保持し、出力アドレスレジスタ２２は、信号処理部が書き込む出力データのメモリ４０上のアドレスを保持している。信号処理部１０には、さらに信号処理モジュール３０を備えることができる。信号処理モジュール３０は、信号処理部１０が入力アドレスレジスタ２３によって指定する入力データストリーム１１を入力とし、設定された信号処理を実行して、出力アドレスレジスタによって指定されるアドレスに出力データストリーム１２を書き込む。
【００９３】
優先処理を終えて元の処理を再開するときに、退避したポインタの値を入力とし、入力データおよび出力データの位置情報を求める関数（５１、５２）の演算は、タスク切替制御部５０の機能として実現することができる。
【００９４】
このような信号処理装置は、例えば図２または図１５に示すような、半導体装置によって実施することができる。この半導体装置による実施形態については後述する。
【００９５】
実施形態１に係る信号処理装置の動作について説明する。
【００９６】
図３は、信号処理のタスクを実行中に、さらなる信号処理タスクの実行要求を受けたときの処理フローを表すフローチャートであり、図４は、優先処理を完了した後、元の信号処理を再開するときの処理フローを表すフローチャートである。信号処理タスクが画像処理である場合についての例であるが、入力データが時系列データなどで順次入力され、定形の処理を施して入力データと同様な時系列データを順次出力するような信号処理一般に、適用することができる。このような定形の処理では、出力すべきデータの位置が与えられると、そのデータの算出に必要な入力データが一意に決まり、そのデータを出力するために、どの入力データから入力を再開すれば良いか、関数などによって導出することができるからである。
【００９７】
画像処理タスク（第２のタスク）の優先処理が要求されたとき（ステップ８１）、既に別の画像処理タスク（第１のタスク）を実行中か否かを判定する（ステップ８２）。第１のタスクが実行中に第２のタスクの優先処理が要求されたときは、いずれのタスクの優先度が高いかを判定する（ステップ８３）。第２タスクの優先度が高い場合には、第１タスクの画像処理を中断し、ポインタ２１の値を退避する（ステップ８４）。その後、第２タスクの画像処理を実行するためのパラメータを設定し（ステップ８５）、処理を開始する（ステップ８６）。
【００９８】
一方、第２タスクの優先度が低い場合には、第１タスクが終了するまでステップ８２で待ち、第１タスクの終了後に第２タスクの画像処理を実行するためのパラメータを設定し（ステップ８５）、第２タスクの処理を開始する（ステップ８６）。
【００９９】
第２タスクの画像処理を完了したとき（ステップ８７）、中断した画像処理タスクの要求があるか否かを判定する（ステップ８８）。中断した画像処理タスクの要求がない場合には画像処理を終了する（ステップ９２）。一方、中断した画像処理タスクの要求がある場合には、中断したタスクを実行するためのパラメータを再設定する（ステップ８９）。さらに、ステップ８４で退避したポインタの値を読み出し、その値に基づいて、中断したタスクを再開する入力アドレスと出力アドレスを求める（ステップ９０）。出力アドレスは、退避したポインタの値に基づいて導出することができる。第１のタスクにおいて次に出力すべき出力データの出力ストリーム１２における位置情報を、退避したポインタの値に基づいて求め、そのデータが格納されているメモリ上のアドレスに換算することによって導出することができる。入力アドレスは、その出力データを算出するために信号処理部１０に入力する必要がある全ての入力データのうち先頭の入力データのアドレスとして、退避したポインタの値に基づいて導出することができる。
【０１００】
その後、中断した第１の画像処理タスクを再開する（ステップ９１）。
【０１０１】
これにより、退避すべき情報量はポインタの値のみで必要最小限であり、膨大な情報の退避と復帰を行わず、復帰後の信号処理を再開するために必要な入力データの位置情報はそのポインタ値から算出しているだけなので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【０１０２】
図５〜７を用いて、実施形態１に係る信号処理装置の動作をさらに詳細に説明する。
【０１０３】
図５はタスク切替前、図６はタスク切替後優先処理を実行中、図７は優先処理を完了し復帰した後の、信号処理部の状態を、それぞれ表す説明図である。
【０１０４】
図５〜７は、信号処理部１０が特に画像処理を行う画像処理部１０であって、画像処理を実行する画像処理モジュール３０と、その画像処理の内容を表すパラメータを保持するパラメータレジスタ２４を制御部２０内に設け、タスク切替制御部５０に、読み出しアドレスの算出を行う読み出しアドレス関数５１と書き出しアドレスの算出を行う書き出しアドレス関数５２を備えた例である。
【０１０５】
画像処理Ｘの実行中に、画像処理Ｙを優先処理するために、タスク切替が発生した例について説明する。入力データ４１はメモリ４０のアドレスＡを先頭として格納されており、出力データ４２はアドレスＡ’を先頭として書き込まれる。メモリ４０上には、アドレスＢを先頭として画像処理Ｙの入力データ４３が格納されており、アドレスＢ’を先頭として画像処理Ｙの出力データ４４を格納するためのメモリ領域が確保されている。画像処理の進捗に合わせて、読み出し（入力）アドレスレジスタ２３の値と、書き出し（出力）アドレスレジスタ２２の値を、それぞれ変化させる。ポインタレジスタ２１は、画像処理の進捗を表すポインタ値を格納している。ポインタ値としては、画像処理を終えて出力を完了したラインのライン番号、ブロック番号、フレーム番号などを使うことができる。ラインごとの処理の場合はポインタとしてライン番号が適しており、ブロック処理の場合はブロック番号が適している。
【０１０６】
図５は、画像処理Ｙの優先処理要求を受けた時点の状態を表す。画像処理ＸのためのパラメータＸがパラメータレジスタ２４に格納され、ポインタレジスタ２１は画像処理Ｘが第ｐラインまで出力が完了したことを示しており、読み出しアドレスレジスタ２３の値はその時点での入力データのアドレスａ、書き出しアドレスレジスタ２２の値はその時点での出力データのアドレスａ’となっている。
【０１０７】
優先処理要求を受けると、図３ステップ８１〜８３について説明したとおり、実行中のタスクである画像処理Ｘと要求された画像処理Ｙの優先度の比較を行う。優先度の高いタスクからの要求であると判断すると、タスク切替制御部は、画像処理Ｘを中断し、ポインタレジスタ２１の値ｐを退避する（図３のステップ８４）。このとき、退避するのはポインタ値ｐのみで、読み出しアドレスレジスタ２３の値ａ、書き出しアドレスレジスタ２２の値ａ’、およびパラメータレジスタ２４の値パラメータＸは、全て破棄する。これらの値を始め、さらに、画像処理モジュール３０の内部の情報も含め、画像処理Ｘの途中経過を保持するための種々の値を一切退避せず、退避する情報をポインタｐの値のみとする。これにより、中断処理が極めて短時間となる。
【０１０８】
次に図６に示すように、画像処理Ｙのため、パラメータレジスタ２４にパラメータＹを、読み出しアドレスレジスタ２３に入力データ４３の先頭のデータが格納されているアドレスＢを、書き込みアドレスレジスタ２２に出力データの先頭のデータを格納すべきアドレスＢ’を、それぞれ設定し、ポインタレジスタ２１は、０に初期化する。画像処理の内容によっては、データの格納順序、処理順序が、格納されている順序と異なる場合がある。その場合は、最初に入力あるいは出力すべきデータのアドレスを、読み出しおよび書き出しアドレスレジスタ２３、２２に設定すればよく、ポインタも０から始めて順次増加させる他、末尾から始めて順次減少させるなど、処理内容に応じて適宜設定すればよい。
【０１０９】
読み出しアドレスレジスタ２３によりアドレスｂを指定してメモリ４０から画像処理モジュール３０に入力データ４３を順次読み込んで処理し、書き出しアドレスレジスタ２２にアドレスｂ’を指定して処理結果を出力する。ポインタレジスタ２１は、この間、画像処理Ｙの進捗を表すポインタ値を格納している。
【０１１０】
画像処理Ｙのタスクを完了すると、図７に示すように、中断した画像処理Ｘへの復帰処理を行う。ポインタ値ｐをポインタレジスタ２１に復帰する。書き出しアドレスレジスタ２２には、画像処理Ｘの再開後最初に出力すべきデータのアドレスを設定し、読み出しアドレスレジスタ２３には、画像処理Ｘの再開後最初に入力すべきデータのアドレスを設定する。このアドレスは、タスク切替部における読み出しアドレス関数５１および書き出しアドレス関数５２にポインタ位置ｐを入力することにより算出する。
【０１１１】
この例では、ポインタ値ｐが中断前に出力を完了したライン数であるので、書き出しアドレスは先頭の出力データのアドレスＡ’にポインタ値ｐのライン数に相当する出力データを格納したアドレスを加えて、再開後最初に出力するデータを格納すべきアドレスを求める。書き出しアドレス関数５２は、書き出しアドレスＧ（ｐ）＝Ｇ（Ｐｌ’（ｐ））である。さらに、読み出しアドレス関数５１を用い、読み出しアドレス＝Ｆ（ｐ）＝Ｆ（Ｐｌ（ｐ））を算出して読み出しアドレスレジスタ２３に設定する。ここで、Ｐｌ’（ｐ）はポインタ値から画像処理Ｘの再開後最初に出力すべきデータのライン番号を算出する書き出し画像位置関数であり、Ｐｌ（ｐ）はポインタ値から画像処理Ｘの再開後最初に入力すべきデータのライン番号を算出する読み出し画像位置関数である。書き出しアドレスは先頭アドレスＡ’と１ライン当たりのアドレス数から算出することができ、読み出しアドレスは先頭アドレスＡと１ライン当たりのアドレス数から算出することができる。１ライン当たりのアドレス数は、メモリ上のストライドサイズを指す。画像の１ライン当たりのデータ数とは必ずしも一致しない。画像データをメモリ上に割り付けるとき、隣接する画素のデータを格納するアドレス値の算出を容易にするため、画像の１ラインのデータ数より大きく、アドレスの区切りが良い値でストライドサイズを定めることが多い。このとき、ある画素の格納されているアドレスと上下で隣接する画素のアドレスとは、ストライドサイズ分の差がある。
【０１１２】
読み出し画像位置関数Ｐｌ（ｐ）と書き出し画像位置関数Ｐｌ’（ｐ）は、それぞれ画像入力データ４１と画像出力データ４２におけるライン番号などで画像の位置を特定する。この例では、書き出し画像位置関数Ｐｌ’（ｐ）＝ｐ＋１である。ポインタ値ｐが中断前に出力を完了したライン数であるから、再開後にその次のラインから出力を再開すればよい。画像処理Ｘの再開後最初に出力すべきデータが決まると、画像処理Ｘにおいてそのデータを求めるために、どこまで入力データを遡って入力すべきかを算出することができる。これを予め求めて読み出し画像位置関数Ｐｌ（ｐ）を規定しておく。例えば空間フィルタの場合、そのタップ数によって何ライン遡れば良いかがわかる。空間フィルタの例、上下反転処理の例、およびブレンド処理の例を後述するが、画像処理の内容によって、遡るべき入力データの量が分かるので、それに基づいて読み出し画像位置関数Ｐｌ（ｐ）を規定しておけばよい。
【０１１３】
読み出しアドレス関数Ｆ（ｐ）と書き出しアドレス関数Ｇ（ｐ）は、それぞれ、読み出し画像位置関数Ｐｌ（ｐ）と書き出し画像位置関数Ｐｌ’（ｐ）の出力を、実際のメモリ上のアドレスに変換する関数である。
【０１１４】
パラメータレジスタ２４には、画像処理モジュール３０に画像処理Ｘを実行させるためのパラメータＸを、再設定する。パラメータは処理の経過によって変化しない画像処理に固有の値である。例えば、画像の空間フィルタの場合には、タップ数やフィルタ係数である。復帰すべきタスクが画像処理Ｘであることがわかれば、そのパラメータはその画像処理を開始するときと同様に、予めプログラム内に保持している値を転送するなどの方法により、再度同じ値を設定すればよい。
【０１１５】
以上のように、退避するデータがポインタ値ｐのみであっても、再開後の書き出しアドレスレジスタ２２、読み出しアドレスレジスタ２３、パラメータレジスタ２４の値を、適切に再設定することができる。
【０１１６】
ただし、パラメータレジスタへ再設定すべきパラメータの種類は、ポインタ値から求めることはできない。中断した画像処理の進捗状況がポインタ値で、進捗状況には依存しない画像処理の内容がパラメータであるため、パラメータを退避する必要としない点が本実施形態の本質だからである。したがって、再開するときにどの画像処理のパラメータをパラメータレジスタに再設定すれば良いかを表す、コンテキスト番号を定義して、ポインタ値とともに退避しておくことも有効である。このような実施形態については後述する。
【０１１７】
本実施形態では、読み出しアドレス関数５１と書き出しアドレス関数５２は、画像位置関数を用いて表す例を示したが、再開すべき入力アドレスと出力アドレスをポインタ値に基づいて算出することができればよく、必ずしも画像位置関数を用いる必要はない。入出力データが格納されているアドレスは、画像処理タスクが実行されるハードウェア環境に依存するが、画像処理の進捗を入力データの位置、演算中のデータの位置、出力データの位置を、画像位置関数を用いることにより、それぞれのストリームにおける画像データとしての位置で表現し、画像位置関数をハードウェア環境に依存しないものとすることができる。これにより、タスク切替制御部におけるアドレスの算出が簡略化される。例えば、画像処理タスクを記述するソフトウェアを他のハードウェア環境に移植する場合には、データの格納されている先頭アドレス、１ライン当たりのデータ量など、入出力データがメモリ上にどのようにマッピングされているかの情報のみを整合させればよい。また、画像処理モジュール３０が複数の画像処理を実行する場合には、対応する複数の画像位置関数と、入出力それぞれのアドレス関数によって表現することによって、アドレスの算出が簡略化される。複数の画像処理を実行する場合については、後述の実施形態５において説明する。
【０１１８】
実施形態１に係る信号処理装置の効果について説明する。
【０１１９】
図８は、実施形態１によるタスク切替の効果を表す説明図である。横軸に時間の経過を取り、画像処理の流れを表している。（ａ）は優先処理を要求する割り込みがない通常処理である。この例では、画像のフレームごとに処理を行うタスクが実行され、タスクの終了時にフレーム処理の終了がこれら画像処理を管理するＯＳなどのソフトウェアに対して通知される。フレーム１の処理中に別の画像処理タスクの優先処理を要求する割り込みがあったとき、従来技術では、２種類の対応方法が考えられる。（ｂ）はフレーム１の終了を待って優先画像処理Ｙのタスクを開始する場合であり、（ｃ）はフレーム１の処理をすぐに中断して優先画像処理Ｙのタスクを開始し、Ｙの終了後、フレーム１の先頭に戻って処理を再開する場合である。
【０１２０】
（ｂ）では、フレーム１の終了を待って中断処理を行い、その後、優先画像処理Ｙのタスクを実行し、優先処理が完了した後に、既に終了しているフレーム１の次のフレーム２の先頭から中断前の画像処理を再開する。フレーム１の処理を途中で中断しているわけではないので、退避すべき情報はフレーム１を完了したという情報のみでよく、完了したフレーム１に続いてフレーム２から再開すれば良いので、復帰すべき情報もない。しかし、優先されるべき画像処理Ｙの開始が処理中のフレームの処理を待たされる分だけ遅れるという問題がある。
【０１２１】
一方、（ｃ）は、フレーム１の処理を強制的に中断する。演算経過などの情報をすべて破棄して、優先画像処理Ｙを実行する。これにより、優先されるべき画像処理Ｙの開始が処理中のフレームの処理を待たされる分だけ遅れるという、上記の問題は解決される。しかし、再開するときに、フレーム１についての処理が中断したときの途中経過情報を残していなければ、フレーム１の処理の先頭から再度処理を行わなければならず、優先処理割り込みの前までに実行されたフレーム１の処理が無駄になる。
【０１２２】
画像処理を始めとする信号処理は、取り扱うデータの量が膨大であるとともに、処理の途中経過のデータも、通常のソフトウェアよりも膨大である。例えば、３×３の画像の空間フィルタの場合、中央の画素のデータを計算するために、入力として周囲の８画素のデータを必要とする。タップ数が多ければ当然に入力として必要なデータ数も多くなる。これを通常のソフトウェアのコンテキストスイッチと同様の考え方で、処理途中のデータ全てを退避させるようにすると、ある画素の演算後に中断した後、次の画素から再開するためには、入力に必要な周囲の画素データはもちろん、既に入力され今後タスクで参照される画素データを全て退避しておくことになる。この場合に退避すべきデータの量が、通常のソフトウェアと比較して膨大になってしまうことは明らかである。そのため、通常のソフトウェアのコンテキストスイッチと同様に処理の途中経過の全ての情報を退避させることは、現実的に許されず、従来は優先処理のための処理として（ｂ）または（ｃ）が採用されている。
【０１２３】
本実施形態１においては、退避するデータはポインタ値ｐのみであり、ポインタ値は、画像処理部が出力を完了した出力データのライン番号である。復帰するときは、退避したポインタ値ｐから必要な読み出しアドレスと書き出しアドレスを算出してアドレスレジスタ２２、２３に設定し、パラメータレジスタ２４を再設定するだけなので、（ｄ）に示すように、中断処理と再開処理に要する時間は、（ｂ）（ｃ）と同様に極めて短くて済む。（ｃ）と同様に、優先処理割り込みの後、フレーム１の画像処理の途中で中断処理を行い、すぐに優先画像処理Ｙを開始しているので、（ｂ）のように優先画像処理Ｙを待たせることがなく、かつ、再開処理後は、（ｃ）のようにフレームの先頭に戻るのではなく、フレーム１で出力済みの第ｐラインの次のラインから処理を再開するので、既に行った処理が無駄になることがない。
【０１２４】
本実施形態においては、ポインタ値が出力済みのライン番号である場合について説明したが、ポインタ値は、出力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせのいずれかであってもよい。また、ポインタ値が出力ではなく入力済みの入力データの、入力ストリームにおける画素番号、ライン番号、ブロック番号、もしくはフレーム番号、またはその組み合わせのいずれかであってもよい。
【０１２５】
画像処理を始めとする信号処理は、入力データを順次入力し、演算処理を施して出力データを順次出力する。タスク切替において、演算の途中経過を全て退避し復帰することができれば理想的であるが、これが現実的には許されないことは、上述した通りである。本願の発明者は、演算の途中経過は、入力データをある程度遡って再度入力すれば、再現することができることを見出した。退避するデータを画像処理の経過を表すポインタの値のみとし、復帰の時にはそのポインタ値に基づいて、次に出力すべきデータの位置を求め、さらにその出力を算出するために必要な全ての入力データのうちの先頭へ戻って処理を再開すれば、再開後の画像処理タスクの進行に伴って中断したときの処理の途中経過が再現され、次に出力すべきデータの算出を始めとして、その後の画像処理を中断した位置からの引き続き再開したのと同様に再開することができる。
【０１２６】
また、退避する値はポインタ値のみで十分であるが、再開する画像処理の内容を示す、例えばコンテキスト番号をさらに退避してもよい。ポインタ値とコンテキスト番号は、取り得る値が限られるので、それぞれ１バイト乃至２バイトあれば十分である。画像処理の途中経過を全て退避する場合と比較して極めて少ない情報量を退避すれば足りることになる。
【０１２７】
〔実施形態２〕＜空間フィルタ（ＦＩＲフィルタ）＞
画像処理モジュール３０の実行する画像処理が画像の空間フィルタである場合の実施形態について説明する。実施形態１において、空間フィルタ処理に対応する画像位置関数を用いればよく、他の構成および動作は実施形態１と同じである。
【０１２８】
図９は、空間フィルタ処理に対応する画像位置関数の考え方を表す説明図である。水平サイズＨ、垂直サイズＶの画像データに、３×３のＦＩＲフィルタで表される空間フィルタ処理を施し、同じ大きさの画像データを出力する。Ｈ×Ｖの入力画像データは、メモリ４０上に先頭アドレスをＡとして格納されており、アドレスＡ’を先頭として出力する。画像の水平サイズＨは、メモリのストライドサイズｈと一致させてもよいし、異なっていてもよい。入力データ４１と出力データ４２は、先頭アドレスが異なるが同じ構造であるから、図９では、入力データ４１のみを図示し、出力データの図示を省略してある。
【０１２９】
ＦＩＲフィルタは、Finite Impulse Response Filterの略で、ある画素の値を求めるために、その画素の周辺の画素データに所定の係数をかけて重みづけ加算する演算を行うものである。出力する画素を中心に全方向で隣接する８画素のデータを用いるのが、３×３のＦＩＲフィルタである。画像データを平面としたとき、３×３の正方形の領域を入力としてその中央の画素について出力データを算出する。２画素遠方までのデータを入力するときには５×５、３画素遠方までのデータを入力するときには７×７のＦＩＲフィルタとなる。３×３、５×５、７×７などの大きさをタップ数、あるいは次数と呼ぶ。
【０１３０】
先頭からＣラインの出力を完了した時点で優先処理が要求され、空間フィルタ処理を中断したとする。このときポインタ値ｐはＣであり、タスク切替制御部はこの値を退避する。この時点で、読み出しアドレスレジスタは、Ｃ＋１ラインの読み出しを完了している。３×３のＦＩＲフィルタは、出力する画素のデータを求めるために、隣接する８画素全てのデータを入力として演算するので、Ｃラインのデータの出力を完了しているということは、Ｃ＋１ラインの入力を完了していることになるからである。
【０１３１】
優先処理を完了して復帰するときには、中断前に出力を完了したＣラインに続いて、Ｃ＋１ラインの出力から再開する。このため、書き出し画像位置関数はＰｌ’（ｐ）＝ｐ＋１である。Ｃ＋１ラインのデータを算出するために必要なデータのうちの先頭のデータは、Ｃラインの入力データである。このため、読み出し画像位置関数はＰｌ（ｐ）＝ｐとなる。このとき、読み出しアドレス関数はＦ（ｐ）＝Ａ＋（ｐ−１）×ｈとなり、書き出しアドレス関数はＧ（ｐ）＝Ａ’＋ｐ×ｈとなる。ここで、ｈはメモリストライドサイズである。
【０１３２】
図９は３×３のＦＩＲフィルタによる空間フィルタについて例示したが、一般にＮ×Ｎ（Ｎは奇数）のＦＩＲフィルタによる空間フィルタの場合、書き出し画像位置関数はＰｌ’（ｐ）＝ｐ＋１であり、読み出し画像位置関数はＰｌ（ｐ）＝（ｐ＋１）−（Ｎ−１）／２となる。退避したポインタ値の次のラインから出力を再開すればよいので、書き出し画像位置関数は３×３のＦＩＲフィルタによる空間フィルタの場合と同じである。読み出し画像位置関数については、ｐ＋１ラインの出力を求めるために、（Ｎ−１）／２ライン前までのデータが入力として必要であるので、上記のように規定される。
【０１３３】
３×３のＦＩＲフィルタによる空間フィルタの場合、Ｃラインの出力を完了して中断した時点では、Ｃ＋１ラインのデータまで、画像処理モジュール３０に入力されている。一般のソフトウェアのコンテキストスイッチングと同じ手法を適用すれば、Ｃ＋１ラインの出力から再開するためにＣ＋２ラインから入力を再開することになる。しかし、これを実現するためには、既に画像処理モジュール３０に入力されているＣラインおよびＣ＋１ラインのデータ全てを退避することが必要となる。画像の水平サイズは、ＶＧＡで６４０ｐｉｘｅｌ、高精細化により、８００〜１０２４ｐｉｘｅｌに増えてきており、１ライン分のデータは１画素の輝度データが８ビットと仮定しても約１ＫＢｙｔｅとなり、３色各２Ｂｙｔｅとすれば約６ＫＢｙｔｅにもなる。フィルタのタップ数が大きくなれば、それに応じて退避すべきデータのライン数が増えるので、退避すべきデータ量は膨大になる。実用上、画像処理のデータを退避させることは許されない。
【０１３４】
本実施形態においては、２ライン分の入力データを退避し、復帰させる代わりに、それらのデータを再度入力する。そのために、Ｃ＋２ラインからの入力を再開ではなく、Ｃラインまで遡って入力を再開する。これにより、退避すべきデータはポインタ値のみとなる。ポインタ値は実施形態ではライン番号であれば良いので、２Ｂｙｔｅあれば十分である。
【０１３５】
以上は、出力を完了したライン数をポインタとした場合について説明したが、入力を完了したライン数をポインタとしてもよい。入力画像位置関数はＰｌ（ｐ）＝ｐ−２となり、出力画像位置関数はＰｌ’（ｐ）＝ｐ−１となる。
【０１３６】
本実施形態では、ラインの途中で優先処理の要求があっても、そのラインの処理を完了した後で中断する処理を行うか、処理中のラインの処理を強制終了して中断し、再開後はそのラインの最初から処理を再開する。さらに改良して、ラインの途中で処理を中断し、かつ再開させるためには、ポインタをライン数と画素数で構成すればよい。退避・復帰するデータがポインタの値のみであることは同様であるが、ポインタの内容がライン数だけでなく画素数も含むので、退避・復帰するデータの量は多くなるが、ライン処理の終了を待つことなく優先処理を開始することができ、あるいは処理の途中経過を破棄することなくライン処理の途中から再開することができるので、退避および復帰に要する時間的なオーバーヘッドをさらに抑えて、タスク切替を実行することができる。
【０１３７】
なお、Ｈ×Ｖの長方形の画像周辺部では、本来必要な画素がＨ×Ｖの長方形の外側に相当する場合に入力すべきデータが得られない状態となる。この場合には、本実施形態にも、画像の空間フィルタ一般における周知の画像端処理を適用することができる。
【０１３８】
本実施形態では、処理対象ラインの上下のラインのデータを入力する信号処理の例として、ＦＩＲフィルタを取り上げた。拡大縮小処理についても、補間あるいは間引きするために処理対象ラインの上下のラインのデータを入力する必要があるので、同様の考え方で画像位置関数とアドレス関数を構成することができる。
【０１３９】
〔実施形態３〕＜上下反転処理＞
画像処理モジュール３０の実行する画像処理が画像の上下反転処理である場合の実施形態について説明する。実施形態１において、上下反転処理に対応する画像位置関数を用いればよく、他の構成および動作は実施形態１と同じである。
【０１４０】
図１０は、上下反転処理に対応する画像位置関数の考え方を表す説明図である。水平サイズＨ、垂直サイズＶの画像データに、上下反転処理を施し、同じ大きさの画像データを出力する。Ｈ×Ｖの入力画像データは、メモリ４０上に先頭アドレスをＡとして格納されており、アドレスＡ’を先頭として出力する。画像の水平サイズＨは、メモリストライドサイズｈと一致させてもよいし、異なっていてもよい。入力データ４１と出力データ４２は、先頭アドレスが異なるが同じ構造であるから、図１０では、入力データ４１のみを図示し、出力データ４２の図示を省略してある。
【０１４１】
上下反転処理では、上から順に入力して下から順に出力する場合と、下から順に入力して上から順に出力する場合がある。上から順に入力して下から順に出力する場合は入力データが下まで揃っていなくても処理を開始することができるが、出力は先頭データが最後に出力されるので、先頭データが出力されるまで次の処理を開始することができないことが多い。逆に下から順に入力して上から順に出力する場合は、入力データ全て揃うのを待って処理を開始しなければならないが、先頭データから順次出力されるので、次の処理を順次始めることが可能となる。
【０１４２】
下から順に入力して上から順に出力する実施形態について説明する。
【０１４３】
ポインタは、出力済みのライン数を保持するものとする。下からＣラインまで入力されＣライン出力済みの時点で優先処理が要求されたとすると、退避されるポインタ値はｐ＝Ｃとなる。図１０において濃いハッチングの部分が入力データ４１において入力済みの領域である。反転処理なので、下からＣライン入力されたデータは、図示を省略したアドレスＡ’を先頭とする領域に上からＣラインまで出力されている。
【０１４４】
復帰後、次に出力すべきデータは、Ｃ＋１ラインであるので、書き出し画像位置関数Ｐｌ’（ｐ）＝ｐ＋１となる。このとき、書き出しアドレス関数はＧ（ｐ）＝Ａ’＋ｐ×ｈとなる。
【０１４５】
読み出し位置関数は、中断前までに下からＣラインまで入力が終わっており、上下反転処理ではそれに対応する反転出力も完了しているので、再開後に入力が必要なのは下からＣ＋１ライン目で、メモリ上ではＶ−Ｃライン目である。読み出し画像位置関数はＰｌ（ｐ）＝Ｖ−ｐであり、読み出しアドレス関数はＦ（ｐ）Ａ＋（Ｖ−ｐ−１）×ｈとなる。
【０１４６】
本実施形態では、処理対象のラインに対して必要となるラインの順番が異なる例として、上下反転処理を取り上げて説明したが、左右反転処理、回転処理についても、同様の考え方で、画像位置関数とアドレス関数を構成することができる。
【０１４７】
なお、上下反転処理と左右反転処理で対称軸が画面中央にない場合、および、回転処理では、画像の末端処理が必要になる場合があるが、本実施形態についても、周知の画像端処理の手法を適用することができる。
【０１４８】
〔実施形態４〕＜ブレンド処理＞
画像処理モジュール３０の実行する画像処理が複数の画像のブレンド処理である場合の実施形態について説明する。実施形態１において、ブレンド処理に対応する画像位置関数を用いればよく、他の構成および動作は実施形態１と同じである。
【０１４９】
図１１は、ブレンド処理に対応する画像位置関数の考え方を表す説明図である。
【０１５０】
説明を簡略化するため、２画面の画像を合成する実施形態について説明する。メモリ４０上にアドレスＡｐを先頭として格納されているＨｐ×Ｖｐの親画面と、アドレスＡｃを先頭として格納されているＨｃ×Ｖｃの子画面とを合成して、アドレスＡ’を先頭として合成された画像を出力する。親画面、子画面および出力画像のメモリストライドサイズをそれぞれ、ｈｐ、ｈｃ、およびｈとする。合成された画像は、Ｈｐ×Ｖｐの親画面の内側に左上からの水平方向にＨｏｆｆと垂直方向にＶｏｆｆのオフセットを加えた領域をＨｃ×Ｖｃの子画面に置き換えたものである。
【０１５１】
ポインタは、出力済みのライン数を保持するものとする。Ｃラインまで出力した時点で優先処理が要求されたとすると、退避されるポインタ値はｐ＝Ｃとなる。
【０１５２】
復帰後、次に出力すべきデータは、Ｃ＋１ラインであるので、書き出し画像位置関数Ｐｌ’（ｐ）＝ｐ＋１となる。このとき、書き出しアドレス関数はＧ（ｐ）＝Ａ’＋ｐ×ｈとなる。
【０１５３】
読み出し位置関数は、親画面についてのＰｌｐ（ｐ）と子画面についてのＰｌｃ（ｐ）とを定義し、読み出しアドレス関数は、親画面についてのＦｐ（ｐ）と子画面についてのＦｃ（ｐ）とを定義する。
【０１５４】
合成画像のＣ＋１ラインの出力に必要な親画面からの入力は、Ｃ＋１ラインであるので、Ｐｌｐ（ｐ）＝ｐ＋１であり、アドレス関数はＦｐ（ｐ）＝Ａｐ＋ｐ×ｈｐとなる。
【０１５５】
合成画像のＣ＋１ラインの出力に必要な子画面からの入力は、Ｃ−Ｖｏｆｆ≧０であればＣ−Ｖｏｆｆ＋１ラインであるので、Ｐｌｃ（ｐ）＝ｐ−Ｖｏｆｆ＋１であり、アドレス関数はＡｃ＋（ｐ−Ｖｏｆｆ）×ｈｃとなる。Ｃ−Ｖｏｆｆ＜０の場合は当該ラインでは子画面が重なっていないので、子画面のデータを入力する必要はない。
【０１５６】
このように、複数の画像を入力する場合には、それぞれの入力画像に読み出し画像位置関数と読み出しアドレス関数を用意する。
【０１５７】
〔実施形態５〕＜複数の処理の組合せ＞
画像処理モジュール３０の実行する画像処理が複数の画像処理の組合せである場合の実施形態について説明する。実施形態１において、複数の画像処理の組合せに対応する画像位置関数を用いればよく、他の構成および動作は実施形態１と同じである。
【０１５８】
複数の画像処理の組合せは多岐に渡るが、まず、入力画像に対して画像処理Ｘを実行し、その出力に対して画像処理Ｙを実行して出力画像を得るような、縦続処理について説明する。
【０１５９】
出力画像において、出力済みのライン番号をポインタ値ｐとし、中断処理で退避させる。復帰後、最初に出力すべきはｐ＋１ラインとなる。画像処理Ｙについて、出力すべきライン番号を入力してそれに必要な入力データの先頭のライン番号を出力するように、画像位置関数Ｐｌｙ（ｐ）を定義する。このとき、その前段の画像処理Ｘは、画像処理Ｙが最初に必要とする入力データの先頭のライン番号即ちＰｌｙ（ｐ）を入力して、それに必要な入力データの先頭のライン番号を出力するように、画像位置関数Ｐｌｘ（ｐ）を定義する。
【０１６０】
アドレス関数Ｆ（ｐ）は、Ｐｌｘ（ｐ）が指定するデータのメモリ上のアドレスを与えるように定義する。出力画像の先頭アドレスをＡ’、メモリストライドサイズをｈとすると、アドレス関数はＦ（ｐ）＝Ａ’＋（Ｐｌｘ（Ｐｌｙ（ｐ））−１）×ｈとして定義することができる。
【０１６１】
画像位置関数とアドレス関数は、合成したときに適切なアドレスを算出することができれば足りるので、画像位置関数の入出力を出力済みのライン数とするか、入力済みのライン数とするか、画面全体におけるライン番号とするかなど、定義の方法は一般には任意である。
【０１６２】
上記のような組み合わせを考える場合には、入力画像、Ｘの出力画像、Ｙの入力画像および最終的な出力画像が、全て同じ大きさで、画像位置関数の入出力を先頭からのライン番号に統一すると、関数の結合が簡略化される。即ち、複数の画像処理についての画像位置関数の間で、オフセットなどの処理を施すことなく、後段の処理に係る画像位置関数の出力をその前段の処理に係る画像位置関数の入力としてネスティングすることができる。例えば、本実施例では、Ｐｌｘ（Ｐｌｙ（ｐ））としている。Ｐｌｙ（ｐ）の出力の定義が画像先頭からのライン数でも、Ｐｌｘの入力の定義が画像の下からのライン数であるような場合には、単純にＰｌｘ（Ｐｌｙ（ｐ））とすることはできない。画像の垂直方向のサイズＶを使いＰｌｘ（Ｖ−Ｐｌｙ（ｐ））などのように、整合を取る必要が生じる。
【０１６３】
以上、ポインタが出力済のライン番号である場合について主に説明したが、ポインタは画像処理の経過を表す別の方法でも、同様に本実施形態を適用することができる。ポインタはライン番号の他、画素番号、ブロック番号、フレーム番号、またはそれらの組合せであっても、同様に画像位置関数を定義し、復帰後の入力開始アドレスを求めることによって、同様の効果を奏することができる。また、画像位置関数の入出力が、ライン番号に統一されていなく、画素番号、ブロック番号、フレーム番号、またはそれらの組合せを用いる関数が混在していても、後段の処理に係る画像位置関数の出力をその前段の処理に係る画像位置関数の入力としてネスティングする際に整合を取ればよい。退避したポインタの値に基づいて、復帰後の出力が中断時点から再開できるように、その出力を算出するために必要な入力データの先頭を順次遡って算出し、そのデータのメモリ上のアドレスを指定して入力を再開すればよい。
【０１６４】
これにより、退避すべき情報量はポインタの値のみで必要最小限であり、膨大な情報の退避と復帰を行わず、復帰後の信号処理を再開するために必要な入力データの位置情報はそのポインタ値から算出しているだけなので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。
【０１６５】
〔実施形態６〕＜ブロック処理＞
画像処理には、画像を正方形のブロックに分け、ブロックごとに処理を実行するものがある。例えば、離散コサイン変換は、一般に８画素×８画素のブロックに対して、行列演算を実行して周波数領域のデータに変換する処理である。ブロックの形状は正方形が一般的であるが、それに限定されるものではない。
【０１６６】
ブロック処理の場合でも、ライン処理と同様にライン毎に順次読み込んで、画像処理モジュール内への入力が完了したブロックから順に処理を実行することもできる。画像処理モジュール内に数ブロック分のバッファが必要となるが、読み出しアドレスの制御は簡略で済む。この場合は、今まで述べてきたのと同様に、ポインタはライン数で表すことができる。内部の処理がブロック処理であっても、ポインタがライン番号であれば、実施形態１をそのまま適用することができる。
【０１６７】
ライン毎ではなくブロックごとに入力し出力する場合は、読み出しと書き出しのアドレス制御は、より複雑になるが、画像処理モジュールへは、必要なデータのみが入力されるので、処理前のデータを保持するための内部バッファを必要としない。この場合、ポインタは入力済みまたは出力済みのブロック番号とすることができる。
【０１６８】
図１２は、ブロック処理におけるタスク切替についての説明図である。画像処理部１０の制御部２０に設けられたパラメータレジスタ２４には、画像処理モジュール３０に対してブロック処理を指示するパラメータＷが格納されている。入力データ４１はアドレスＡを先頭としてメモリ４０に格納されており、出力データ４２はアドレスＡ’を先頭として出力される。ブロックサイズはＭ×Ｍとし、メモリの横方向にＬ個のブロックが格納されているものとし、出力データ４２も同様の形状でメモリ上に格納されるものとする。
【０１６９】
ポインタは出力済みのブロックのブロック番号ｑを保持しており、優先処理が要求されて中断した時点で、出力データ４２がｑブロックまで出力され、入力データ４１はｑ＋１ブロックまで入力を完了している。タスク切替制御部は、ポインタ値ｑを退避して優先処理を実行させ、これが終わった時にポインタ値ｑに基づいて読み出しアドレスと書き出しアドレスを算出する。整数ｉとｊを使ってブロック番号ｑをｑ＝ｉ×Ｌ＋ｊ（０≦ｊ＜Ｌ）と表したとき、そのブロックの先頭アドレスは、Ａ＋ｉ×Ｌ×Ｍ＾２＋（ｊ―１）×Ｍとなる。
【０１７０】
再開後最初に出力すべきブロックは、ｑ＋１ブロックであり、ｑ＋１＝ｉ×Ｌ＋ｊと表せるとき、書き出しアドレスは、Ａ’＋ｉ×Ｌ×Ｍ＾２＋（ｊ―１）×Ｍとなる。これを出力するために必要な入力ブロックはｑ＋１ブロックで、読み出しアドレスは、Ａ＋ｉ×Ｌ×Ｍ＾２＋（ｊ―１）×Ｍとなる。
【０１７１】
ブロック番号に基づいてアドレスを求める関数が単純ではなくなるが、考え方は、ライン番号をポインタとした場合と同様である。退避したポインタ値ｑに基づいて、再開後最初に出力すべきブロックを求め、これを出力するために必要な入力ブロックの位置から、そのデータが格納されているメモリ上のアドレスを求め、そのアドレスから処理を再開する。
【０１７２】
これにより、退避すべき情報量はブロック番号であるポインタの値のみで必要最小限であり、膨大な情報の退避と復帰を行わず、復帰後の信号処理を再開するために必要な入力データの位置情報はそのポインタ値から算出しているだけなので、退避および復帰に要する時間的なオーバーヘッドを抑えることができるという効果も同様である。
【０１７３】
なお、ブロック処理とライン処理が組み合わされた場合も、同様の考え方で実施することができる。
【０１７４】
〔実施形態７〕＜フレーム間処理＞
画像処理には、さらに、フレーム間のデータを参照して行う処理がある。例えば、動き補償等をする場合に、１フレーム前の画像との差分を取って、動きの有無や方向、大きさなどを算出する処理である。
【０１７５】
図１３は、フレーム間処理を行う信号処理装置の機能ブロック図である。
【０１７６】
入力データ４１は、アドレスＡを先頭として格納されている処理対象のフレームに加えて、アドレスＡ−１ｆｒａｍｅを先頭として格納されている１フレーム前のデータも、画像処理モジュール３０に入力する必要がある。出力データ４２は、アドレスＡ’を先頭としてメモリ４０に書き込む。ポインタ２１には、例えば出力済のライン番号を保持する。中断したときにはポインタ値ｐを退避し、退避したポインタ値ｐに基づいて処理を再開した後最初に出力すべきデータの位置をｐ＋１ラインとして求めて、それに対応する書き出しアドレスを設定する点は、同様である。一方、読み出しアドレスは、処理対象のフレームとその１フレーム前のフレームについて、それぞれ、画像位置関数とアドレス関数を定義し、それぞれのフレームについて読み出しアドレスレジスタを設けるとよい。通常、処理対象の画像データの位置とその処理に必要な１フレーム前の画像データの位置は、フレーム内の相対的な位置が同じであることがほとんどであるので、それぞれに設けても、アドレス関数などはちょうど１フレームの差を持たせればよい。
【０１７７】
これにより、フレーム処理であっても、退避すべき情報量はポインタの値のみであり、ポインタ値もライン番号とすることもできるので、退避すべき情報量は必要最小限である。膨大な情報の退避と復帰を行わず、復帰後の信号処理を再開するために必要な入力データの位置情報はそのポインタ値から算出している点でも他の実施形態と同様であるから、退避および復帰に要する時間的なオーバーヘッドを抑えることができるという効果も同様である。さらに、動き補償等を行うような複数フレームのデータを用いて画像処理を行う場合においても画像位置関数とアドレス関数をそれぞれ用意することで本実施形態を適用することができる。
【０１７８】
〔実施形態８〕＜多重優先処理＞
図１４は、優先処理中のさらなる優先処理要求によるタスク切替についての説明図である。
【０１７９】
図中の優先度は数字が小さいほど優先度が高いものとする。
【０１８０】
優先度３を持った処理Ｘの画像処理を開始する。
【０１８１】
処理Ｘの途中で優先度２を持った処理Ｙの要求が入ると、処理Ｘで処理が完了しているラインを示すポインタ値Ｐｘを退避し、処理Ｘを中断、ポインタを初期化の上、処理Ｙを開始する。
【０１８２】
さらに、途中で優先度１を持った処理Ｚの要求が入ると、処理Ｙで処理が完了しているラインを示すポインタ値Ｐｙを保存し、処理Ｙを中断、ポインタを初期化の上、処理Ｚを開始する。
【０１８３】
処理Ｚが終了すると、中断している処理のうち、最も優先度の高い処理Ｙを再開するため、退避したポインタ値Ｐｙから再開するアドレスを求めて処理を再開する。
【０１８４】
処理Ｙが終了すると、最後に残っている処理Ｘを再開するため、退避したポインタ値Ｐｘから再開するアドレスを求めて処理を再開する。
【０１８５】
ポインタ値は、例えば、周知のプッシュポップ型のスタックに退避し、復帰させることができる。
【０１８６】
図１４では２つ優先処理が割り込んだ場合の例を示したが、先のフローチャートで示した処理を行うことで３つ以上複数要求が途中で発生した場合でも同様の処理方法により、ポインタ１つで多重の優先度処理を行うことができる。
【０１８７】
〔実施形態９〕＜半導体装置＞
実施形態１に係る信号処理装置を実施した画像処理システムについて説明する。この画像処理システムは、半導体装置として実現することができる。
【０１８８】
図２は、実施形態１に係る信号処理装置を実施した、半導体装置４６のブロック図である。
【０１８９】
画像処理部１０は、画像入力部６３、画像出力部６４、およびＣＰＵ４５とメモリ４０に、バス５５を介して接続されている。ＣＰＵ４５は、タスク切替制御部５０の機能の他、システム全体の制御も行う。メモリ４０はシステムで使用する画像データの格納等に用いる。画像入力部６３はカメラやテレビ放送等入力装置６１から送られてくる画像データを、バス５５を通してメモリ４０へ書き込む。画像処理部１０はメモリ４０上のデータを入力として必要な画像処理（拡大縮小・画面合成・フィルタ処理等）を行い、処理済みの画像データを再びメモリ４０へ格納する。画像出力部６４はＬＣＤ等表示装置６２へ出力するためのインターフェースで処理済画像データをメモリから読み出しシステムから出力して表示する。これらの制御はＣＰＵ４５によってハードウェアとソフトウェアが協調して行われる。
【０１９０】
画像処理部１０は、図２では内部を省略して示しているが、図１、１２、１３などに示したような実施形態で構成することができる。画像処理モジュールは、複数の画像処理を行うハードウェアをそれぞれ備えて構成することができ、あるいは、１つのプログラマブルなアクセラレータでもよく、また、その組み合わせによって実現してもよい。また、ＣＰＵ上で動作するソフトウェアによって実現してもよい。
【０１９１】
図１、１２、１３などに示したような実施形態において、タスク切替制御部５０として説明した機能は、ＣＰＵ４５で実現することができる。中断処理においてポインタ値はポインタレジスタ２１から読み出してメモリに書き込み、再開処理においてＣＰＵ４５は、ポインタ値をメモリ４０から読み出し、画像位置関数とアドレス関数に代入して再開後の読み出しアドレスと書き出しアドレスを求め、各アドレスレジスタ２２、２３に設定する。ポインタの退避と復帰は、通常の割り込みなどの例外処理における退避・復帰と同様に、プッシュポップ型のスタックを用いた周知技術によることができる。各種の画像処理のパラメータは、メモリ４０上に予め格納しておき、要求のあった処理、あるいは再開する処理の内容に応じて読み出し、画像処理部１０のパラメータレジスタ２４に設定して、画像処理モジュール３０に該当する処理を実行させる。ポインタを退避するだけでも良いが、中断された画像処理の内容を示すコンテキスト番号をさらに退避させてもよい。再開するときに、退避したポインタ値とともに中断した画像処理のコンテキスト番号を読み出し、その番号から画像処理内容を判断し、必要なパラメータをメモリ４０から読み出してパラメータレジスタ２４に設定することができる。
【０１９２】
パラメータを、処理の経過に依存して変化しない画像処理内容に固有の値とし、処理の経過を示すのをポインタのみとすることで、中断処理においてパラメータ値を退避する必要がなくポインタ値のみを退避すれば足りるので、退避および復帰に要する時間的なオーバーヘッドを抑えることができる。中断された画像処理の内容を示すコンテキスト番号をさらに退避すれば、再開時に必要なパラメータの再設定が容易になる。
【０１９３】
〔実施形態１０〕＜コンテキスト処理部＞
図１５は、コンテキスト処理部を備える半導体装置のブロック図である。
【０１９４】
実施形態９において、タスク切替処理部５０の機能をＣＰＵ４５のソフトウェアで実現したのに代え、コンテキスト処理部７０をさらに備えたものである。
【０１９５】
コンテキスト処理部７０は、制御部７１、コンテキスト位置記憶部７２、および復元部７３を備える。優先処理が要求されたとき、コンテキスト位置記憶部７２は、ポインタ値ｐを読み出して記憶部７６に記憶し、合わせて、中断する処理のコンテキスト番号７５も記憶する。ポインタ値ｐとコンテキスト番号７５を紐付け（関連付け）して記憶する。この記憶はプッシュポップ方式でも良いし、スタックした順序を表す制御ＮＯを合わせて記憶してもよい。
【０１９６】
優先処理が終了して中断した処理を再開する場合には、コンテキスト位置記憶部７２に記憶したポインタ値に基づいて、復元部７３において再開後の読み出しアドレスと書き出しアドレスを求めて、読み出しアドレスレジスタ２３と書き出しアドレスレジスタ２２に設定する。さらに、コンテキスト番号７５に基づいて中断した処理内容を判別し、メモリ４０に記憶されているパラメータ群から該当するパラメータを読み出してパラメータレジスタ２４に設定する。メモリ４０からのパラメータの転送は、コンテキスト処理部７０がバスマスタとして振舞うダイレクトメモリアクセスであっても良いし、コンテキスト処理部７０が復元部７３にパラメータ群を予め記憶しておいて転送しても良く、あるいは、ＣＰＵ４５にそのような転送制御を要求してもよい。
【０１９７】
これにより、ＣＰＵ４５の負担を軽減して、タスク切替を実施することができる。
【０１９８】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１９９】
例えば、実施の形態の詳細では、主に信号処理が画像信号を対象とした場合について述べたが、入力データが時系列データなどで順次入力され、定形の処理を施して入力データと同様な時系列データを順次出力する実施形態も、容易に実現することができる。順次出力される出力データが、優先処理によって中断したとき、復帰するときに中断後切れ目なく出力するために必要な出力データの位置を求め、そのデータを出力するために必要なすべての入力データのうちの先頭に戻って入力を再開すればよいからである。
【符号の説明】
【０２００】
１０  信号処理部
１１  入力ストリーム
１２  出力ストリーム
２０  画像（信号）処理制御部
２１  ポインタ
２２  書き出し（出力）アドレスレジスタ
２３  読み出し（入力）アドレスレジスタ
２４  パラメータレジスタ
３０  画像（信号）処理モジュール
４０  メモリ
４５  ＣＰＵ
４６  半導体装置
５０  タスク切替制御部
５１  読み出し（入力）アドレス関数
５２  書き出し（出力）アドレス関数
５５  バス
７０  コンテキスト処理部
７２  コンテキスト位置記憶部
７３  復元部
８１  優先処理を受け付けるステップ
８４  処理を中断し、ポインタ値を退避するステップ
８６  優先処理を開始するステップ
９０  再開時に、退避したポインタ値から再開するアドレス値を導出、再設定するステップ
【図１】
0005848153.tif 000002
【図２】
0005848153.tif 000003
【図３】
0005848153.tif 000004
【図４】
0005848153.tif 000005
【図５】
0005848153.tif 000006
【図６】
0005848153.tif 000007
【図７】
0005848153.tif 000008
【図８】
0005848153.tif 000009
【図９】
0005848153.tif 000010
【図１０】
0005848153.tif 000011
【図１１】
0005848153.tif 000012
【図１２】
0005848153.tif 000013
【図１３】
0005848153.tif 000014
【図１４】
0005848153.tif 000015
【図１５】
0005848153.tif 000016