特許第5774995号(P5774995)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ トムソン ライセンシングの特許一覧

特許5774995GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化
<>
  • 特許5774995-GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化 図000002
  • 特許5774995-GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化 図000003
  • 特許5774995-GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化 図000004
  • 特許5774995-GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化 図000005
  • 特許5774995-GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5774995
(24)【登録日】2015年7月10日
(45)【発行日】2015年9月9日
(54)【発明の名称】GOPマージおよびビット割付けを用いたマルチスレッド・ビデオ符号化
(51)【国際特許分類】
   H04N 19/114 20140101AFI20150820BHJP
   H04N 19/115 20140101ALI20150820BHJP
   H04N 19/142 20140101ALI20150820BHJP
   H04N 19/159 20140101ALI20150820BHJP
   H04N 19/177 20140101ALI20150820BHJP
   H04N 19/436 20140101ALI20150820BHJP
【FI】
   H04N19/114
   H04N19/115
   H04N19/142
   H04N19/159
   H04N19/177
   H04N19/436
【請求項の数】17
【全頁数】17
(21)【出願番号】特願2011-536319(P2011-536319)
(86)(22)【出願日】2009年11月12日
(65)【公表番号】特表2012-509013(P2012-509013A)
(43)【公表日】2012年4月12日
(86)【国際出願番号】US2009006062
(87)【国際公開番号】WO2010056315
(87)【国際公開日】20100520
【審査請求日】2012年11月12日
(31)【優先権主張番号】61/199,180
(32)【優先日】2008年11月13日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】501263810
【氏名又は名称】トムソン ライセンシング
【氏名又は名称原語表記】Thomson Licensing
(74)【代理人】
【識別番号】110001243
【氏名又は名称】特許業務法人 谷・阿部特許事務所
(72)【発明者】
【氏名】ヤン,フア
【審査官】 山▲崎▼ 雄介
(56)【参考文献】
【文献】 特開平10−304375(JP,A)
【文献】 特開2008−085673(JP,A)
【文献】 特開平11−027662(JP,A)
【文献】 特開平09−037257(JP,A)
【文献】 特表2000−511740(JP,A)
【文献】 特開平10−304372(JP,A)
【文献】 特開2003−153268(JP,A)
【文献】 特開2006−287444(JP,A)
【文献】 特開平11−196376(JP,A)
【文献】 特開2002−010259(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04N 19/00−19/98
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実行されるビデオを符号化する方法であって、
複数の入力フレーム中でシーンの終端を検出するステップと、
前記入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切るステップと、
低フレームしきい値を設定するステップと、
前記シーンの終端において前記低フレームしきい値未満のフレーム数を有するGOPをその前のGOPとマージするステップと、
前記GOPをバッファにバッファリングするステップと、
前記GOPに割り当てられた複数のスレッドによって並列に単一パスで前記バッファから選出された前記GOPを符号化するステップと、
を含み、
各GOPに対してビット・バジェットが割り付けられ、前記GOPの符号化の前に、前記ビット・バジェットからの2つのビット部分が、前記GOPの中間フレームのビット割付けおよび最後のフレームのビット割付けのため予約され、
前記GOPにおける中間フレームのビット割付けで、ビット不足状況が検出された場合には、該中間フレームのために予約された前記2つのビット部分のうちの1つをそのビット割付けに使用し、前記GOPの最後のフレームのビット割付けで、ビット不足状況が検出された場合には、前記GOPの最後のフレームのビット割付けのために予約された前記2つのビット部分のうちの1つと前記GOPの中間フレームのビット割付けのために予約された前記2つのビット部分のうちの1つの残りの全てとをそのビット割付けに使用する、前記ビデオを符号化する方法。
【請求項2】
前記ビット・バジェットが、GOPごとにバイトに丸められる、請求項1に記載の方法。
【請求項3】
フレームごとにビット・バジェットが割り付けられる、請求項1に記載の方法。
【請求項4】
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、請求項1に記載の方法。
【請求項5】
各符号化GOP中のビット数が、当該GOPに割り付けられたビット・バジェットと等しい、請求項1に記載の方法。
【請求項6】
前記2つのビット部分が、それぞれ等量のバイトに丸められる、請求項1に記載の方法。
【請求項7】
フレームのビット割付けの前記ビット不足状況が、フレーム・ビット・バジェットに対する予測残差符号化のためのビットの比率がしきい値未満であるときに定義され、前記予測残差符号化のためのビットが、該フレームの総ビット・バジェットから、ユニット・ヘッダ、ピクチャ・ヘッダ、マクロブロック・ヘッダおよび動きベクトル符号化ビットを含む、残差符号化に使用されないオーバヘッド・ビットを引くようにして推定される、請求項1に記載の方法。
【請求項8】
GOPの最後のフレームまたは前記低フレームしきい値未満のGOPサイズを有するGOPの第1のIフレームについて、ビット・バジェットのビット部分が、該フレームの符号化前に予約される、請求項4に記載の方法。
【請求項9】
グループ・オブ・ピクチャ(GOP)に割り当てられた複数のスレッドによって並列に単一パスでバッファから選出された前記GOPを符号化する単一パス・ビデオ・エンコーダであって、
複数の入力フレーム中でシーンの終端を検出する検出モジュールと、
前記入力フレームを前記GOPに仕切り、低フレームしきい値を設定し、前記シーンの終端において前記低フレームしきい値未満のフレーム数を有するGOPをその前のGOPとマージするよう適合されたGOP割当てモジュールと、
前記GOPを記憶するバッファと、
ビット・バジェットを各GOPに対して割り付ける割付けモジュールと、
を備え、
前記GOPの符号化の前に、前記ビット・バジェットからの2つのビット部分が、前記GOPの中間フレームのビット割付けおよび前記GOPの最後のフレームのビット割付けのため予約され、前記GOPにおける中間フレームのビット割付けで、ビット不足状況が検出された場合には、該中間フレームのために予約された前記2つのビット部分のうちの1つをそのビット割付けに使用し、前記GOPの最後のフレームのビット割付けで、ビット不足状況が検出された場合には、前記GOPの最後のフレームのビット割付けのために予約された前記2つのビット部分のうちの1つと前記GOPの中間フレームのビット割付けのために予約された前記2つのビット部分のうちの1つの残りの全てとをそのビット割付けに使用する、前記単一パス・ビデオ・エンコーダ。
【請求項10】
前記ビット・バジェットをGOPごとにバイトに丸める丸めモジュールをさらに備える、請求項9に記載のエンコーダ。
【請求項11】
フレームごとにビット・バジェットが割り付けられる、請求項9に記載のエンコーダ。
【請求項12】
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、請求項9に記載のエンコーダ。
【請求項13】
各符号化GOP中のビット数が、当該GOPに割り付けられたビット・バジェットと等しい、請求項10に記載のエンコーダ。
【請求項14】
コンピュータによって実行される符号化するビデオを準備する方法であって、
複数の入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切るステップと、
低フレームしきい値を設定するステップと、
フレーム数が前記低フレームしきい値未満である最後のGOPをその前のGOPとマージするステップと、
前記GOPをバッファリングするステップと、
を含み、
各GOPに対してビット・バジェットが割り付けられ、前記GOPの符号化の前に、前記ビット・バジェットからの2つのビット部分が、前記GOPの中間フレームのビット割付けおよび前記GOPの最後のフレームのビット割付けのため予約され、
前記GOPにおける中間フレームのビット割付けで、ビット不足状況が検出された場合には、該中間フレームのために予約された前記2つのビット部分のうちの1つをそのビット割付けに使用し、前記GOPの最後のフレームのビット割付けで、ビット不足状況が検出された場合には、前記GOPの最後のフレームのビット割付けのために予約された前記2つのビット部分のうちの1つと前記GOPの中間フレームのビット割付けのために予約された前記2つのビット部分のうちの1つの残りの全てとをそのビット割付けに使用する、前記符号化するビデオを準備する方法。
【請求項15】
前記ビット・バジェットがGOPごとにバイトに丸められる、請求項14に記載の方法。
【請求項16】
フレームごとにビット・バジェットが割り付けられる、請求項14に記載の方法。
【請求項17】
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、請求項14に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2008年11月13日出願の米国仮出願第61/199180号の利益を主張するものである。
【0002】
本発明は、ビデオ符号化に関し、より詳細には、GOPマージおよびビット割付けを用いて、複数のスレッドを有するグループ・オブ・ピクチャ(GOP)並列単一パス・ビデオ・エンコーダにおける仮想参照デコーダ(HRD:Hypothetical Reference Decoder)コンフォーマンスをサポートすることに関する。
【背景技術】
【0003】
ネットワークを介して符号化ビットストリームを遠隔のクライアント・デコーダに伝送し、それをデコーダがうまく復号して滑らかにビデオを再生する必要がある実際のビデオ・ストリーミング・システムでは、HRDコンフォーマンスは、符号化ビデオ・ビットストリームをうまく配信するための必要条件である。デコーダが有する復号バッファは、大きさが限られているが、ネットワークから配信されるビデオ・ビットストリームを絶えず受信する。一方で、復号モジュールは、バッファリングした各符号化単位(例えばフレーム)のビットストリームをバッファから取り出し、復号し、再構築したビデオ信号を再生する。実際のビデオ・ストリーミング・システムでは、デコーダのバッファは、現在のネットワークでは避けることができないチャネル伝送速度のジッタリングを吸収し、復号したビデオを途切れずに滑らかに再生するために必要である。
【0004】
従って、HRDコンフォーマンスは、符号化ビデオ・ビットストリームに対するデコーダ・バッファ制約を満足させることと、基本的には同じ問題である。
【0005】
エンコーダにおいて1組のHRDパラメータのセットを想定し、各フレーム(あるいはH.264では一般にスライス)を符号化するときにこの想定したHRDパラメータに適合するようにすることにより、その結果得られる符号化ビットストリームは、やはり同じHRDパラメータのセットに適合しているデコーダであれば何れのデコーダでもうまく復号することができる。これにより、ビデオ・コーデック関連産業の異なる製造業者のエンコーダおよびデコーダをより容易に協働させることができるようになる。現在では、HRDコンフォーマンスの重要性は、広く認識されるようになっており、最新のH.264/AVCビデオ符号化標準のAnnex Cで標準化されている。
【0006】
一般に、当該のHRDまたはデコーダ・バッファのパラメータとしては、周知のリーキー・バケット・モデルを規定する、バッファ・サイズ、初期バッファ・レベル、およびチャネル・レートなどがある。HRDコンフォーマンスは、符号化ビットストリーム・データをバッファに入れるとき、および各符号化単位の復号のためにビットストリームを取り出すときに、バッファ・オーバフローまたはバッファ・アンダフローが起きないことを意味する。従って、HRDコンフォーマンスをサポートするために、ビデオ・エンコーダは、(i)各単位(例えばフレームまたはフィールド)を符号化した後で現在のバッファ・レベルを正確に把握しておくこと、(ii)それに基づいて、次の単位の符号化ビットの上限および/または下限を導出すること、および(iii)当該単位の符号化ビットがそれらの限界を超えないことを確実にすることが必要である。実際には、ビデオ・エンコーダのレート制御方式によってバッファ制約問題に対処する。
【0007】
複数のスレッドを有するGOP並列(パラレル)単一パス・ビデオ・エンコーダでHRDコンフォーマンスをサポートすることにより、難問が生じる。実時間ビデオ符号化システムで一般に良く用いられるこのアーキテクチャでは、複数のGOPを複数の符号化スレッドによってそれぞれ同時に符号化することができ、各GOPは1回だけ符号化すればよい。GOP並列単一パス符号化は、簡単に符号化プロセスの速度を大幅に上げるが、HRDコンフォーマンスをサポートすることが、従来のGOP逐次(シーケンシャル)単一スレッド符号化の場合より、かなり困難な作業になるという副作用がある。GOP逐次ビデオ符号化では、GOPを符号化するときに、それ以前の全てのフレームが既に符号化されているので、その符号化ビットを使用して、現在のバッファ・レベルを正確に把握し、HRDコンフォーマンス符号化のための正しい限界を導出することができる。しかし、GOP並列符号化の場合には、あるスレッドが現在のGOPを符号化しようとしているときに、それ以前のGOPの一部が、依然として他のいくつかのスレッドによる符号化の最中である可能性がある。これを図1に示す。図1では、斜線領域が、GOP中の符号化された部分を表している。これらのGOPでは、現在のGOPを符号化するときに、正確な符号化ビットが不明であり、HRDコンフォーマンス符号化が不可能になっている。
【0008】
一般に、マルチパス・システムでは、各GOPが、実際の符号化の前に割り付けられた全てのバジェット・ビットを正確に消費するようにしなければならない。そのようにして、部分的に符号化されたGOPについて、それらに割り付けられたビットがそれらの最終的な符号化ビットであると仮定し、それらを使用してバッファ状態を把握することができる。しかし、単一パス実時間ビデオ符号化の場合には、任意のGOPについて事前に割り付けられたビットを正確に達成することは、レート制御の極めて困難な作業である。なお、マルチパス符号化が可能であれば、正確なGOPビットの達成は、はるかに容易に、且つはるかに直接的になることに留意されたい。その場合には、GOPの事前に割り付けられたビットが符号化GOPで正確に達成されない可能性があるが、全てのGOPが1回だけ符号化されると仮定して、HRDコンフォーマンス検査を行うことができる。HRD違反(すなわちバッファ・オーバフローまたはバッファ・アンダフロー)が見られる場合には、エンコーダは、新たに割り付けられたビットを用いて問題のGOPを再符号化して、違反を防止することができる。この第2のパスの符号化後に、エンコーダは、HRD検査を再度行うことができ、また、HRD違反が生じなくなるまで、同様の動作を行うことができる。ただし、HRDコンフォーマンスをサポートするための唯一の方法がGOP割付けビットを正確に達成することである単一パス・ビデオ符号化では、このHRD調節は不可能である。
【0009】
このデコーダ・バッファ制約またはHRDコンフォーマンス問題は、長い間、ビデオ・ストリーミング分野のビデオ・エンコーダの実用的なレート制御方式を開発する上での重要な問題と考えられてきた。しかし、現在までに行われている研究の大部分は、バッファ制約を満足することが一般に実際的な難題にならない、GOP逐次単一スレッド符号化の場合に集中している。
【0010】
シーンの終端部を検出し、複数のフレームを仕切り、複数のグループ・オブ・ピクチャ(GOP)をマージする、ビデオを符号化する方法である。この方法では、複数の入力フレーム中のシーンの終端部を検出する。これらの入力フレームは、複数のGOPに仕切られる。シーンGOPの終端部におけるフレーム数が低フレームしきい値未満である場合には、これらのフレームを、以前のGOPとマージする。これらのGOPをバッファリングし、GOPの複数のスレッドを、バッファから並列に単一パスで符号化する。ビット・バジェットは、各GOPに対して割り付けてもよいし、各GOPごとにバイトに丸めてもよいし、各フレームに対して割り付けてもよいし、各フレーム内の各マクロブロックに対して割り付けてもよい。さらに、各符号化GOP中のビット数は、当該GOPに割り付けられたビット・バジェットと等しくすることができる。ビット・バジェットの2つのビット部分を、GOPの符号化前に、それぞれ該GOPの中間フレームのビット割付けおよび該GOPの最後のフレームのビット割付けのために予約して、ビット不足状況を防止することができ、また、これら2つの部分は、それぞれ等量のバイトに丸めることができる。GOPの中間フレームのビット割付けでは、ビット不足状況が検出された場合には、該中間フレームのために予約されたGOPビット・バジェットを使用して、ビット不足を防止することができる。ここで、フレームのビット割付けのビット不足状況は、フレーム・ビット・バジェットに対する予測残差符号化のための推定ビットの比率がしきい値未満であるときとして定義する。この方法は、フレームの予測残差符号化のためのビットが、該フレームの総ビット・バジェットから、ユニット・ヘッダ、ピクチャ・ヘッダ、マクロブロック・ヘッダおよび動きベクトル符号化ビットなど、残差符号化に使用されない推定オーバヘッド・ビットを引いたものとして推定されることも含むことができる。さらに、GOPの最後のフレームについて、全ての残りの予約GOPバジェット・ビットを、そのビット割付けに使用することができる。この方法は、さらに、GOPの最後のフレーム、またはしきい値未満のGOPサイズを有するGOPの第1のIフレームについて、ビット・バジェットのビットの一部分を、該フレームの符号化前に予約して、該フレームのビット・オーバシュートを防止するようにすることもできる。
【0011】
複数のスレッドを並列に符号化する単一パス・ビデオ・エンコーダなどを提供する。このエンコーダは、複数の入力フレーム中でシーンの終端部を検出する検出モジュールと、該入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切り、低フレームしきい値を設定し、該シーン終端部においてフレーム数が低フレームしきい値未満であるGOPをその前のGOPとマージするようになされたGOP割当てモジュールと、GOPを記憶するバッファとを備える。このエンコーダは、ビット・バジェットを各GOPに対して割り付ける割付けモジュールと、ビット・バジェットを各GOPごとにバイトに丸める丸めモジュールとをさらに備えることができる。ビット・バジェットは、各フレームに対して割り付けてもよいし、各フレーム内の各マクロブロックに対して割り付けてもよい。各符号化GOP中のビット数は、該GOPに割り付けられたビット・バジェットと等しくすることができる。
【0012】
さらに、複数の入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切るステップと、低フレームしきい値を設定するステップと、フレーム数が低フレームしきい値未満である最後のGOPをその前のGOPとマージするステップと、GOPをバッファリングするステップとを含む、符号化するビデオを準備する方法を提供する。
【0013】
以下、例示を目的として添付の図面を参照しながら本発明について説明する。
【図面の簡単な説明】
【0014】
図1図1は、本発明による実時間ビデオ・エンコーダにおける複数の符号化スレッドによる複数のGOPの並列符号化を示す図である。
図2A】本発明によるGOP並列マルチスレッド単一パス実時間ビデオ符号化のためのHRDコンフォーマンス対応レート制御解決策の全体的な枠組みを示すブロック図である。
図2B】本発明によるGOP並列マルチスレッド単一パス実時間ビデオ符号化のためのHRDコンフォーマンス対応レート制御解決策の全体的な枠組みを示すブロック図である。
図3】本発明によるビット・オーバシュート補償MBレベル・レート制御を示すブロック図である。
図4】GOP中の最後のフレームの符号化後のフィラー・ユニット付加を示すブロック図である。
【発明を実施するための形態】
【0015】
本開示中の少なくとも1つの実施態様は、まさにこのGOPレベルの正確なビットを達成する問題に対処するものであり、この目的を達成するための包括的レート制御方法を提案するものである。提案する方式は、主として、シーン終端部短GOPマージ、ビット・バジェット丸め、GOPおよびフレーム・レベルのビット予約、ビット・オーバシュート補償MBレベル・レート制御、フィラー・ユニット付加、ならびに効率的なマルチスレッド符号化情報のバッファリングおよび通信を含む。複数のスレッドを有する実用的な単一パス実時間ビデオ・エンコーダによる広範な試験により、提案する方式が、失敗が常にほとんど見られないHRDコンフォーマンスを常に保証することが分かる。
【0016】
当該のGOP並列マルチスレッド・ビデオ符号化の場合には、マルチパスGOP符号化が可能であれば、HRDコンフォーマンスをサポートすることにより、直接的且つ容易に実行できる解決策ももたらされる。すなわち、違反が発見されると必ず、符号化ビットストリーム全体が特定のHRDコンフォーマンス検査に合格するまで、関連するGOPをHRD調整によって再符号化する。従って、この場合には、正確なGOPビットを達成することは有用な技術ではあるが、正確なGOPビットを達成することが不可欠というわけではない。
【0017】
しかし、本開示の少なくとも1つの実施態様では、発明者等は、実時間ビデオ符号化のための重要且つ効果的なアーキテクチャであるGOP並列および単一パス・ビデオ符号化を扱う。この場合には、正確なGOPビットの達成が、実際には極めて難問であるHRDコンフォーマンスをサポートするために不可欠である。これは、ビデオ信号が極めて非定常の信号であるからである。しかし、レート制御では、過去の符号化ビデオ・ユニットから推定したモデルに基づいてビット割付けまたはビット達成を行う。従って、過去に符号化されたビデオ・ユニットと現在の符号化ビデオ・ユニットの特徴の不整合または差違により、レート制御が不正確になり、ビット・オーバシュートおよびビット・アンダシュートが生じることが避けられない。効果的にHRDコンフォーマンスをサポートするためには、ビデオ信号の非定常性に対して十分にレート制御をロバストにすることにより、各GOP符号化で事前に割り付けられるビットを常に正確に達成する技術を開発しなければならない。
【0018】
少なくとも1つの実施例は、各GOPに事前に割り付けられたビットを正確に達成し、それにより上述のように複数のスレッドを有するGOP並列単一パス実時間ビデオ符号化の場合に効果的にHRDコンフォーマンスをサポートする効果的な包括的レート制御方法を提供する。提案する方法は、主として、後により詳細に説明する以下の技術からなる。
(i)シーン終端部短GOPマージ。シーン終端部で短すぎるGOPを、その前のGOPとマージして、短すぎるGOPのレート制御が極めて不正確になる可能性を回避する。
(ii)ビット・バジェット丸め。GOPの事前に割り付けられたビット・バジェット、および当該GOPの最後の符号化フレームの事前に割り付けられたビット・バジェットの両方を、ビット・イグザクト(bit−exact)なビット達成のためにバイトに丸める。
(iii)ビット予約。GOPレベルおよびフレーム・レベルのビット予約により、フレーム・レベルのビット割付けおよびMBレベルのビット割付けにおいてビット不足の状況になることを防止する。
(iv)ビット・オーバシュート補償。MBレベル・レート制御において、ビット・オーバシュート効果を保証して、フレームを符号化する際のビット・オーバシュートを防止する。
(v)フィラー・ユニット付加。最終的に残りのビットを全て使い切るために、GOP中の最後の符号化フレームの後に適当な量のフィラー・ユニット・バイトを付加する。
(vi)マルチスレッド符号化情報のバッファリングおよび通信。符号化情報をバッファリングして、全ての符号化スレッドの間で共有する。バッファ・サイズ削減のための効果的な符号化GOPマージ、および2つのセマフォを備えるスレッド間待機機構などを含む。提案する方法の詳細を、図2に示す。まず、ステップ20で、入力フレームを複数のGOPに仕切り、次いで、これらのGOPをFIFO(先入れ先出し)待ち行列にバッファリングする。ステップ22で、第1の利用可能な符号化スレッドが、待ち行列の先頭から、最初の利用可能なGOPを符号化のために取り出す。なお、GOPを仕切る際には、シーン終端部短GOPマージが好ましいことに留意されたい。これは、短いGOPは総ビット・バジェットが限られているために、(iii)で述べたようにフレーム・レベルのビット割付けにおいてビット不足を防止するためにGOPレベルで予約されたビットもまた限られているからである。従って、大きなGOPの場合より、ビット・オーバシュートを防止することが困難である。従って、シーンの終端部のGOPが短すぎる(例えば5フレーム未満)場合には、当該GOPをその前のGOPとマージしてより大きなGOPを形成し、レート制御のための正確なGOPビット達成の負担を軽くする。
【0019】
次に、ステップ24で、現在のGOPを符号化しているスレッドは、現在のGOPが当該スレッドによって符号化される最後のGOPの直後に続くGOPであるかどうかを確認する。直後に続くGOPである場合には、当該スレッドは、その最後に符号化されるGOPによって生じるバッファ状態を追跡し続けることができる。そうでない場合には、現在のGOPと最後に符号化されるGOPとの間に、その他のスレッドによってこれから符号化される、または既に符号化されている1つまたは複数のGOPが存在する。この場合には、現在のスレッドは、HRD_info_bufferにバッファリングされている全てのスレッドの符号化情報に基づいて現在のバッファ状態を更新する必要があり、これについては後で詳細に説明する。具体的には、中間のGOPに対して、割り付けられたビットまたは実際の符号化ビットをそれらの最終的な符号化ビットであると仮定して現在のバッファ・レベルを導出する。まだビットが割り付けられていないGOPがある場合には、現在のスレッドは、ステップ25でそれらのGOPのビット割付けが終了するのを待機する。GOPがスレッドに割り付けられてから当該GOPのビット割付けが終了するまでの時間は常に無視できるので、この待機によって符号化に深刻な遅延が生じることはない。スレッド間待機に関するもう1つの重要な問題は、待機デッドロックを回避することである。実際には、デッドロックを防止するためには、2つの別個の待機セマフォを有する必要があることが分かっている。図1を考慮して、スレッド2、3および4がそれぞれGOP_(i+1)、GOP_(i+3)およびGOP_(i+4)を符号化しようとしていると仮定すると、スレッド1は、まだGOP_iのビット割付けを完了していない。従って、スレッド2、3および4は、スレッド1のGOP_iのビット割付けを待機しなければならない。実際には、一般に良く用いられるスレッド間通信機構をセマフォと呼ぶ。従って、スレッド1は、GOP_iのビット割付けを終了すると、これら3つの待機スレッドに対して3つのセマフォを送る。予期された待機終了セマフォを受信した後で、スレッドは、その待機状態を終了する。しかし、本件の場合には、スレッド3または4が、スレッド2よりも早く待機終了セマフォを受信した場合には、それらのスレッドは、それぞれの処理を継続し、GOP_(i+1)の割付けビットに対する新たな待機状態に直ちに入る。従って、仮に待機セマフォが1つしか存在しないと、この新たな待機状態がそのまま、GOP_iのビット割付けの終了による待機終了セマフォをもう1つ取ることになる。この場合、スレッド2は、スレッド1からの予期された待機終了セマフォを受信することができないので、待機デッドロックになる。従って、2つの別個のセマフォが必要である。そうすれば、スレッド2に対する新たな待機状態が、スレッド1からの待機終了セマフォを取ることはないので、待機デッドロックは起きない。
【0020】
図2に示すように、スレッドは、次いで、現在のGOPの符号化に進む。まず、ステップ26で、現在のGOPのビット・バジェットを、GOPレベル・レート制御によって計算する。本明細書では、正確なGOP割付けビットを達成するという目的のために、現在の全てのビデオ符号化標準(例えばH.264/AVC)と同様に、割り付けられたビット・バジェットをバイトに丸めなければならず、各符号化単位(例えばスライス)を符号化して、整数バイトのビットストリームにする。従って、GOPビット・バジェット丸めは、正確なビットを達成するために必要である。同様に、各フレームのビット・バジェットも、図2に示すようにバイトに丸める。
【0021】
次いで、現在のスレッドは、現在のGOPの割り付けられたビットをHRD_info_bufferに記録する。上述のように現在のGOPのビット割付け結果を待機しているスレッドが他にもいくつか存在する場合には、現在のスレッドは、それに応じた数の待機終了セマフォを送信して、それらのスレッドに結果を通知し、それらの待機を終了させる(ステップ28)。
【0022】
次いで、ステップ30に進み、GOPレベルのビット予約を行う。基本的には、GOPを符号化する前に、一定数のビットを最初に予約して、残りのフレームのビット割付けで起こり得るビット不足の状況が生じることを防止する。レート制御の不正確性のために、あるフレームを符号化するためのビットが十分でない場合には、当該フレームについてビット・オーバシュートが起こる可能性が非常に高く、これにより、GOPの最終的な正確なビットが達成できない可能性がある。従って、ビット予約は必要である。この実施態様では、GOPレベルのビット予約および予約ビットの消費は、以下のように行われる。なお、本明細書では、GOP内の中間フレームのビット不足状況を防止するためのビット予約と、最後のフレームを符号化するためのビット予約はそれぞれ別個に行われることに留意されたい。これは、ビット・オーバシュートを防止することが、最終的な正確なGOPビットの達成のために極めて重要であり、従って、間違いなくその他の中間フレームよりも重要性がはるかに高いからである。
【0023】
GOPレベルのビット予約は、ステップ30で、以下の数式に基づいて行われる。
【0024】
reserved_bits_to_prevent_FBA_short_of_bits=Round_to_bytes[0.5*min(min(current_GOP_length、5)*target_bit_rate/frame_rate、curr_GOP_target_bits)*0.1]
【0025】
reserved_bits_for_the_last_frame=reserved_bits_to_prevent_FBA_short_of_bits
【0026】
curr_GOP_target_bits=curr_GOP_target_bits−reserved_bits_for_the_last_frame−reserved_bits_to_prevent_FBA_short_of_bits
【0027】
FBA(フレーム・レベル・ビット割付け)におけるGOPレベル予約ビットの消費は、ステップ32で管理され、以下の数式および論理に基づいている。
【0028】
現在のフレームがGOP中の最後のフレームでない場合、および当該フレームのビット割付けを行っているときにshort_of_bitsが発生した場合には、現在のフレーム・ビット割付けで、現在残っているreserved_bits_to_prevent_FBA_short_of_bitsの半分を使用する。依然としてshort_of_bitsである場合には、short_of_bitsが起きなくなるまで、または残りの予約ビットがなくなるまで、引き続き残りの予約ビットの半分を消費する。
【0029】
現在のフレームがGOP中の最後のフレームである場合には、全ての残りの予約ビット、すなわちreserved_bits_for_the_last_frameに、reserved_bits_to_prevent_FBA_short_of_bitsが残っていればこれも合わせて、そのフレーム目標ビット・バジェットに付加する。
【0030】
実際には、FBA中のshort_of_bitsを適切に規定して、フレーム符号化で制御されない状態でのビット・オーバシュートが生じるのを防止するのに役立てなければならない。本発明のこの実施態様では、あるフレームのビット割付けについて、全ての残りのビットおよび全ての残りのフレームを考慮して、予測残差符号化の推定残りビットが残りの全てのビットの有意な部分に相当しない、例えば15%未満であるときに、short_of_bitsであると見なす。予測残差符号化の推定残りビットは、残りの全てのビットから、NALまたはVCLユニット・ヘッダ、ピクチャ・ヘッダ、MB(マクロブロック)ヘッダなどの推定した全てのヘッダ・ビット、および動きベクトルなどを除いたものである。short_of_bitsの場合に備えて、残差符号化のための事前に割り付けられるビットは、実際には許容できる符号化品質を維持するのに十分ではないが、最小限のビット数を残差符号化に使用するので、符号化フレームのビット・オーバシュートは防止される。
【0031】
GOPレベルのビット予約の他に、実際に、本発明によるフレーム・レベルのビット予約技術をステップ50〜60に示す。この技術は以下の通りである。GOP中の最後のフレームについては、curr_frm_target_bits=curr_frm_target_bits*0.8である。それ以外、短いGOP、すなわちGOP_length<5であるGOP中の第1のIフレームについては、curr_frm_target_bits=curr_frm_target_bits*0.9である。
【0032】
フレームに割り付けるビットは十分であるが、フレーム符号化中のレート制御の不正確性により、依然として、最終的な符号化フレームのビットが当初の目標を超えることがある。そのために、発明者等は、効果的にフレーム・ビットのオーバシュートを防止するための別の技術、すなわち図3に詳細に示すビット・オーバシュート補償MBレベル・レート制御を提案する。この図では、ステップ50で、関連する変数を初期化し、チェック・ポイント(ステップ52)で、MBレベル・レート制御中にどの程度の頻度でビット・オーバシュート補償が行われるかを規定する。ステップ54、56を参照すると、一実施例では、フレーム中で追加のいくつかのビット(curr_frm_target_bits*10%)が符号化されると必ず、新たなチェック・ポイントに到達したと見なされる。ビット・オーバシュート比率は、この新たに符号化されたcurr_frm_target_bitsの10%の符号化結果に基づいて推定され、残りの目標ビットに適用されて、推定ビット・オーバシュート効果を保証する。図3に示すように、フレームがGOP中の最後のフレームでない場合には、最後のフレームの符号化の場合ほどビット・オーバシュートの防止が切実でないので、用いるビット・オーバシュート比率を緩める。
【0033】
図3を参照すると、最後に、GOP中の全てのフレームを符号化した後で、エンコーダのスレッドは、全ての事前に割り付けられたGOPビットがこの時点で使用されているかどうかを確認する。有意な量の割り付けられたビットが依然として残っている場合には、ステップ73、74で、全ての残りのビットを消費することになるGOP中の最後のフレームの符号化ビットストリームの後にフィラー・ユニットを付加して、GOPの符号化ビット全体がその事前に割り付けられたビットと正確に同じになるようにすることにより、HRDコンフォーマンスをうまくサポートする。フィラー・ユニットは、H.264/AVCに規定されるダミー・ユニットであり、例えば全てのビットが1または0であるダミー・コンテンツのみを含む。提案するフィラー・ユニット付加方式を、図4に示す。この図では、H.264に規定されたフィラー・ユニットについて、そのヘッダ・バイト数は6である。なお、本明細書では、curr_frm_target_bytesは、フレーム・レベル・ビット予約前の、元の現在のフレームの目標バイトを表すことに留意されたい。図4に示すように、ステップ70で、curr_frm_target_bytes自体がHRDの上限および/または下限と衝突する場合には、現在のGOPで正確なビットが達成されても、HRDコンフォーマンスは失敗する(ステップ76)。最後のフレームでビット・オーバシュートがある、すなわちcurr_frm_target_bytes<curr_frm_coded_bytesである、あるいはステップ72に示すように、残っている未使用の割り付けられたバイトが最低フィラー・ユニット・バイトすなわちフィラー・ユニット・ヘッダ・バイト未満である場合にも、HRDコンフォーマンスは失敗する。
【0034】
GOPを符号化した後で、符号化GOPのビットをHRD_info_bufferに適切に記録する。なお、割り付けられたGOPビットを記録するときとは異なり、GOPの符号化は時間がかかるので、スレッドがGOP符号化ビットを待機することは、実時間ビデオ符号化の場合には非現実的である。
【0035】
さらに、GOP符号化情報をバッファリングして複数の符号化スレッド間で共有する効率的な機構を提案し、導入する。符号化情報バッファを、HRD_info_bufferと表す。簡潔にするために、HRD_info_bufferの初期化は、図2には示していない。提案するHRD_info_bufferは、以下の2つの部分からなる。(i)シーケンスの第1のGOPから連結して一体にすることができる全ての符号化GOPのHRD情報をバッファリングするための単一のCodedSeqHrdInfoバッファ。(ii)CodedSeqHrdInfoバッファ中の最後のGOPと連結することができない全てのこれから符号化される、または既に符号化されているGOPについての符号化情報をバッファリングするための(2*total_number_of_threads)CodedGOPHrdInfoバッファ。図1に示すように、CodedGOPHrdInfoバッファは、既に符号化されたGOP、すなわちGOP_(i+2)またはこれから符号化されるGOP、すなわちGOP_i、GOP_(i+1)、GOP_(i+3)、GOP_(i+4)のそれぞれの、割り付けられたGOPビットおよび符号化GOPビットを記憶するためのものであり、CodedSeqHrdInfoバッファは、シーケンスの先頭から始まる全ての過去の符号化GOPと連続的に連結することができる最後の符号化GOPまでのバッファ状態情報、すなわち図1の「符号化シーケンス」の情報を記録するものである。
【0036】
実際には、CodedGOPHrdInfoバッファを効率的に管理する効果的な技術は、隣接する符号化GOPのマージである。すなわち、CodedGOPHrdInfoバッファ中に互いに隣接する2つの符号化GOPがある場合に、この2つのGOPの符号化情報をマージする。このマージは、図2では「GOP符号化ビットを用いてHRD_info_bufferを更新する」のモジュールに含まれ、提案するCodedGOPHrdInfoバッファのバッファ・サイズを大幅に減少させる。例えば、本発明のこの実施態様では、支障なくバッファ・サイズを(2*total_number_of_threads)に設定することができる。そうでない場合には、バッファ・サイズは、(2*total_number_of_threads*max_GOP_length)となる。ここで、max_GOP_lengthは、実際には非常に大きくすることもできる(例えば150超)。
【0037】
最後に、実際のGOP並列単一パス実時間ビデオ・エンコーダを用いた広範な試験を、提案したHRDコンフォーマンス・サポート方法について行ったことを強調しておくことが重要である。その結果から、提案した方法を用いると、HRD失敗が一貫してほとんど見られず、従って、HRDコンフォーマンスが効果的にサポートされていることが分かる。
【0038】
具体的な特性および特徴を有する1つまたは複数の実施態様について述べた。しかし、記載した実施態様の特性および特徴は、その他の実施態様に合わせて改変することもできる。本明細書に記載した実施態様は、特定の状況について述べていることもあるが、これらの記述は、いかなる意味においても、本発明の特性および概念をそのような実施態様または状況に限定するものとして解釈すべきではない。
【0039】
本明細書に記載の実施態様は、例えば、方法またはプロセス、装置、あるいはソフトウェア・プログラムとして実施することができる。単一の実施の形態の状況でしか述べていない場合でも(例えば方法としてしか述べていない場合でも)、記載した実施態様または特性は、その他の形態(例えば装置またはプログラム)で実施することもできる。装置は、例えば、適当なハードウェア、ソフトウェア、およびファームウェアで実施することができる。方法は、例えば、コンピュータなどの処理装置のような装置内で実施することができる。さらに、方法は、処理装置などの装置が命令を実行することによって実施することができ、これらの命令は、例えばCDなどのコンピュータ可読媒体またはその他のコンピュータ可読記憶装置、あるいは集積回路に記憶することができる。さらに、コンピュータ可読媒体は、実施により生成されたデータ値を記憶することもできる。
【0040】
実施により、例えば記憶または伝送することができる情報を搬送するようにフォーマットされた信号を生成することもできることは、当業者には明らかであろう。この情報としては、例えば、方法を実行するための命令や、上述の実施態様の1つによって生成されたデータなどが挙げられる。
【0041】
さらに、多くの実施態様は、エンコーダ、エンコーダのプリプロセッサ、デコーダ、およびデコーダのポストプロセッサの1つまたは複数で実施することができる。記載または企図した実施態様は、様々な異なる適用分野および製品で使用することができる。こうした適用分野または製品の例としては、セット・トップ・ボックス、携帯電話、携帯情報端末(PDA)、テレビジョン、個人記録装置(例えばPVR、記録ソフトウェアを実行しているコンピュータ、VHS記録装置など)、カムコーダ、インターネットなどの通信リンクを介したデータ・ストリーミング、およびビデオ・オン・デマンドなどが挙げられる。
【0042】
さらに、本開示によりその他の実施態様が企図される。例えば、開示した実施態様の様々な特性を結合、削除、修正、または補足することにより、追加の実施態様を生みだすこともできる。
【0043】
以下のリストは、様々な実施態様の簡単なリストである。このリストは、全てを網羅したものではなく、多くの可能な実施態様のうちのごく一部を簡単に記載したものに過ぎない。
【0044】
1.提案した包括的レート制御方法を採用して正確なGOPビット達成によってHRDコンフォーマンスをサポートするGOP並列マルチスレッド単一パス・ビデオ・エンコーダ。
【0045】
2.以下の提案する技術のうちの任意の1つまたは複数を含むことにより正確なGOPビットが達成される実施態様1。(i)短いGOPの発生を低減するシーン終端部短GOPマージ、(ii)GOPレベルおよびフレーム・レベルのビット・バジェットのバイトへの丸め、(iii)フレーム・レベルのビット割付けにおけるshort_of_bitsを防止するためのGOPレベルのビット予約、(iv)フレーム・レベルのビット予約、(v)MBレベル・レート制御におけるビット・オーバシュート補償、(vi)GOPの符号化の終わりのフィラー・ユニット付加、ならびに(vii)隣接するGOPのマージによりバッファ・サイズを減少させ、2つの別個のスレッド間待機セマフォを用いて待機デッドロックを防止する、マルチスレッド符号化情報のバッファリングおよび通信機構。
【0046】
3.GOPレベルのビット予約において、フレーム・レベルのビット割付けにおいてshort_of_bits状況を防止するためのGOPの中間フレームに対するビット予約と、ビット・オーバシュートを防止するためのGOPの最後のフレームに対するビット予約とが別々に行われる、実施態様2。
【0047】
4.フレーム・レベルのビット割付けにおけるshort_of_bitsが、フレームの予測残差符号化に十分なビットを有していないものとして定義される、実施態様3。
【0048】
5.MBレベル・レート制御におけるビット・オーバシュート補償が、図3に規定するように、定期的なビット・オーバシュート検査、適応型ビット・オーバシュート比率推定、および残り目標ビット調節を含む、実施態様2。
【0049】
6.本開示に記載する実施態様の何れかによって生成される信号。
【0050】
7.本開示に記載の1つまたは複数の実施態様による、HRD情報などのビデオ符号化情報の生成、アセンブル、記憶、送信、受信、および/または処理。
【0051】
8.記載の実施態様の1つに従って、またはそれと通信して動作することができる装置(例えばエンコーダ、デコーダ、プリプロセッサ、ポストプロセッサなど)。
【0052】
9.本開示に記載する実施態様の1つまたは複数に従って、1つまたは複数のHRDコンフォーマンス・エンジンあるいはHRDコンフォーマンスを実行するための命令セットを記憶する装置(例えばコンピュータ可読媒体など)。
【0053】
10.本開示に記載する実施態様の1つまたは複数に従って、HRDに関連する情報あるいはHRD出力または動作に関連する情報を含むようにフォーマットされた信号。
【0054】
11.信号がディジタル情報を表す、実施態様10。
【0055】
12.信号が電磁波である、実施態様10。
【0056】
13.信号がベースバンド信号である、実施態様10。
【0057】
14.情報が、残差データ、動きベクトル・データ、および参照指標データの1つまたは複数を含む、実施態様10。
【0058】
これらの実施態様は、符号化後に、各GOPが事前に割り付けられたビット・バジェットを過不足なく正確に使用することを保証する包括的な方法であり、単一パス実時間ビデオ符号化システムにおいて効果的にHRDコンフォーマンスをサポートする方法を与えるので有利である。
【0059】
前述の内容は、本発明の実施の可能性の一部を例示したものである。本発明の範囲および趣旨内で、その他の多くの実施例が可能である。従って、上記の記述は、制限的なものとではなく例示的なものとして見なすべきものであり、本発明の範囲は、添付の特許請求の範囲およびその全ての均等物によって与えられるものとする。
[付記1]
複数の入力フレーム中でシーンの終端を検出するステップと、
前記入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切るステップと、
低フレームしきい値を設定するステップと、
前記シーン終端においてフレーム数が前記低フレームしきい値未満であるGOPをその前のGOPとマージするステップと、
前記GOPをバッファリングするステップと、
GOPの複数のスレッドを前記バッファから並列に単一パスで符号化するステップと、
を含む、ビデオを符号化する方法。
[付記2]
各GOPに対してビット・バジェットが割り付けられる、付記1に記載の方法。
[付記3]
前記ビット・バジェットが、各GOPごとにバイトに丸められる、付記2に記載の方法。
[付記4]
各フレームに対してビット・バジェットが割り付けられる、付記1に記載の方法。
[付記5]
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、付記1に記載の方法。
[付記6]
各符号化GOP中のビット数が、当該GOPに割り付けられたビット・バジェットと等しい、付記2に記載の方法。
[付記7]
前記ビット・バジェットの2つのビット部分が、前記GOPの符号化の前に、それぞれ前記GOPの中間フレームのビット割付けおよび前記GOPの最後のフレームのビット割付けのために予約されて、ビット不足状況を防止する、付記2に記載の方法。
[付記8]
前記2つの部分が、それぞれ等量のバイトに丸められる、付記7に記載の方法。
[付記9]
前記GOPの中間フレームのビット割付けで、ビット不足状況が検出された場合には、該中間フレームのために予約されたGOPビット・バジェットを使用して、ビット不足を防止する、付記2に記載の方法。
[付記10]
フレームのビット割付けのビット不足状況が、フレーム・ビット・バジェットに対する予測残差符号化のための推定ビットの比率がしきい値未満であるときとして定義される、付記9に記載の方法。
[付記11]
フレームの予測残差符号化のためのビットが、該フレームの総ビット・バジェットから、ユニット・ヘッダ、ピクチャ・ヘッダ、マクロブロック・ヘッダおよび動きベクトル符号化ビットなど、残差符号化に使用されない推定オーバヘッド・ビットを引いたものとして推定される、付記10に記載の方法。
[付記12]
前記GOPの最後のフレームについて、全ての残りの予約GOPバジェット・ビットが、そのビット割付けに使用される、付記2に記載の方法。
[付記13]
GOPの最後のフレームまたはしきい値未満のGOPサイズを有するGOPの第1のIフレームについて、ビット・バジェットのビットの一部分が、該フレームの符号化前に予約されて、該フレームのビット・オーバシュートを防止する、付記4に記載の方法。
[付記14]
複数の入力フレーム中でシーンの終端を検出する検出モジュールと、
前記入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切り、低フレームしきい値を設定し、前記シーン終端においてフレーム数が前記低フレームしきい値未満であるGOPをその前のGOPとマージするようになされたGOP割当てモジュールと、
前記GOPを記憶するバッファと、
を備える、複数のスレッドを並列に符号化する単一パス・ビデオ・エンコーダ。
[付記15]
ビット・バジェットを各GOPに対して割り付ける割付けモジュールをさらに備える、付記14に記載のエンコーダ。
[付記16]
前記ビット・バジェットを各GOPごとにバイトに丸める丸めモジュールをさらに備える、付記15に記載のエンコーダ。
[付記17]
各フレームに対してビット・バジェットが割り付けられる、付記15に記載のエンコーダ。
[付記18]
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、付記15に記載のエンコーダ。
[付記19]
各符号化GOP中のビット数が、当該GOPに割り付けられたビット・バジェットと等しい、付記16に記載のエンコーダ。
[付記20]
複数の入力フレームを複数のグループ・オブ・ピクチャ(GOP)に仕切るステップと、
低フレームしきい値を設定するステップと、
フレーム数が前記低フレームしきい値未満である最後のGOPをその前のGOPとマージするステップと、
前記GOPをバッファリングするステップと、
を含む、符号化するビデオを準備する方法。
[付記21]
各GOPに対してビット・バジェットが割り付けられる、付記20に記載の方法。
[付記22]
前記ビット・バジェットが各GOPごとにバイトに丸められる、付記21に記載の方法。
[付記23]
各フレームに対してビット・バジェットが割り付けられる、付記20に記載の方法。
[付記24]
各フレーム内の各マクロブロックに対してビット・バジェットが割り付けられる、付記20に記載の方法。
図1
図2A
図2B
図3
図4