(57)【要約】【課題】プロセッサを効率的に使用することができる映像符号化方法を提供することを目的とする。【解決手段】動画像入力部１００で入力されたフレームを、入力画像記憶部１０１で処理対象リストに記憶する。動きベクトル探索処理部１０２、デコード処理部１０３、残差評価処理部１０４、符号化処理部１０５はそれぞれ独立して動作する。これらの処理部は、処理対象となるフレームを画像領域分割処理部１０６〜１０９で分割した後、処理対象画像領域記憶部１１０〜１１３で記憶された処理対象リストから画像領域を取得し、画像領域毎に処理を行う。【選択図】図１
2013062656.tif 000002
【特許請求の範囲】
【請求項１】
動画像を入力する入力部と、
前記入力した動画像を構成する複数のフレームの情報を記憶する入力画像記憶部と、
前記入力画像記憶部から処理対象のフレームと、前記処理対象フレームが参照する参照フレームとを読み出し、前記処理対象フレームと参照フレームとの残差評価に基づき、動きベクトルを探索する動きベクトル探索処理部と、
前記参照フレームをデコードしたデコード参照フレームを作成するデコード処理部と、
前記動きベクトル探索処理部による動きベクトルの探索結果に基づき、前記処理対象フレームと、前記デコード参照フレームとの残差評価を行う残差評価再処理部と、
前記残差評価再処理部による残差評価結果に基づいて、前記処理対象フレームの符号化処理を行う符号化処理部と、
前記動きベクトル探索処理部は、前記処理対象フレームのデコード参照フレームを作成する前に、次の処理対象フレームの動きベクトルの探索を開始する、
画像処理装置
【請求項２】
前記動きベクトル探索処理部は、前記処理対象フレームのデコード参照フレームを作成する前に、前記処理対象フレームを参照する、次の処理対象フレームの動きベクトルの探索を開始する、
請求項１に記載の画像処理装置
【請求項３】
前記デコード処理部は、
前記動きベクトル探索処理部による残差評価を行った後に、前記参照フレームをデコードしたデコード参照フレームを作成する、
請求項１又は２に記載の画像処理装置
【請求項４】
前記処理対象フレームを複数の画像領域に分割する画像領域分割処理部と、
前記画像領域分割処理部で分割された画像領域を記憶する処理対象画像領域記憶部と、
前記動きベクトル探索処理部と、前記デコード処理部と、前記残差評価再処理部と、前記符号化処理部は、それぞれ画像領域を処理する複数の処理部を有しており、前記複数の処理部は、現在処理中の処理対象画像領域がない場合、処理対象画像領域記憶部から、処理対象となる各画像領域を取得する、
請求項１又は２、３に記載の画像処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド処理を用いた映像符号化方式、装置、プログラム、及び媒体に関するものである。
【背景技術】
【０００２】
パーソナルコンピュータにおける映像符号化処理において、特に昨今では主流となったMPEG-4  AVC/H.264を用いて映像を符号化した場合、その演算処理に莫大な時間を必要とするという問題がある。例えば、最近のDVD/BDレコーダーで採用されているAVCHDを出力形式として、部分的にエンコードを行うスマートレンダリングではなく、フルエンコードで入力映像をソフトウェア処理で変換した場合、市場で普及しているモデルのスペックであれば、実時間に対して５〜１０倍の処理時間を要する(2011年現在）。ここで言う映像符号化とは、例えば、MPEG-2  TS形式のファイルにマルチプレクスされるエレメンタリビデオストリームを、動画圧縮規格であるMPEG-4  AVC/H.264に基づいて変換する処理を指す。
【０００３】
一般的に、入力された動画を符号化する処理には、動き予測処理、マクロブロックタイプ決定処理、DCT変換処理、量子化処理、逆量子化処理、スライス出力処理など様々な処理があり、いかにしてこれらの処理を高速化するかが課題となっている。
【０００４】
映像符号化処理をソフトウェアで高速に行う場合、閾値による探索打ち切り処理や、スレッドによる並列処理が一般的である。例えば、入力映像を複数の領域に分割し、完全に独立して別々のスレッドで処理する方式や、マクロブロック(MB)単位やスライス単位で並列処理を行う方式などがある(特許文献１、２参照)。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２０１２３号公報
【特許文献２】特開２００１−２５１６３２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
パーソナルコンピュータに搭載されたオペレーティングシステム(以下OS)上において、物理プロセッサ数と同時実行数は厳密には同じだが、プロセッサ１つあたりに対して複数のスレッドがそれぞれ動的に割り込む形で、物理プロセッサ数以上の並列処理を”疑似的に”同時実行できるという特徴を持つ。また、マルチタスクに対応したOSでは、実行しているソフトウェアが一つだけではなく、他のソフトウェアやデバイスドライバ等、様々なソフトウェアが物理プロセッサというリソースを共有している。これらは、スレッド、プロセスなどの各タスクにおいて、１つの物理プロセッサをタイムシェアリングすることで動作しており、これらはOSによって制御される。従って、映像符号化処理を実現するにあたり、物理プロセッサ数とスレッド数を意識してプログラムを記述する必要はない。
【０００７】
しかしながら、このような環境では、例え同じ計算量であっても各処理や各スレッドの完了タイミングは異なるのが一般的である。例えば２０回の計算が必要な処理でスレッドを二つ作成し、それぞれのスレッドで１０回の計算をする場合、スレッドAは10msecで処理が完了するが、スレッドBは11msecで処理が完了するといった状況が発生する。この時、空きリソースとして利用可能な物理プロセッサの数がスレッド数と同じ２個であれば、スレッドの両方が終わるのを同期的に待機する場合、一方の物理プロセッサは1msecの間、何も仕事をしないことになる。特に、映像符号化処理の場合は、１回あたりの計算にかかる時間が必ずしも同じ時間で終わるものばかりではなく、むしろ異なる場合が多い。このように、単純に処理を並列化しただけでは、並列処理の完了待ちなどの同期処理において、無駄な待機時間が生じるため、マルチコアプロセッサを効率的に使用できないという問題があった。
【０００８】
また、映像の符号化においては、前段の処理の結果を待って、後段の処理を行わなければならないといった制約が数多く存在する。例えば動き予測処理では、一般的に、処理対象フレームが、自身のPTS(Presentation  Time  Stamp)より前或いは後ろのPTSを持つフレームを参照する場合、そのフレームが既に符号化され、なおかつ復号化した画像(デコード参照フレーム)が必要となる。このような制限化における高速化については様々な手法が存在するが、高速化のためにそれらの制約を取り払うことまでは積極的に行われてこなかった。
【０００９】
そこで本発明は、最もボトルネックとなる部分の制約を取り払うことで並列化の範囲を拡大し、並列化によって生まれる無駄な待機時間を可能な限り縮小することで、プロセッサを効率的に使用することができる映像符号化方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本発明の映像符号化方法は、動画像を入力する入力ステップと、入力した動画像を構成する複数のフレームの情報を記憶する入力画像記憶ステップと、入力画像記憶ステップにおいて記憶された複数のフレームの中から、処理対象のフレームと処理対象フレームが参照する参照フレームとを読み出すステップと、読み出した処理対象フレームと参照フレームとの間で残差評価処理を行い、動きベクトルを探索する動きベクトル探索処理ステップと、参照フレームをデコードしたデコード参照フレームを作成するデコード処理ステップと、動きベクトルの探索結果に基づき、処理対象フレームと、デコード参照フレームとの残差評価を行う残差評価再処理ステップと、残差評価再処理結果に基づいて、処理対象フレームの符号化処理を行う符号化ステップを備える。なお、動きベクトル探索処理ステップにおいて、デコード画像ではなくオリジナル画像を参照することで、参照フレームのデコードステップを待たずに処理を開始することができる。
【００１１】
また、動きベクトル探索処理ステップ、デコード処理ステップ、残差再評価処理ステップ、符号化処理ステップの各処理ステップは、それぞれで同じ処理を並列実行できる複数の処理部を持ち、それぞれで処理対象フレームを複数の画像領域に分割する画像領域分割処理ステップと、分割された画像領域を記憶する処理対象画像領域記憶ステップ、記憶された処理対象画像領域を読み出す処理対象画像領域読み出しステップを備える。ここでいう画像領域とは、マクロブロック単位或いはスライス単位であり、各処理ステップ内の処理内容が、隣接マクロブロックに依存する場合はスライス単位、依存しない場合はマクロブロック単位を、一つの画像領域として処理する。
各処理ステップで並列に実行される複数の処理部において、事前に処理対象画像領域を振り分けるのではなく、現在処理中の処理対象画像領域がない場合、処理対象画像領域記憶部から、処理対象となる各画像領域を取得する。
【発明の効果】
【００１２】
以上のように、本発明の映像符号化方法によれば、プロセッサを効率的に使用することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１にかかる映像符号化装置のシステム構成を示すブロック図
【図２】実施の形態１にかかる映像符号化処理の動作フローチャート
【図３】実施の形態１にかかる処理対象フレームの符号化処理の動作フローチャート
【図４】実施の形態１にかかる符号化処理のサブルーチンの動作フローチャート
【図５】実施の形態１にかかる画像領域の分割と記憶の動作フローチャート
【図６】実施の形態１にかかる並列処理用サブルーチンの動作フローチャート
【図７】実施の形態１にかかる符号化処理のサブルーチンの動作パターン表を示す図
【図８】実施の形態１にかかる映像符号化における並列処理の流れを示す図
【図９】他の実施の形態にかかる符号化処理のサブルーチンの動作フローチャート
【図１０】他の実施の形態にかかる符号化処理のサブルーチンの動作フローチャート
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図1から図10を用いて説明する。
【００１５】
(実施の形態１)
図1は、本発明の実施の形態１にかかる映像符号化装置のシステム構成を示すブロック図である。本実施の形態では、映像符号化装置として、並列処理可能なプロセッサを備えたパーソナルコンピュータ及びマルチコア、マルチスレッドに対応したオペレーティングシステム想定している。また、ここでは簡単のため、映像符号化の方式としてMPEG-2  Videoの例を示すものとする。
【００１６】
図1において、まず動画像入力部１００で、符号化したい映像をフレーム単位で入力する。動画像入力部１００で入力されたフレームを、入力画像記憶部１０１で記憶する。
【００１７】
動きベクトル探索処理部１０２において、処理対象フレームが他のフレームを参照する必要がある場合、動きベクトルの探索を行う。この時、処理対象フレームのオリジナル画像と、参照フレームのオリジナル画像の間で、繰り返し残差評価を行い、最も残差が少ないか、規定値を下回るブロックを表すベクトルを取得する。動きベクトルの探索が行われた後、デコード処理部１０３は、実際に参照されたフレームの符号化が完了するのを待機し、そのフレームを復号化することでデコード画像を取得する。デコード画像を取得した後、残差評価再処理部１０４は、動きベクトルの探索で求められた動きベクトルが表すブロックに対してのみ、残差評価を再度行う。この時、処理対象フレームのオリジナル画像と、参照フレームのデコード画像の間で、残差評価が行われる。最後に、符号化処理部１０５は、DCT変換、量子化、VLC符号化など、映像の符号化で一般的に必要な処理を行う。
【００１８】
動きベクトル探索処理部１０２において、処理対象フレームが他のフレームを参照する必要がない場合、動きベクトル探索処理を行わずに、符号化処理部１０５において、DCT変換、量子化、VLC符号化など、映像の符号化で一般的に必要な処理を行う。
【００１９】
ここで、画像領域分割処理部１０６〜１０９は、動きベクトル探索処理部１０２、デコード処理部１０３、残差評価再処理部１０４、符号化処理部１０５から、それぞれ処理対象フレームを受け取り、隣接マクロブロックに依存する処理の場合はスライス単位、隣接マクロブロックに依存しない場合はマクロブロック単位で画像領域を分割する。処理対象画像領域記憶部１１０〜１１３は、画像領域分割処理部１０６〜１０９で分割された画像領域にそれぞれインデックスを付け、処理対象リストとして記憶する。動きベクトル探索処理部１０２、デコード処理部１０３、残差評価再処理部１０４、符号化処理部１０５は、それぞれ処理対象画像領域記憶部１１０〜１１３から、インデックスが付与された処理対象画像領域を取得し、その処理対象がなくなるまで繰り返し処理を行う。
【００２０】
図2は、本発明の実施の形態１にかかる映像符号化処理の動作フローチャートである。まず、ステップＳ１０１で動画像を入力する。次に、ステップＳ１０２において、入力された動画像をフレームとして記憶する。ステップＳ１０３では、記憶されたフレームの総数を取得し、ステップＳ１０４で、符号化を開始することが可能なフレーム数(=最小単位)が記憶されているかどうかを判定する。条件を満たさない場合は、ステップＳ１０３に戻り、再度フレームの総数を確認する。条件を満たした場合は、ステップＳ１０５で処理対象フレームの符号化を行う。最後に、ステップＳ１０６において、符号化されたデータを出力する。
【００２１】
図3は、本発明の実施の形態１にかかる処理対象フレームの符号化処理の動作フローチャートであり、図2で示した映像符号化処理の「処理対象フレームの符号化」サブルーチンの動作を示す。まず、ステップＳ２０１で動きベクトルの探索を行う。ここでは、Pピクチャ、Bピクチャなど、処理対象フレームが他のフレームを参照する必要がある場合、動きベクトルの探索を行う。Iピクチャの場合は何も処理をせず、次の処理へ移行する。次に、Ｓ２０２でマクロブロックタイプの決定を行う。マクロブロックタイプの決定では、例えば、Pピクチャ、Bピクチャなど、処理対象フレームにおいて、動きベクトルの探索(インター予測)で得られた残差評価の値と、イントラ予測で得られた残差評価の値を比較し、コストの少ない方を選択し、マクロブロックタイプを決定する。マクロブロックタイプの決定が終わった後、ステップＳ２０３において、DCT変換及び量子化を行う。そして、Bピクチャから参照されるPピクチャ、Pピクチャ及びBピクチャから参照されるIピクチャの場合は、ステップＳ２０４において、逆量子化及び逆DCT変換を行い、デコード画像を生成しておく。最後に、ステップＳ２０５において、VLC符号化を行い、全体の符号量を削減する。
【００２２】
図4は、本発明の実施の形態１にかかる符号化処理のサブルーチンの動作フローチャートであり、図3で示した処理対象フレームの符号化の「動きベクトルの探索」「マクロブロックタイプの決定」「DCT変換及び量子化」「逆量子化及びDCT変換」「VLC符号化」サブルーチンの動作を示す。
【００２３】
図４のパターン（パターン（ａ））では、まず、ステップＳ３０１において、処理対象フレームの総数を取得する。次に、ステップＳ３０２において、処理対象フレームの総数が０より大きいかを確認する。ここで、処理対象フレームの総数が０以下の場合は、ステップＳ３１０に進む。逆に、処理対象フレームの総数が０より大きい場合は、ステップＳ３０３において、処理対象フレームを処理対象リストから１つ取得する。取得した処理対象フレームに対して、ステップＳ３０６で画像領域の分割と記憶を行い、ステップＳ３０７において並列処理用サブルーチンを実行する。なお、ステップＳ３０７に示される並列処理用サブルーチンとは、処理対象画像領域毎の「DCT変換及び量子化」「逆量子化及びDCT変換」「VLC符号化」などの処理を指す。これらの並列処理用サブルーチンが同時実行されている間、ステップＳ３０８において、全サブルーチンの完了を待つ。全サブルーチンの処理が完了した後、ステップＳ３０９において、処理が完了した処理対象フレームを処理対象リストから１つ削除し、代わりに後段にある別の処理の処理対象リストに処理対象フレームを設定する。最後に、処理を停止する必要があるかどうかを確認し、停止する必要がない場合は、ステップＳ３０１に戻り、停止する必要がある場合は、処理を終える。
【００２４】
符号化処理のサブルーチンの動作は、図４を用いて説明したパターン（ａ）ではなく、他のパターンを適用してもよい。以下に図９、図１０を用いて他のパターンにおける符号化処理のサブルーチンについて説明する。なお、これらのサブルーチンは、ある程度共通の動作を持つことから、説明を簡単化するためにフローチャートを図４および図９、図１０にて共通にしている。
【００２５】
図９のパターン（パターン（ｂ））では、図４のパターンに加え、ステップＳ３０３において取得された処理対象フレームが、Iピクチャなど他のフレームを参照しないフレーム(イントラフレーム)であった場合、次のステップＳ３０４において、処理対象フレームがインターフレーム(他のフレームを参照するフレーム)であるかどうかを確認し、インターフレームであるなら次のステップＳ３０６に進む。イントラフレームである場合は、何も処理を行わない。なお、ステップＳ３０７に示される並列処理用サブルーチンとは、処理対象領域毎の「動きベクトルの探索」などの処理を指す。
【００２６】
図１０のパターン（パターン（ｃ））では、図４のパターンに加え、ステップＳ３０３において処理対象フレームを取得した後、ステップＳ３０５において、処理対象フレームが参照する参照フレームのデコード画像が作成されるのを待機する。この時、参照フレームを符号化するスレッドでデコード画像を作成するようにしても良いし、処理対象フレームを取得したスレッドでデコード画像を作成するようにしても良い。なお、ステップＳ３０７に示される並列処理用サブルーチンとは、処理対象領域毎の「マクロブロックタイプの決定」などの処理を指す。
【００２７】
図5は、本発明の実施の形態１にかかる画像領域の分割と記憶の動作フローチャートであり、パターン(a)、(b)、(c)で示した符号化処理のサブルーチンの「画像領域の分割と記憶」サブルーチンの動作を示す。まず、ステップＳ４０１において、処理対象領域毎に処理する並列処理用サブルーチンで行われる演算処理が、隣接するマクロブロックの結果に依存するか否かの確認を行う。隣接するマクロブロックに依存する場合は、ステップＳ４０２において、スライス単位で画像領域を分割する。なお、ここでは、１フレームあたりのマクロブロックの行数とスライスの行数は等しいものとする。隣接するマクロブロックに依存しない場合は、ステップＳ４０３において、マクロブロック単位で画像領域を分割する。ステップＳ４０２或いはステップＳ４０３において、画像領域を分割した後、ステップＳ４０４において、各画像領域にインデックスを付与し、処理対象リストとして記憶する。
【００２８】
図6は、本発明の実施の形態１にかかる並列処理用サブルーチンの動作フローチャートであり、パターン(a)、(b)、(c)で示した符号化処理のサブルーチンの「並列処理用サブルーチン」の動作を示す。まず、ステップＳ５０１において、処理対象画像領域の総数を取得する。次に、ステップＳ５０２において、処理対象画像領域の総数が０より大きいかどうかを確認する。ここで、処理対象画像領域の総数が０以下の場合は、ステップＳ５０６に進む。逆に、処理対象フレームの総数が０より大きい場合は、ステップＳ５０３において、処理対象画像領域を処理対象リストから１つ取得する。次に、ステップＳ５０４において、演算処理用サブルーチンを実行する。演算処理用サブルーチンの処理が完了した後、ステップＳ５０５において、処理が完了した処理対象画像領域を処理対象リストから１つ削除する。最後に、処理を停止する必要があるかどうかを確認し、停止する必要がない場合は、ステップＳ５０１に戻り、停止する必要がある場合は、処理を終わる。
【００２９】
図7は、本発明の実施の形態１にかかる符号化処理のサブルーチンの動作パターン表であり、パターン(a)、(b)、(c)で示した符号化処理のサブルーチンがそれぞれどの処理に適用されるのかを示す。並列化にはいくつかのパターンがあり、ここでは２種類のパターンを示す。なお、本発明では、「動きベクトルの探索」処理においてデコード画像を参照しないため、一般的な符号化よりも若干画質が落ちるというデメリットを持つ。但し、ある程度のビットレートが確保できる状況では、その影響は軽微であることを確認している。以下に、各並列化における動作パターンについて説明する。
【００３０】
並列化Aにおいて、「動きベクトルの探索」処理は、イントラフレームに対して一切の処理を行わないため、動作パターンは(b)となる。「マクロブロックタイプの決定」処理は、マクロブロックタイプの決定にデコード画像を利用するため、動作パターンは(c)となる。「DCT変換及び量子化」、「逆量子化及びDCT変換」、「VLC符号化」については、既に作成されたデコード画像を再利用するため、動作パターンは(a)となる。
【００３１】
並列化Bにおいて、「動きベクトルの探索」処理は、イントラフレームに対して一切の処理を行わないため、動作パターンは(b)となる。「マクロブロックタイプの決定」処理は、マクロブロックタイプの決定にデコード画像を利用しないため、動作パターンは(a)となる。「DCT変換及び量子化」では、デコード画像を利用するため、動作パターンは(c)となる。「逆量子化及びDCT変換」、「VLC符号化」については、既に作成されたデコード画像を再利用するため、動作パターンは(a)となる。
【００３２】
図8は、実施の形態１にかかる映像符号化における並列処理の流れであり、図7の並列化Aのパターンにおける例を示す。入力された動画像の一部のフレームのインデックスを符号化順にn、n+1、n+2、…とした時、全ての動きベクトルの探索処理はスレッドTh1、Th2、Th3、…で“疑似的に”同時実行される。n+1、n+2番目のB  Frameのマクロブロック決定処理では、n番目のP  Frameのデコード画像が生成されるのを待機する必要があるが、一般的に動きベクトルの探索処理の割合が映像符号化処理の大半を占めるため、待機時間を短縮することができる。また、処理量の多い動きベクトル探索処理を複数のスレッドTh1、Th2、Th3、…で処理することができる。更に、各スレッドTh1、Th2、Th3、…は、動きベクトルの探索、マクロブロックタイプの決定処理などにおいて、そのスレッド内で更に複数のスレッドを作成しても良い。
【産業上の利用可能性】
【００３３】
本発明は、マルチコア、マルチスレッドに対応したオペレーティングシステムを採用するコンピュータにおいて、特に複数の物理プロセッサを有する環境で、効率的にプロセッサを利用し、映像の符号化を行うことができる。本発明は、パーソナルコンピュータへの適用に限定されず、マルチスレッド処理が可能な環境であれば、携帯電話、ビデオカメラ等の電子機器にも適用可能である。また、同様の機能を実行可能なプログラムを格納したＣＤやＤＶＤ等の記録メディアにも適用可能である。
【符号の説明】
【００３４】
１００    動画像入力部
１０１    入力画像記憶部
１０２    動きベクトル探索処理部
１０３    デコード処理部
１０４    残差評価再処理部
１０５    符号化処理部
１０６    画像領域分割処理部
１０７    画像領域分割処理部
１０８    画像領域分割処理部
１０９    画像領域分割処理部
１１０    処理対象画像領域記憶部
１１１    処理対象画像領域記憶部
１１２    処理対象画像領域記憶部
１１３    処理対象画像領域記憶部
【図１】
2013062656.tif 000003
【図２】
2013062656.tif 000004
【図３】
2013062656.tif 000005
【図４】
2013062656.tif 000006
【図５】
2013062656.tif 000007
【図６】
2013062656.tif 000008
【図７】
2013062656.tif 000009
【図８】
2013062656.tif 000010
【図９】
2013062656.tif 000011
【図１０】
2013062656.tif 000012