以下、発明を実施するための形態(以下実施の形態とする)について説明する。なお、説明は以下の順序で行う。
1.第1の実施の形態(ネットワークシステム:エラー伝搬対策用としてのFEC利用)
2.第2の実施の形態(ネットワークシステム:FEC利用用途の切り替え。エラー伝搬対策用若しくは回復用)
3.第3の実施の形態(ネットワークシステム:回復用FECとエラー伝搬対策用FECの併用)
4.第4の実施の形態(ネットワークシステム:RTCP利用)
5.第5の実施の形態(パーソナルコンピュータ)
<1.第1の実施の形態>
[ネットワークシステムの構成]
図1は、本発明を適用したネットワークシステムの構成例を示すブロック図である。
図1において、ネットワークシステム100は、画像データ(動画像または静止画像のデータ)を、ネットワーク110を介して、送信装置101から受信装置102に伝送するシステムである。以下においては説明の便宜上動画像データを伝送する場合について説明するが、以下の説明は静止画像データの伝送にも適用することができる。動画像はフレーム画像またはフィールド画像の集合、すなわち、静止画像の集合と考えることができる。したがって、ネットワークシステム100は、以下に説明する動画像データ伝送の場合と基本的に同様に処理を行うことにより、静止画像データの伝送を行うことができる。
送信装置101は、入力された動画像データ(ビデオIN)を符号化してパケット化し、そのパケットを、ネットワーク110を介して受信装置102に送信する。図1に示されるように、送信装置101は、動画像圧縮符号化部121、冗長符号化部122、およびRTP(Realtime Transport Protocol)送信部123を有する。
動画像圧縮符号化部121は、送信装置101に入力される動画像データ(ビデオIN)を圧縮符号化し、生成した符号化データを冗長符号化部122に供給する。
冗長符号化部122は、動画像圧縮符号化部121より供給された符号化データに対して冗長符号化を行い、冗長データを生成する。冗長符号化部122は、その生成された冗長データを符号化データとともに、(FEC(Forward Error Correction)符号化データとして、)RTP送信部123に供給する。
RTP送信部123は、供給されたFEC符号化データを、RTPパケットとして、ネットワーク110を介して受信装置102に送信する。
受信装置102は、ネットワーク110を介して送信装置101より送信されたRTPパケットを受信し、デパケタイズして冗長復号や伸長復号を行うことにより動画像データを生成して出力する。図1に示されるように、受信装置102は、RTP受信部131、冗長復号部132、および動画像伸長復号部133を有する。
RTP受信部131は、RTP送信部123から送信されるRTPパケットを受信し、FEC符号化データを冗長復号部132に供給する。冗長復号部132は、供給されたFEC符号化データを、冗長符号化部122の冗長符号化方法に対応する復号方法で冗長復号し、損失(ロス)したデータを、冗長データを使って復元する。冗長復号部132は、得られた符号化データを動画像伸長復号部133に供給する。動画像伸長復号部133は、符号化データを、動画像圧縮符号化部121の圧縮符号化方法に対応する方法で伸長復号し、ベースバンドの動画像データを生成する。動画像伸長復号部133は、生成した動画像データを受信装置102より出力する(ビデオOUT)。
[動画像圧縮符号化・伸長復号の説明]
次に、動画像圧縮符号化部121と動画像伸長復号部133による動画像圧縮符号化・伸長復号の例について説明する。
図2は、動画像圧縮符号化部121の詳細な構成例を示すブロック図である。動画像圧縮符号化部121は、画像データを解像度に関して重要度の高いデータから順に階層化し、その階層毎に符号化する階層符号化を行う。例えば、動画像圧縮符号化部121は、空間解像度に関して重要度の高いデータから順に階層化された階層化データを生成する。また、例えば、動画像圧縮符号化部121は、時間方向の解像度に関して重要度の高いデータから順に階層化された階層化データを生成する。さらに、例えば、動画像圧縮符号化部121は、SNR(Signal to Noise Ratio)に関して重要度の高いデータから順に階層化された階層化データを生成する。動画像圧縮符号化部121は、このように生成した階層化データを、その階層毎に符号化する。
このような階層符号化として、例えば、動画像データの各ピクチャをウェーブレット変換し、エントロピ符号化するJPEG(Joint Photographic Experts Group)2000方式がある。階層符号化方法は任意であるが、以下においては、動画像圧縮符号化部121が、動画像データを複数ライン毎にウェーブレット変換し、エントロピ符号化する場合について説明する。
図2に示されるように、動画像圧縮符号化部121は、ウェーブレット変換部151、量子化部152、エントロピ符号化部153、およびレート制御部154を有する。ウェーブレット変換部151は、動画像の各ピクチャを、複数ライン毎にウェーブレット変換する。
ウェーブレット変換は、入力データを低域成分と高域成分に分割する分析フィルタ処理を画面水平方向および画面垂直方向の両方に対して行う処理である。つまり、ウェーブレット変換処理により入力データは、水平方向および垂直方向に低域な成分(LL成分)、水平方向に高域で垂直方向に低域な成分(HL成分)、水平方向に低域で垂直方向に高域な成分(LH成分)、および、水平方向および垂直方向に高域な成分(HH成分)の4つの成分(サブバンド)に分割される。
ウェーブレット変換部151は、このようなウェーブレット変換処理を、所定回数、分析フィルタ処理により得られる水平方向および垂直方向に低域な成分(LL成分)に対して再帰的に繰り返す。つまり、ウェーブレット変換処理により、動画像データの各ピクチャは、階層化された複数のサブバンド(周波数成分)に分割される(階層化データが生成される)。エントロピ符号化部153は、このサブバンド毎に符号化を行う。
動画像の各ピクチャの画像データは、画像の上から下に向かう順に1ラインずつウェーブレット変換部151に入力される。また各ラインの画像データは、画像左から右に向かう順に1サンプル(1コラム)ずつ入力される。
ウェーブレット変換部151は、そのように入力される画像データに対して、分析フィルタリングを実行可能なサンプル数のデータを入手する毎に(入手次第)、画像水平方向の分析フィルタリング(水平分析フィルタリング)を実行する。例えば、ウェーブレット変換部151は、図3の左に示されるベースバンドの画像データ161に対して、Mコラム入力される毎に水平分析フィルタリングを行い、1ラインずつ水平方向に低域な成分(L)と高域な成分(H)に分割する。図3の右に示される水平分析フィルタ処理結果162は、ウェーブレット変換部151により分割されたNライン分の水平方向に低域な成分(L)と高域な成分(H)を示す。
次に、ウェーブレット変換部151は、その水平分析フィルタ処理結果162の各成分に対して、垂直方向に分析フィルタリング(垂直分析フィルタリング)を行う。ウェーブレット変換部151は、水平分析フィルタリングにより、垂直分析フィルタリングに必要な垂直ライン分の係数が生成されると、その垂直分析フィルタリングに必要な垂直ライン分の係数に対して、コラム毎に垂直分析フィルタリングを行う。
その結果、水平分析フィルタ処理結果162は、図4の左に示されるように、水平方向および垂直方向の両方に低域な成分(LL成分)、水平方向に高域で垂直方向に低域な成分(HL成分)、水平方向に低域で垂直方向に高域な成分(LH成分)、および、水平方向および垂直方向の両方に高域な成分(HH成分)の4つの成分のウェーブレット変換係数(以下、係数と称する)に分割される(階層化データ163)。
所定の階層(分割レベル)の係数が得られるまで、得られた分析フィルタリングの結果のうち、HL成分、LH成分、HH成分は外部に出力される。残りのLL成分は、ウェーブレット変換部151により、再度分析フィルタリングが行われる。つまり、例えば、図4の左に示される階層化データ163は、図4の右に示される階層化データ164に変換される。階層化データ164では、LL成分から、LLLL成分、LLHL成分、LLLH成分、およびLLHH成分の4つの成分が生成されている。
ウェーブレット変換部151は、このような分析フィルタリングを所定回数再帰的に行い、動画像データを所望の分割レベルまで階層化された階層化データを生成する。図5は、分割レベル3(3階層)まで階層化された階層化データの例を示す図である。図5において、分割レベル3まで分割された階層化データ165は、分割レベル1(階層番号3)の3HL成分、3LH成分、および3HH成分、分割レベル2(階層番号2)の2HL成分、2LH成分、および2HH成分、並びに、分割レベル3(階層番号1)の1LL成分、1HL成分、1LH成分、および1HH成分の各サブバンドにより構成される。
ウェーブレット変換処理では、フィルタリング処理を繰り返す毎に(階層が1つ下位になる毎に)、生成されるライン数は2のべき乗分の1の大きさで小さくなっていく。最終分割レベル(階層番号1)の係数を1ライン生成するために必要なベースバンドのライン数は、そのフィルタリング処理を何回繰り返すか(最終分割レベルの階層数)によって決められる。通常、この階層数は予め定められる。
この、最終分割レベルの係数を1ライン生成するために必要なベースバンドの画像データ(複数ライン分の画像データ)、または、各階層の係数をまとめてラインブロック(またはプレシンクト)と称する。
図5において斜線で示される部分が1ラインブロックを構成する係数である。図5に示されるように、ラインブロックは、階層番号1の各成分の1ライン分の係数、階層番号2の各成分の2ライン分の係数、並びに、階層番号3の各成分の4ライン分の係数により構成される。なお、これらに相当する分析フィルタリング前の画像データ、すなわち、この例では8ライン分の画像データのこともラインブロック(またはプレシンクト)と称する。
次に、上述した分析フィルタリングにおける演算方法について具体的に説明する。分析フィルタリングにおける演算方法で最も一般的な演算方法は、畳み込み演算と呼ばれる方法である。この畳み込み演算は、デジタルフィルタの最も基本的な実現手段であり、フィルタのタップ係数に、実際の入力データを畳み込み乗算するものである。しかしながら、この畳み込み演算では、タップ長が長いとその分、計算負荷が増えてしまう場合もある。
これに対応する方法として、論文「W.Swelden,“The lifting scheme :A custom-design construction of Biorthogonal wavelets”, Applied and Computational Harmonic Analysis, vol3, no.2, pp.186-200, 1996」で紹介されたウェーブレット変換のリフティング技術が知られている。
図6は、JPEG2000規格でも採用されている9×7分析フィルタのリフティング構成を示している。この9×7分析フィルタに対してリフティング技術を適用したときの分析フィルタリングについて説明する。
図6の例において、1段目(最上段)は、入力画像のサンプル群(画素列)を示し、2,3段目は、それぞれステップA1およびステップA2の処理で生成される成分(係数)を示す。また、4段目は、ステップA3の処理で生成される高域成分出力を示し、5段目は、ステップA4の処理で生成される低域成分出力を示している。最上段部は、入力画像のサンプル群に限らず、前の分析フィルタリングで得られた係数であってもよい。ここでは、最上段部が入力画像のサンプル群であるものとし、四角印(■)が偶数番目のサンプルまたはライン、丸印(●)が奇数番目のサンプルまたはラインとする。
9×7分析フィルタに対してリフティング技術を適用した分析フィルタリングにおいては、ステップA3の処理で高域成分が得られ、ステップA4の処理で低域成分が得られる。なお、ステップA1乃至ステップA4の処理は、次の式(1)乃至式(4)で表される。
stepA1:di 1=di 0+α(si 0+si+1 0) ・・・(1)
stepA2:si 1=si 0+β(di−1 1+di 1) ・・・(2)
stepA3:di 2=di 1+γ(si 1+si+1 1) ・・・(3)
stepA4:si 2=si 1+δ(di−1 2+di 2) ・・・(4)
(α=-1.586134342,β=-0.05298011857,γ=0.8829110755,δ=0.4435068520)
このように、リフティング技術を適用した分析フィルタリングにおいては、ステップA1およびA2の処理が行われ、ステップA3で、高域成分の係数が生成された後に、ステップA4で、低域成分の係数が生成される。この際に用いられるフィルタバンクは、式(1)乃至式(4)に示されるように、加算とシフト演算のみで実現できる。したがって、計算量を大幅に低減することができる。そこで、次に説明するように、水平分析フィルタリングおよび垂直分析フィルタリングに、このリフティング技術を適用する。
まず、水平分析フィルタリングの処理について具体的に説明する。図7は、水平分析フィルタリングを、図6のリフティング構成により実行する場合の例を示している。
図7の例においては、入力される水平方向の係数に対して、図6で上述した4つのステップ(ステップA1乃至A4)の処理を経て、高域成分の係数(以下、高域係数とも称する)と低域成分の係数(以下、低域係数とも称する)が生成される例が示されており、リフティングのステップの方向は、図中上から下に進む。また、水平方向の係数の上に示される数字は、列(コラム)番号を示している。
さらに、上から1段目の丸および四角は、それぞれ、入力される高域係数および低域係数を表しており、2段目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、ハッチが付された丸および四角は、それぞれ、リフティング演算の結果である高域係数および低域係数を表している。
以下、動作について上から順に説明する。図7の上段には、水平方向にコラム番号4乃至6の3コラムの係数が入力されて、水平方向のリフティング構成による演算(以下、水平リフティング演算と称する)が行われる場合の例が示されている。
この水平リフティング演算のステップA3において1番目の高域係数を求め、ステップA4において1番目の低域係数を求めるためには、コラム番号0乃至4の4コラムの係数の入力が必要である。
その後、2番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号5および6の2コラムの係数が必要であり、さらに、ステップA2のP1が示される係数を算出するためには、丸数字で示されるコラム番号4の係数も必要である。
太線実線で示される3つの係数は、1番目の高域係数および低域係数を求めるための水平リフティング演算(以下、1番目の水平リフティング演算とも称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の高域係数と低域係数を求めるためには、結局、丸数字で示されるコラム番号4乃至6の3コラムの係数の入力が必要であり、さらに、1番目の水平リフティング演算の過程において生成される太線実線で示される3つの係数を、途中演算用の係数として、ラッチしておく必要がある。実際には、高々3つの係数であるので、フリップフロップ等の小容量の記憶領域を用いることで対応することができる。
したがって、1番目の水平リフティング演算においてラッチされていた太線実線で示される3つの係数と、入力されたコラム番号4乃至6の3コラムの係数が用いられて水平リフティング演算が行われることにより、その演算過程および終了時においては、2番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が生成される。これらのうち、一点鎖線で示される3つの係数は、3番目の高域係数と低域係数を求めるために必要な係数であるので、途中演算用の係数として、内蔵されるフリップフロップにラッチされる。
コラム番号6の係数の入力の後、水平方向に2コラムの係数が追加入力される場合、すなわち、水平方向にコラム番号6乃至8の3コラムの係数が入力されて、水平リフティング演算が行われる場合の例が、図7の下段に示されている。
2番目の場合と同様に、3番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号7および8の2コラムの係数が必要であり、さらに、ステップA2のP2が示される係数を算出するためには、丸数字で示されるコラム番号6の係数も必要であることがわかる。
なお、下段の太線実線で示される3つの係数は、上段の一点鎖線で示されるように、2番目の水平リフティング演算でフリップフロップにラッチされている。
したがって、2番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、入力されたコラム番号6乃至8の3コラムの係数が用いられて水平リフティング演算が行われることにより、3番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が生成される。これらのうち、一点鎖線で示される3つの係数は、4番目の高域係数と低域係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
以上のようにして、3コラム分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、水平リフティング演算が、画面の最右端のコラムまで実行されることで、水平方向の分析フィルタリングが完了される。
なお、以上においては、リフティング構成による1ライン分の水平分析フィルタリングの例を説明したが、上述した動作によって、係数のラインを上から下方向に順次入力しながら、リフティング構成により水平分析フィルタリングを行う動作を、図8を参照して説明する。なお、図8において、図6および図7と対応する係数については同様に図示されており、その詳細な説明は繰り返しになるので省略する。
図8の左側には、各入力ラインに対して、水平リフティング演算が行われる例が示されており、右側には、上から下の垂直方向に順に展開されていく各入力ラインの水平リフティング演算の結果の係数に対して、垂直リフティング演算が行われる例が概念的に示されている。
図中左から順に説明すると、先頭の入力ライン0における係数に対して、4つのステップからなる水平リフティング演算を経て1乃至11の数字が付されている低域係数および高域係数が生成されている。このうち、奇数番目の数字(1,3,5,7,9,11)が付されている係数は低域係数で、偶数番目の数字(2,4,6,8,10)が付されている係数は高域係数である。
入力ライン1しか図示されていないが、入力ライン1乃至入力ラインnに関しても同様である。すなわち、先頭の入力ライン1における係数に対して、4つのステップからなる水平リフティング演算を経て1乃至11の数字が付されている低域係数および高域係数が生成されており、このうち、奇数番目の数字(1,3,5,7,9,11)が付されている係数は低域係数で、偶数番目の数字(2,4,6,8,10)が付されている係数は高域係数である。
そして、図8の右側に示すように、入力ライン0の水平フィルタリングの結果の1乃至11が付された係数は、上から1段目に、手前から奥への水平方向に並べて展開される。入力ライン1の水平フィルタリングの結果の1乃至11が付された係数は、上から2段目に、手前から奥への水平方向に並べて展開される。入力ライン2の水平フィルタリングの結果の係数は、上から3段目に、手前から奥への水平方向に並べて展開される。
以上のように、各入力ライン0乃至入力ラインnに対しての水平フィルタリングの結果の係数が、図8の右側に示すように、上から下の垂直方向に順番に展開されていく。なお、実際には、各入力ラインの水平フィルタリングの結果の1乃至11が付された係数は、手前から奥への水平方向に低域と高域が交互に並んでいる。
そして、垂直方向の係数が所定数集まり次第、すなわち、所定ライン数集まり次第、右側のリフティングのステップの方向に示されるように、左から右へと、垂直方向のリフティング構成による演算(すなわち、垂直リフティング演算)が行われる。
次に、垂直分析フィルタリングについて具体的に説明する。図9は、垂直方向の分析フィルタリングを、図6のリフティング構成により実行する場合の例を示している。
なお、この図は、図8の右側に概念的に示した水平方向に展開されて並ぶ係数1つに着目したものであり、実際の2次元のウェーブレット変換では、ウェーブレット変換の過程で生成される周波数成分(サブバンド)の水平方向の係数の個数だけ、垂直方向の分析フィルタリングの計算が必要になることは自明である。
図9の例においては、垂直方向の係数に対して、図6で上述した4つのステップ(ステップA1乃至A4)の処理を経て、高域係数と低域係数が生成される例が示されており、リフティングのステップの方向は、図中左から右に進む。また、垂直方向の係数の左に示される数字は、ライン番号を示している。
さらに、左から1列目の丸および四角は、それぞれ、入力される高域係数および低域係数を表しており、2列目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、ハッチが付された丸および四角は、それぞれ、リフティング演算の結果である高域係数および低域係数を表している。
以下、動作について左から順に説明する。図9の左側には、垂直方向にライン番号4乃至6の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が示されている。
この垂直リフティング演算のステップA3において1番目の高域係数を求め、ステップA4において1番目の低域係数を求めるためには、ライン番号0乃至4の4ラインの係数が必要である。
その後、2番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号5および6の2ラインの係数が必要であり、さらに、ステップA2のP1が示される係数を算出するためには、丸数字で示されるライン番号4の係数も必要である。
太線実線で示される3つの係数は、1番目の高域係数および低域係数を求めるための垂直リフティング演算(以下、1番目の垂直リフティング演算と称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の高域係数と低域係数を求めるためには、結局、丸数字で示されるライン番号4乃至6の3ラインの係数の入力が必要である。さらに、1番目の垂直リフティング演算の過程において生成される太線実線で示される3つの係数が必要である。ウェーブレット変換部151は、この3つの係数を途中演算用の係数として記憶する。
したがって、1番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、対応するレベルのバッファから読み出され入力されるライン番号4乃至6の3ラインの係数が用いられて垂直リフティング演算が行われることにより、2番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が得られる。これらのうち、一点鎖線で示される3つの係数は、3番目の高域係数と低域係数を求めるために必要な係数であるので記憶される。
ライン番号6の係数の読み出しの後、2ラインの係数が追加して読み出される場合、すなわち、垂直方向にライン番号6乃至8の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が、図9の右側に示されている。
2番目の場合と同様に、3番目の高域係数と低域係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号7および8の2ラインの係数が必要であり、さらに、ステップA2のP2が示される係数を算出するためには、丸数字で示されるライン番号6の係数も必要であることがわかる。
なお、右側の太線実線で示される3つの係数は、左側の一点鎖線で示されるように、2番目の垂直リフティング演算で記憶されている。したがって、2番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、対応するレベルのバッファから読み出されて入力されるライン番号6乃至8の3ラインの係数が用いられて垂直リフティング演算が行われることにより、3番目の高域係数と低域係数を含めた4つの係数(太線点線で示される)が得られる。これらのうち、一点鎖線で示される3つの係数は、4番目の高域係数と低域係数を求めるために必要な係数であるので記憶される。
以上のようにして、3ライン分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、垂直リフティング演算が、画面の最下位のラインまで実行されることで、垂直方向の分析フィルタリングが完了される。
図2に戻り、量子化部152は、ウェーブレット変換部151により生成される各成分の係数を、例えば量子化ステップサイズで除算することにより量子化し、量子化係数を生成する。この際、量子化部152は、ラインブロック(プレシンクト)毎に量子化ステップサイズを設定することができる。このラインブロックは、ある画像領域のすべての周波数成分(図5の場合、1LL乃至3HHまでの10個の周波数成分)の係数を包含しているため、ラインブロック毎に量子化を行えば、ウェーブレット変換の特徴である多重解像度分析の利点を活かすことができる。また、全画面でラインブロック数だけを決めればよいため、量子化の負荷も小さくて済む。
さらに、画像信号のエネルギは一般的に低域成分に集中しており、また、人間の視覚上、低域成分の劣化が目立ちやすいという特性があるため、量子化に際しては、低域成分のサブバンドでの量子化ステップサイズが結果的に小さな値になるように、重み付けを行うことが有効である。この重み付けにより、低域成分には相対的に多くの情報量が割り当てられるようになり、全体の主観的な画質が向上する。
エントロピ符号化部153は、量子化部152で生成された量子化係数を情報源符号化し、圧縮された符号化コードストリームを生成する。情報源符号化としては、例えばJPEG方式やMPEG(Moving Picture Experts Group)方式で用いられているハフマン符号化や、JPEG2000方式で用いられているさらに高精度な算術符号化を用いることができる。
ここで、エントロピ符号化をどの範囲の係数に対して行うかは、圧縮効率に直接関係する非常に重要な要素になる。例えば、JPEG方式やMPEG方式では、8×8のブロックに対してDCT(Discrete Cosine Transform)変換を施し、生成された64個のDCT変換係数に対してハフマン符号化を行うことで、情報を圧縮している。すなわち、64個のDCT変換係数がエントロピ符号化の範囲になる。
ウェーブレット変換部151では、8×8ブロックに対するDCT変換とは異なり、ライン単位でウェーブレット変換を施しているため、エントロピ符号化部153では、周波数帯域(サブバンド)毎に独立に、且つ各周波数帯域内をPライン毎に情報源符号化する。
Pは1ラインが最低であるが、ライン数が少ない場合には参照情報が少なくて済み、メモリ容量を減らすことができる。逆に、ライン数が多い場合には情報量がその分増えるため、符号化効率が向上させることができる。しかしながら、Pが各周波数帯域内のラインブロックのライン数を超えた値になると、次のラインブロックのラインまで必要になる。このため、このラインブロックの量子化係数データがウェーブレット変換及び量子化によって生成されるまで待たなければならず、この時間が遅延時間となってしまう。
したがって、低遅延のためには、Pはラインブロックのライン数以下である必要がある。例えば、図5の例では、1LL,1HL,1LH,1HHの周波数帯域については、ラインブロックのライン数=1ラインであるためP=1となる。また、2HL,2LH,2HHのサブバンドについては、ラインブロックのライン数=2ラインであるためP=1または2となる。
レート制御部154は、最終的に目標のビットレート又は圧縮率に合わせるための制御を行い、レート制御後の符号化コードストリームを外部に出力する。例えば、このレート制御部154は、ビットレートを上げる場合には量子化ステップサイズを小さくし、ビットレートを下げる場合には量子化ステップサイズを大きくするように、量子化部152に対して制御信号を送信する。
次に、以上のように圧縮符号化された符号化データを伸長復号する方法について説明する。図10は、伸長復号を行う動画像伸長復号部133の構成例を示すブロック図である。図10において、動画像伸長復号部133は、エントロピ復号部171、逆量子化部172、およびウェーブレット逆変換部173を有する。
エントロピ復号部171は、入力した符号化データを情報源復号し、量子化係数データを生成する。情報源復号としては、動画像圧縮符号化部121の情報源符号化に対応して、ハフマン復号や、高効率な算術復号などを用いることができる。なお、動画像圧縮符号化部121においてPラインごとに情報源符号化されている場合、エントロピ復号部171においても同様に、各サブバンドが独立に、かつ各サブバンド内がPライン毎に情報源復号される。
逆量子化部172は、量子化係数データに量子化ステップサイズを乗算することにより逆量子化し、係数データを生成する。この量子化ステップサイズは、通常、符号化コードストリームのヘッダなどに記述されている。なお、動画像圧縮符号化部121において、ラインブロック毎に量子化ステップサイズが設定されている場合には、逆量子化部172においても同様に、ラインブロック毎に逆量子化ステップサイズが設定されて、逆量子化される。
ウェーブレット逆変換部173は、ウェーブレット変換部151の逆処理を行う。つまり、ウェーブレット逆変換部173は、ウェーブレット変換部151により複数の周波数帯域に分割された係数データに対して、低域成分と高域成分を合成するフィルタ処理(合成フィルタ処理)を水平方向と垂直方向の両方に対して行う。
上述したリフティング技術を適用したときの分析フィルタリングに対応して、効率的にフィルタリングを実行することができることから、ウェーブレット逆変換の合成フィルタリングにおいても、同様にリフティング技術を用いることが好ましい。
図11は、JPEG2000規格でも採用されている9×7分析フィルタのリフティング構成を示している。この9×7分析フィルタに対してリフティング技術を適用したときの合成フィルタリングについて説明する。
図11の例において、1段目(最上段)は、ウェーブレット変換により生成された係数であり、丸印(●)が高域成分の係数を示し、四角印(■)が低域成分の係数を示す。2,3段目は、それぞれステップB1およびステップB2の処理で生成される成分(係数)を示す。また、4段目は、ステップB3の処理で生成される偶数成分出力を示し、5段目は、ステップB4の処理で生成される奇数成分出力を示している。
9×7分析フィルタに対してリフティング技術を適用した合成フィルタリングにおいては、ステップB3の処理で偶数成分が得られ、ステップB4の処理で奇数成分が得られる。なお、ステップB1乃至ステップB4の処理は、次の式(5)乃至式(8)で表される。
stepB1:si 1=si 2−δ(di−1 2+di 2) ・・・(5)
stepB2:di 1=di 3−γ(si 1+si+1 1) ・・・(6)
stepB3:si 0=si 1−β(di−1 1+di 1) ・・・(7)
stepB4:di 0=di 1−α(si 0+si+1 0) ・・・(8)
(α=-1.586134342,β=-0.05298011857,γ=0.8829110755,δ=0.4435068520)
このように、リフティング技術を適用した合成フィルタリングにおいては、ステップB1およびB2の処理が行われ、ステップB3で、偶数成分の係数が生成された後に、ステップB4で、奇数成分の係数が生成される。この際に用いられるフィルタバンクは、式(5)乃至式(8)に示されるように、除算とシフト演算のみで実現できる。したがって、計算量を大幅に低減することができる。
そこで、次に説明するように、ウェーブレット逆変換部173においても、画像垂直方向に合成フィルタリングする垂直合成フィルタリングと、画像水平方向に合成フィルタリングする水平合成フィルタリングとに、このリフティング技術を適用する。なお、用いる式が異なるだけであり、垂直合成フィルタリングは、図6を参照して上述した垂直分析フィルタリングと基本的に同様な動作を行い、水平合成フィルタリングは、図7を参照して上述した水平分析フィルタリングと基本的に同様な動作を行う。
まず、垂直合成フィルタリングの処理について具体的に説明する。図12は、垂直方向の係数群に対しての垂直合成フィルタリングを、図11のリフティング構成により実行する場合の例を示している。
図12の例においては、垂直方向の係数に対して、図11で上述した4つのステップ(ステップB1乃至B4)の処理を経て、偶数番目の係数(以下、偶数係数とも称する)と奇数番目の係数(以下、奇数係数とも称する)が生成される例が示されており、リフティングのステップの方向は、図中左から右に進む。
また、垂直方向の係数の左側に示される数字は、ライン番号を示しており、左から1列目のハッチが付された丸および四角は、それぞれ、高域入力および低域入力を表している。さらに、2列目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、黒丸および黒四角は、それぞれ、リフティング演算の結果である奇数係数および偶数係数を表している。
以下、動作について左から順に説明する。図12の左側には、垂直方向にライン番号4乃至6の3ラインの係数が入力されて、垂直方向のリフティング構成による演算(すなわち、垂直リフティング演算)が行われる場合の例が示されている。なお、いまの場合、最上段の偶数係数は、奇数係数と組みになっていないのでその説明を省略する。
この垂直リフティング演算のステップB3において1番目の偶数係数を求め、ステップB4において1番目の奇数係数を求めるためには、ライン番号0乃至5の6ラインの係数が必要である。
その後、2番目の偶数係数と奇数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号6および7の2ラインの係数が必要であり、さらに、ステップB2のQ1が示される係数を算出するためには、丸数字で示されるライン番号5の係数も必要である。
太線実線で示される3つの係数は、1番目の偶数係数および奇数係数を求めるための垂直リフティング演算(以下、1番目の垂直リフティング演算と称する)の過程で生成される係数のうちの一部である。
したがって、2番目の偶数係数と奇数係数を求めるためには、結局、丸数字で示されるライン番号5乃至7の3ラインの係数の入力が必要であり、さらに、1番目の偶数係数と奇数係数を求めるための垂直リフティング演算の過程において生成される太線実線で示される3つの係数を記憶しておく必要がある。なお、このとき、垂直方向の3ラインの係数は、レベル毎に読み出される。
したがって、1番目の垂直リフティング演算でバッファに記憶されていた太線実線で示される3つの係数と、入力されるライン番号5乃至7の3ラインの係数が用いられて垂直リフティング演算が行われることにより、2番目の偶数係数と奇数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、3番目の偶数係数と奇数係数を求めるために必要な係数であるので記憶される。
ライン番号7の係数の読み出しの後、2ラインの係数が追加して読み出される場合、すなわち、垂直方向にライン番号7乃至9の3ラインの係数が入力されて、垂直リフティング演算が行われる場合の例が、図12の右側に示されている。
2番目の場合と同様に、3番目の偶数係数と奇数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるライン番号8および9の2ラインの係数が必要であり、さらに、ステップB2のQ2が示される係数を算出するためには、丸数字で示されるライン番号7の係数も必要である。
なお、右側の太線実線で示される3つの係数は、左側の一点鎖線で示されるように、2番目の垂直リフティング演算で係数バッファに記憶されている。
したがって、2番目の垂直リフティング演算で記憶されていた太線実線で示される3つの係数と、入力されるライン番号7乃至9の3ラインの係数が用いられて垂直リフティング演算が行われることにより、3番目の偶数係数と奇数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、4番目の偶数係数と奇数係数を求めるために必要な係数であるので記憶される。
以上のようにして、3ライン分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、垂直リフティング演算が、画面の最下位のラインまで実行されることで、垂直方向の合成フィルタリングが完了される。
次に、水平合成フィルタリングについて具体的に説明する。図13は、垂直方向の合成フィルタリングの結果を水平方向に並べて、水平合成フィルタリングを、図11のリフティング構成により実行する場合の例を示している。
図13の例においては、水平方向の係数に対して、図11で上述した4つのステップ(ステップB1乃至B4)の処理を経て、奇数係数と偶数係数が生成される例が示されており、リフティングのステップの方向は、図中上から下に進む。
また、水平方向の係数の上に示される数字は、列(コラム)番号を示しており、上から1段目のハッチが付された丸および四角は、それぞれ、高域入力および低域入力を表しており、2段目以降の丸および四角は、それぞれ、リフティング演算の過程で生成される高域係数および低域係数を表しており、その中でも、黒丸および黒四角は、それぞれ、リフティング演算の結果である奇数係数および偶数係数を表している。
以下、動作について上から順に説明する。図13の上段には、水平方向にコラム番号5乃至7の3コラムの係数が入力されて水平方向のリフティング構成による演算(以下、水平リフティング演算と称する)が行われる場合の例が示されている。なお、いまの場合、最左側の偶数係数は奇数係数と組みになっていないのでその説明を省略する。
この水平リフティング演算のステップB3において1番目の偶数係数を求め、ステップB4において1番目の奇数係数を求めるためには、コラム番号0乃至5の6コラムの係数が必要である。
その後、2番目の奇数係数と偶数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号6および7の2コラムの係数が必要であり、さらに、ステップB2のQ1が示される係数を算出するためには、丸数字で示されるコラム番号5の係数も必要である。
太線実線で示される3つの係数は、1番目の奇数係数および偶数係数を求めるための水平リフティング演算(以下、1番目の水平リフティング演算とも称する)の過程で生成される係数のうちの一部である。
すなわち、2番目の奇数係数と偶数係数を求めるためには、結局、丸数字で示されるコラム番号5乃至7の3コラムの係数の入力が必要であり、さらに、1番目の水平リフティング演算の過程において生成される太線実線で示される3つの係数を、ラッチしておく必要がある。実際には、高々3つの係数であるので、フリップフロップのような小容量の記憶領域を用いることで対応することができる。
したがって、1番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、入力されたコラム番号5乃至7の3コラムの係数が用いられて水平リフティング演算が行われることにより、その演算過程および終了時においては、2番目の奇数係数と偶数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、3番目の奇数係数と偶数係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
コラム番号7の係数の入力の後、水平方向に2コラムの係数が追加入力される場合、すなわち、水平方向にコラム番号7乃至9の3コラムの係数が入力されて、水平リフティング演算が行われる場合の例が、図13の下段に示されている。
2番目の場合と同様に、3番目の奇数係数と偶数係数を求めるためには、太線実線で示される3つの係数と、丸数字で示されるコラム番号8および9の2コラムの係数が必要であり、さらに、ステップB2のQ2が示される係数を算出するためには、丸数字で示されるコラム番号7の係数も必要である。
なお、下段の太線実線で示される3つの係数は、上段の一点鎖線で示されるように、2番目の水平リフティング演算でラッチされている。
したがって、2番目の水平リフティング演算でラッチされていた太線実線で示される3つの係数と、新たに入力されるコラム番号7乃至9の3コラムの係数が用いられて水平リフティング演算が行われることにより、3番目の奇数係数と偶数係数を含めた4つの係数(太線点線で示される)が得られる。このうち、一点鎖線で示される3つの係数は、4番目の奇数係数と偶数係数を求めるために必要な係数であるので、内蔵されるフリップフロップにラッチされる。
以上のようにして、3コラム分の係数を順次入力しながら、途中演算用の3つの係数を保持しながら、水平リフティング演算が、画面の最右端のコラムまで実行されることで、水平方向の合成フィルタリングが完了される。
以上のように、垂直合成フィルタリングおよび水平合成フィルタリングにおいても、9×7ウェーブレット変換フィルタのリフティング構成が用いられることで、図10を参照して上述したように、対応する分割レベルのバッファには、3ライン分の係数を記憶する各ラインの係数用のバッファが必要となり、さらに、図12のQ1およびQ2の係数を求めるため、垂直リフティング演算の際、すでに使用したラインの係数も、次の垂直リフティング演算に必要になる。
したがって、対応するレベルのバッファの内部では、1つのラインのバッファに記憶されている係数を、隣接するラインのバッファに、次々と転送していく構成となる。
以上のように動画像データは、送信装置101において圧縮符号化され、符号化データとして送受信され、受信装置102において伸長復号される。
図14は、その圧縮符号化と伸長復号の各処理を模式的に示すものである。図14に示される圧縮符号化処理181が送信装置101において実行され、伸長復号処理182が受信装置102において実行される。
図14に示されるように、圧縮符号化処理181においては、1ピクチャ分の非圧縮の画像データは、複数ライン(ラインブロック)毎にウェーブレット変換され、階層化された複数のサブバンドに分割される。図14の非圧縮データブロック1乃至非圧縮データブロックNは、それぞれ、所定数のライン(例えばラインブロック)の画像データである。
図14のL(i,n)は、各階層のサブバンドの所定のライン数の圧縮符号化データを示す。ここで、iは、階層番号を示す。また、nは、各階層の圧縮符号化データLの番号を示す。図14の例の場合、i=1,2,3、n=1,2,・・・,Nである。
階層番号1の圧縮符号化データL(1,n)は、最下位層のLL成分、HL成分、LH成分、およびHH成分の4つの成分が符号化されたものであり、階層番号2以上の階層の圧縮符号化データL(i,n)(i≧2)は、その階層のHL成分、LH成分、HH成分の3つの成分が符号化されたものである。
上述したように、分析フィルタリングは、リフティング演算を用いて行われる。したがって、圧縮符号化データL(i,n)は、それより上位(図中左側)の階層の複数のブロック(n以外のブロック)のデータに依存する。図14の非圧縮データブロックnや圧縮符号化データL(i,n)の間の矢印は、この依存関係を示す。
例えば、階層番号1の圧縮符号化データL(1,1)は、階層番号2の圧縮符号化データL(2,1)、L(2,2)、およびL(2,3)、階層番号3の圧縮符号化データL(3,1)、L(3,2)、L(3,3)、およびL(3,4)、並びに、非圧縮データの非圧縮データブロック1、非圧縮データブロック2、非圧縮データブロック3、非圧縮データブロック4、および非圧縮データブロック5に依存する。また、例えば、階層番号2の圧縮符号化データL(2,3)は、階層番号3の圧縮符号化データL(3,2)およびL(3,3)、並びに、非圧縮データの非圧縮データブロック1乃至非圧縮データブロック3に依存する。
このように、1つのブロックの圧縮データを生成するのに、複数のブロックのデータが必要になる。伸長復号処理182は、図14に示されるように、圧縮符号化処理181と対称な処理により実現される。したがって、依存性の関係も符号化処理の場合と同様に存在する。
例えば、非圧縮データブロック1乃至非圧縮データブロック5は、いずれも、階層番号1の圧縮符号化データL(1,1)のデータを用いて生成される。つまり、非圧縮データブロック1乃至非圧縮データブロック5は、いずれも、階層番号1の圧縮符号化データL(1,1)に依存する。
したがって、仮に、階層番号1の圧縮符号化データL(1,1)のデータに復元不可能な損失(エラー)が発生すると、このようなブロック間の依存性により、そのエラーが後続のブロックに伝搬し、非圧縮データブロック1乃至非圧縮データブロック5に広がってしまった。
仮に、損失部分を補完データで隠ぺいするようにしても、その隠ぺいに使用された補完データは、一般的に失った本来のデータとは異なるものであるので、画質劣化が生じることになる。つまり、この場合も上述したようなエラー伝搬が発生する。
このように画質劣化の範囲が広がると、視覚的に劣化が目立つようになる。つまり、実質的に画質劣化が大きくなってしまう。
しかしながら、エラーの発生を抑制する、すなわち、損失したパケットの復元能力を向上させるためには、FEC(Forward Error Correction)ブロックサイズを大きくする必要がある。ただし、FECブロックを大きくすると遅延時間も増大してしまう。ネットワークシステム100は、上述したように低遅延に画像データを伝送させることが要求されるシステムであり、許容される遅延時間は大きくない。そのため、単純にFECブロックサイズを大きくすることで損失パケットの復元性能を向上させることは困難であった。
[システム全体の処理の説明]
そこで、ネットワークシステム100は、図15に示されるように、発生したエラーが他のブロックに伝搬することを抑制するためにFECを利用する。
例えば、ビデオカメラ等を経由しビデオ入力インタフェースより送信装置101に入力されたビデオデータ(ビデオIN)は、動画像圧縮符号化部121により、上述したように階層圧縮符号化される。ビデオデータの各ピクチャは、矢印191に示されるようにリフティングによりウェーブレット変換され、圧縮符号化データに変換される。
圧縮符号化データは、所定数毎に、冗長符号化部122によってFEC(Forward Error Correction)符号化される。冗長符号化部122は、矢印192に示されるように、圧縮符号化データを、例えば、依存関係に応じてFECブロック化する。
図15の例の場合、階層番号1のある圧縮符号化データL(例えばL(1,1))が依存する圧縮符号化データLが全て含まれるように、9個の圧縮符号化データL毎に(3ブロック毎に)FECブロック化が行われている。
冗長符号化部122は、このようなFECブロックを分割してRTPパケット化(元データRTPパケット)し、冗長データ(冗長データRTPパケット)を生成する。
RTP送信部123は、各RTPパケットを、矢印194に示されるように、ネットワーク110を介して受信装置102に送信する。受信装置102のRTP受信部131は、そのRTPパケットを受信する。
冗長復号部132は、受信したRTPパケットに対して、矢印195に示されるように、FEC復号処理を行い、さらにデパケタイズし、各ブロックの各階層の符号化データを抽出する。
この冗長復号部132によりFEC復号されて得られたデータは、主にエラー伝搬対策として利用される。つまり、後段のブロックの復号処理に利用する。
つまり、矢印196に示されるように、FEC復号された各ブロックの各階層の符号化データは、矢印197に示されるように伸長復号され、ウェーブレット逆変換される。冗長復号部132により復元された損失データは、このウェーブレット逆変換処理において、他のブロックの合成処理に利用される。
ウェーブレット逆変換において、FEC復号により復元された元のデータを用いることにより、後段のブロックは、エラーを含まないように復号することができる。すなわち、損失エラーが他のブロックに伝搬することを抑制することができる。つまり、エラーの影響範囲を小規模に留めることができるので、ユーザが体感する視覚的な画質劣化を抑制することができる。
例えば、圧縮符号化データL(例えばL(1,1))において損失が発生した場合、上述したように、そのエラーの影響が非圧縮データブロック1乃至非圧縮データブロック5に広がる恐れがあるが、上述したようなエラー伝搬の抑制により、エラーの影響を非圧縮データブロック1に抑えることができる。
なお、FEC復号結果を損失パケットの回復に利用することもできるが、その場合、上述したように遅延時間の制限から復元性能を向上させることが困難である。復元に失敗すると、上述したようにエラー伝搬によりその影響範囲が拡大してしまう。
そこで、上述したように、FEC復号結果をエラー伝搬対策に利用する。この場合、FEC復号結果の利用タイミングが次以降のブロックの復号処理まで遅れるので、その分、FECブロックを大きくすることができ、容易に復元性能を向上させることができる。
ネットワークシステム100においては、より低遅延にデータを伝送させることが求められるので、各ブロックのライン数は少なく、1ブロックにおいてエラーが発生しても、その視覚的影響は限りなく小さい。つまり、受信装置102は、上述したようにエラー伝搬を抑制することにより、十分に画質劣化を抑制することができる。
なお、以上においては、圧縮符号化方法として、ウェーブレット変換を用いる方法を説明したが、符号化データを複数の解像度で復号可能な符号化方法(スケーラブルコーデック)であり、符号化(階層化)処理単位の符号化データを生成するために元画像の他の部分のデータが必要な(符号化(階層化)処理単位間で依存性のある)方法であれば、どのような方法を適用するようにしてもよい。例えば、ITU-T(International Telecommunication Union Telecommunication Standardization Sector)H.264/SVC(Scalable Video Codec)等であってもよい。
[冗長符号化部の構成例]
次に各処理部の詳細について説明する。図16は、送信装置101の冗長符号化部122の主な構成例を示すブロック図である。図16に示されるように冗長符号化部122は、FECブロック化部221およびFEC符号化部222を有し、所定のデータ単位毎に、符号化データをFECブロック化部221によりFECブロック化し、各FECブロックをFEC符号化部222によりFEC符号化する。
[冗長復号部の構成例]
図17は、受信装置102の冗長復号部132の主な構成例を示すブロック図である。
図17に示されるように、冗長復号部132は、制御部231、取得部232、保持部233、供給部234、隠ぺい部235、FEC復号部236、および伝搬対策部237を有する。
制御部231は、取得部232乃至伝搬対策部237を制御する。図17においては、制御部231に関する矢印は省略しているが、実際には、制御部231は、各部に制御命令やデータ等を供給したり、適宜、各部から情報を収集したりする。
取得部232は、RTP受信部131により受信されるデータを取得する。保持部233は、例えば半導体メモリ等の記憶媒体を有し、取得部232から供給されるデータを保持する。供給部234は、取得部232により取得されたデータを受信データとして動画像伸長復号部133のエントロピ復号部171に供給する。隠ぺい部235は、損失したデータの代わりに、隠ぺい用の所定のデータを、動画像伸長復号部133のエントロピ復号部171に供給する。
FEC復号部236は、取得部232から供給されたデータや保持部233から読みだしたデータをFEC復号し、損失したデータを復元する。伝搬対策部237は、FEC復号部236により復元されたデータを、エラー伝搬対策用のデータとして、ウェーブレット逆変換部173に供給する。
また、制御部231は、各種制御処理を実行する。制御部231は、機能ブロックとして例えば損失判定部241、FECブロック判定部242、結果判定部243、および終了判定部244を有する。これらの機能ブロックは、制御部231がプログラムを実行したりデータを処理したりして実現する機能を示している。各処理の詳細については後述する。
[伝搬対策部の構成例]
図18は、伝搬対策部237の主な構成例を示すブロック図である。
図18に示されるように伝搬対策部237は、エントロピ復号部251、逆量子化部252、およびウェーブレット係数更新部253を有する。エントロピ復号部251および逆量子化部252は、図10のエントロピ復号部171および逆量子化部172と同様である。つまり、伝搬対策部237は、動画像伸長復号部133と同様に、FEC復号されて得られた符号化データからウェーブレット係数を生成する。
ウェーブレット係数更新部253は、逆量子化部252から供給されるウェーブレット係数を、動画像伸長復号部133のウェーブレット逆変換部173(図10)に供給し、ウェーブレット逆変換部173が後段のブロックのリフティング演算のために保持している当該ブロックのウェーブレット係数と置き換える(更新する)。
[冗長符号化処理の流れ]
次に、以上のような各処理部により実行される処理の流れの例を説明する。最初に、図19のフローチャートを参照して、送信装置101の冗長符号化部122により実行される冗長符号化処理の流れの例を説明する。
冗長符号化処理を開始すると冗長符号化部122のFECブロック化部221は、ステップS121において、動画像圧縮符号化部121から供給される符号化データを取得する。
ステップS122において、冗長符号化部122は、FECブロック化部221がFECを行うデータ単位である所定のデータ量分の符号化データを取得したか否かを判定する。取得していないと判定された場合、冗長符号化部122は、ステップS121に処理を戻す。つまり、FECブロック化部221は、所定のデータ量分の符号化データを取得するまで繰り返し実行する。
以上の処理により所定のデータ量分の符号化データが取得されると、冗長符号化部122は、処理をステップS123に進める。FECブロック化部221は、ステップS123において、取得された符号化のデータの中から所定のデータ量分の符号化データを抽出し、FECブロック化し、それをFEC符号化部222に供給する。
FEC符号化部222は、ステップS124においてFECブロック毎にFEC符号化を行い、生成したFEC符号化データを、ステップS125において、RTP送信部123に転送する。
ステップS126において、冗長符号化部122は、冗長符号化処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS121に戻し、それ以降の処理を繰り返す。
また、ステップS126において、冗長符号化処理を終了すると判定された場合、冗長符号化部122は、冗長符号化処理を終了する。
以上のように、符号化データは、所定のデータ量毎にFECブロック化され、そのFECブロック毎にFEC符号化され、冗長データが生成される。この冗長データと元の符号化データとを合わせてFEC符号化データと称する。冗長符号化部122は、FEC符号化データ(冗長データおよび元の符号化データ)をRTP送信部123に供給する。つまり、送信装置101は、受信装置102に、FEC符号化データを送信する。
[冗長復号処理の流れ]
次に、図20のフローチャートを参照して、受信装置102の冗長復号部132により実行される冗長復号処理の流れの例を説明する。
冗長復号処理が開始されると、冗長復号部132の取得部232は、ステップS141において、RTP受信部131から、送信装置101から送信されてきたFEC符号化データを取得し、符号化データを抽出する。
ステップS142において、損失判定部241は、取得したFEC符号化データに含まれるパケットを検査し、符号化データに損失が発生したか否かを判定する。損失が発生したと判定された場合、損失判定部241は、処理をステップS143に進める。
ステップS143において、取得部232は、符号化データを隠ぺい部235に供給する。隠ぺい部235は、所謂、エラーコンシールメント処理を行う。つまり、隠ぺい部235は、例えば、損失した符号化データの代わりに、所定のダミーデータを動画像伸長復号部133のエントロピ復号部171を供給する。このダミーデータへの置き換えのデータ単位は、任意であり、例えば、FECブロック単位であっても良い。つまり、隠ぺい部235が、損失した符号化データを含むFECブロックの代わりにダミーデータを供給するようにしてもよいし、符号化データの損失した部分のみをダミーデータに置き換え、それを供給するようにしてもよい。ステップS143の処理が終了すると、隠ぺい部235は、処理をステップS145に進める。
また、ステップS142において、取得したFEC符号化データに含まれる符号化データに損失が発生していないと判定された場合、損失判定部241は、処理をステップS144に進める。
ステップS144において、取得部232は、符号化データを供給部234に供給する。供給部234は、その符号化データを動画像伸長復号部133のエントロピ復号部171を供給する。ステップS144の処理が終了すると、供給部234は、処理をステップS145に進める。
ステップS145において、取得部232は、符号化データを保持部233に供給する。保持部233は、供給された符号化データを保持する。
ステップS146において、制御部231のFECブロック判定部242は、取得部232によりFECブロックが取得されたか否かを判定する。FECブロック分のデータが取得されたと判定された場合、FECブロック判定部242は、処理をステップS147に進める。
ステップS147において、取得部232は、取得したFECブロック分のFEC符号化データをFEC復号部236に供給する。FEC復号部236は、供給されたFECブロックをFEC復号する。
ステップS148において、制御部231の結果判定部243は、FEC復号が成功したか否かを判定する。成功したと判定された場合、結果判定部243は、処理をステップS149に進める。また、FEC復号部236は、FEC復号結果(符号化データ)を伝搬対策部237に供給する。
なお、実際には、符号化データに損失が無い場合、FEC復号する必要はない。その場合、FEC復号部236は、供給された符号化データをFEC復号結果として出力する。
ステップS149において、伝搬対策部237は、符号化データを動画像伸長復号部133のウェーブレット逆変換部173供給し、損失の影響を他のブロックに伝搬させないようにするエラー伝搬対策処理を行う。エラー伝搬対策処理の詳細については後述する。
エラー伝搬対策処理が終了すると、伝搬対策部237は、処理をステップS150に進める。また、ステップS146において、FECブロックが取得されていないと判定された場合、FECブロック判定部242は、処理をステップS150に進める。さらに、ステップS148において、FEC復号が成功しなかったと判定された場合、結果判定部243は、処理をステップS150に進める。
なお、符号化データに損失が無い場合、そのブロックでエラーが発生しないので、エラー伝搬を抑制させる必要はない。したがって、この場合、伝搬対策部237がエラー伝搬対策処理を行うようにしてもよいし、省略するようにしてもよい。
ステップS150において、制御部231の終了判定部244は、冗長復号処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS141に戻し、それ以降の処理を繰り返す。また、ステップS150において、冗長復号処理を終了すると判定された場合、終了判定部244は、冗長復号処理を終了する。
[エラー伝搬対策処理の流れ]
次に、図21のフローチャートを参照して、図20のステップS149において実行されるエラー伝搬対策処理の流れの例を説明する。
エラー伝搬対策処理が開始されると、伝搬対策部237は、ステップS171において、エントロピ復号部171と同様に、符号化データをエントロピ復号し、ステップS172において、逆量子化部172と同様に、その復号結果に対して逆量子化を行う。
ステップS173において、伝搬対策部237は、逆量子化されたウェーブレット係数を、ウェーブレット逆変換部173に供給し、ウェーブレット逆変換部173が次のブロックのウェーブレット逆変換の為に保持しているウェーブレット係数を更新する。
伝搬対策部237に供給される符号化データは損失が無い。したがって、伝搬対策部237からウェーブレット逆変換部173に供給されるウェーブレット係数は、損失の影響を受けていない。
ウェーブレット逆変換部173は、このウェーブレット係数を用いて次のブロックのウェーブレット逆変換を行うことにより、エラーを後のブロックに伝搬させることを抑制することができる。これにより、動画像伸長復号部133は、復号画像の、データ損失が影響を与える範囲の拡大を抑制することができる。
以上のように、冗長復号部132は、データ損失による復号画像の視覚的な画質劣化を抑制することができる。特に、上述したような低遅延な画像伝送を行うシステムの場合、符号化単位が小さいので、損失発生箇所の復元を行わなくても、そのデータ損失が復号画像に与える視覚的影響は極めて小さい。
逆に、より低遅延なデータ伝送を実現しようとすると、他のブロックへの依存度は高まるので、データ損失が復号画像に与える視覚的影響の低減のために、上述したようなエラー伝搬の抑制がより重要になる。
したがって、より低遅延に画像データを伝送させるシステムほど、上述したようにエラー伝搬を抑制することによる視覚的影響の低減効果は大きくなる。
なお、上述したようにFEC復号結果をエラー伝搬の抑制に利用することにより、FEC復号結果の利用タイミングが、次のブロックの処理実行タイミングまで時間的に後になる。つまりFEC処理の許容時間が長くなるので、その分FECブロックを大きくすることができる。したがって、FEC処理の回復性能が向上するので、冗長復号部132は、データ損失による復号画像への視覚的影響をより確実に低減させることができる。
<2.第2の実施の形態>
[冗長復号部の構成]
なお、従来のように損失したデータを回復する方法と、第1の実施の形態で説明したエラー伝搬を抑制する方法とを併用するようにしてもよい。例えば、受信装置102において同期再生を行うようにし、FEC復号処理が同期信号における復号開始時刻に間に合う場合、そのFEC復号処理をデータ回復用の処理として行い、回復された符号化データをそのブロックの復号処理に用いるようにし、FEC復号処理が同期信号における復号開始時刻に間に合わない場合、そのFEC復号処理を上述したようにエラー伝搬対策として行い、回復された符号化データを次のブロックの復号処理に用いるようにしてもよい。
図22は、その場合の冗長復号部132の主な構成例を示すブロック図である。
この場合も、冗長復号部132は、基本的に図17の場合と同様の構成を有するが、同期再生を行うために、各部に同期信号を提供する同期部271と、データの出力タイミングを揃えるためのバッファ272をさらに有する。
矢印は省略するが、同期部271は、各部に同期信号を提供する。各部は、その同期信号を用いて動作のタイミングを調整する。
また、この場合、取得部で取得されたFEC符号化データは、保持部233で保持された後、FEC復号部236に供給される。FEC復号部236は、必要に応じてFEC復号を行い、得られた符号化データをバッファ272に供給し、保持させる。
供給部234および隠ぺい部235は、バッファ272に蓄積された符号化データを、所定の同期時刻に読み出し、エントロピ復号部171に供給する。このようにバッファ272を用いて、符号化データの出力タイミングが調整される(出力タイミングの同期が取られる)。
FEC復号部236は、符号化データの回復が、その出力タイミングに間に合う場合、その回復された符号化データを、損失しなかった符号化データと同様に復号させる。
また、その出力タイミングに間に合わないFEC復号結果は、伝搬対策部237により、ウェーブレット逆変換部173に供給され、第1の実施の形態と同様に、エラー伝搬対策の用途に利用される。
制御部231は、損失判定部241および結果判定部243の代わりに、同期判定部281および読み出し処理部282を有する。同期判定部281は、FEC復号結果取得が、バッファ272からの符号化データ出力タイミング(所定の同期時刻)に間に合ったか否かを判定する。
読み出し処理部282は、バッファ272に蓄積されている符号化データを、同期信号に応じた所定のタイミングで読み出し、エントロピ復号部171に供給する処理(同期再生)を行う。
RTPパケットのタイムスタンプ値は、例えば、送信装置101において圧縮符号化データブロック毎に参照した非圧縮データブロックの入力時刻を反映した値が設定される。読み出し処理部282は、例えば、ストリームの最初のパケットをタイミング規定パケットとし、その到着時刻から、「初期バッファ遅延時間」遅れた時刻を最初のパケットに付加されたタイムスタンプ値に対するデコード再生予定時刻とし、以降のパケットに関しては付加されたタイムスタンプに同期した時刻をデコード再生予定時刻として処理を行う。
「初期バッファ遅延時間」は、受信後デコード処理を行うまで行う処理にかかる処理遅延、最大処理遅延ジッタ値、および最大ネットワークジッタ値等を用いた、例えば、以下の式(9)のように求められる。
初期バッファ遅延時間=非圧縮データブロック入力間隔×buf_param
+FEC復号処理時間+ジッタ許容時間 ・・・(9)
式(9)において、「非圧縮データブロック入力間隔」は、非圧縮データブロックが送信装置101においてビデオデータ(ビデオIN)より入力される間隔である。また、「buf_param」は、受信装置102がバッファする非圧縮データブロック数の想定数である。「FEC復号処理時間」は、FEC復号処理の処理時間を示す。「ジッタ許容時間」は、許容される遅延時間の変動幅を示す。
なお、FEC復号部236は、損失がある場合のみ、FEC復号を行い、その損失したデータを回復するものとする。また、FEC復号に失敗した場合、伝搬対策部237は、ウェーブレット逆変換部173のウェーブレット係数を更新してもエラー伝搬を抑制することができないので、エラー伝搬対策処理を省略するようにしてもよい。
[冗長復号処理の流れ]
この場合の冗長復号処理の流れの例を図23のフローチャートを参照して説明する。
図23に示されるように、ステップS201において、取得部232がRTP受信部131からFEC符号化データを取得すると、ステップS202において、保持部233がそのFEC符号化データを保持する。
ステップS203において、FECブロック判定部242が、FECブロック1つ分以上のFEC符号化データが保持部233に保持されたか否かを判定し、保持されたと判定した場合、処理をステップS204に進める。
FEC符号化データがFECブロック分蓄積されると、FEC復号部236は、ステップS204において、そのFEC符号化データを読み出し、符号化データの損失がある場合、FEC復号する。
ステップS205において、同期判定部281は、同期時刻(バッファ272からの符号化データ出力タイミング)前であるか否かを判定する。つまり、同期判定部281は、FEC復号処理がバッファ272からの出力タイミングに間に合ったか否かを判定する。同期時刻前であると判定したばあい、同期判定部281は、処理をステップS206に進める。
同期時刻前にFEC復号結果が得られた場合、その符号化データは、そのブロックの復号処理に使用される。つまり、FEC復号により回復された符号化データも、損失が発生していない符号化データと同様に伸長復号される。ステップS206において、FEC復号部236は、FEC復号結果としての符号化データをバッファ272に格納する。ステップS206の処理が終了すると、FEC復号部236は、処理をステップS208に進める。
また、ステップS205において、FEC復号処理が、同期時刻後である(間に合わなかった)と判定された場合、同期判定部281は、処理をステップS207に進める。FEC復号部236は、FEC復号結果としての符号化データを、伝搬対策部237に供給する。ステップS207において、伝搬対策部237は、図21のフローチャートを参照して説明したようにエラー伝搬対策処理を行う。エラー伝搬対策処理が終了すると、伝搬対策部237は、処理をステップS208に進める。
また、ステップS203において、保持部233に1FECブロック分のFEC符号化データが蓄積されていないと判定された場合、FECブロック判定部242は、処理をステップS208に進める。
ステップS208において、制御部231の終了判定部244は、冗長復号処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS201に戻し、それ以降の処理を繰り返す。また、ステップS208において、冗長復号処理を終了すると判定された場合、終了判定部244は、冗長復号処理を終了する。
[同期再生処理の流れ]
次に、図24のフローチャートを参照して、同期再生処理の流れの例を説明する。制御部231の読み出し処理部282は、バッファ272に蓄積された符号化データを、同期部271が管理する同期信号を基準にして、所定のタイミングで読み出す。このように出力タイミングを制御することにより、動画像伸長復号部133は、伸長復号処理を所定の間隔で行うことができ、復号画像を所定の時間間隔で出力することができる。つまり、同期再生が可能になる。
読み出し処理部282は、ステップS221において、同期信号に従った所定のタイミング(同期時刻)であるか否かを判定し、同期時刻であると判定した場合、ステップS222に処理を進める。
ステップS222において、読み出し処理部282は、符号化データに損失が発生したか否かを判定する。バッファ272に蓄積されている符号化データに損失が発生している(FEC復号部236において回復していない)と判定された場合、読み出し処理部282は、処理をステップS223に進める。
ステップS223において、隠ぺい部235は、バッファ272に蓄積されている符号化データを破棄し、その符号化データの代わりのダミーデータを生成し、エントロピ復号部171に供給する。ダミーデータを供給すると、隠ぺい部235は、処理をステップS225に進める。
また、ステップS222において、符号化データに損失が発生していないと判定された場合、読み出し処理部282は、処理をステップS224に進める。ステップS224において、供給部234は、バッファ272に蓄積されている符号化データを読み出し、エントロピ復号部171に供給する。符号化データを供給すると、供給部234は、処理をステップS225に進める。
さらに、ステップS221において、同期時刻で無いと判定された場合、読み出し処理部282は、処理をステップS225に進める。
ステップS225において、読み出し処理部282は、同期再生処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS221に戻し、それ以降の処理を繰り返す。また、ステップS225において、同期再生処理を終了すると判定された場合、読み出し処理部282は、同期再生処理を終了する。
以上のように冗長復号処理や同期再生処理を行うことにより、冗長復号部132は、第1の実施の形態の場合と同様にエラー伝搬を抑制することができるとともに、FEC復号処理が同期再生に間に合う場合、回復された符号化データをそのブロックの伸長復号処理に使用し、そのブロックのエラーを回復させることができる。
<3.第3の実施の形態>
[システム全体の処理の説明]
また、第1の実施の形態において説明したようなエラー伝搬の抑制のためのFEC符号化と、第2の実施の形態において説明したような回復用のFEC符号化の両方を符号化データに対して行うようにしてもよい。
この場合、ネットワークシステム100においては、図25に示されるように、処理が行われる。
つまり、動画像圧縮符号化部121は、圧縮符号化処理を行い(矢印301)、例えば「非圧縮データブロック」1つずつに対応する圧縮符号化データブロックを生成する。冗長符号化部122は、その圧縮符号化データブロック1つずつを「回復用FECブロック元データ」とし、非圧縮データブロック」3つ毎に対応する圧縮符号化データブロック群を「エラー伝搬対策用FECブロック元データ」とする(矢印302)。
冗長パケット数は、任意であるが、例えば「回復用FECブロック」に対して2個とし、「エラー伝搬対策用FECブロック」に対して3個とする。以下において、圧縮符号化データブロックnに対応する回復用FECブロック元データ単位を「回復用FECブロック元データL(*, n)」と表し、圧縮符号化データブロックn~n+2に対応するエラー伝搬対策用FECブロック元データ単位を「エラー伝搬対策用FECブロック元データL(*, n~n+2)」と表す。
なお、ここでは、「回復用FECブロック元データ単位」が「非圧縮データブロック」1個分であるものとし、「初期バッファ遅延時間」を決定するパラメータbuf_paramを1と設定する。これにより、ジッタやパケット損失が発生しなかった場合、「回復用FECブロック」内パケットの同期デコード再生時刻までのFEC復号化処理が可能となる。
冗長符号化部122は、回復用FECブロックとエラー伝搬対策用FECブロックのそれぞれについて、FEC符号化処理を行い、冗長データを生成する(矢印303)。生成されたFEC符号化データは、ネットワーク110を介して受信装置102に伝送される(矢印304)。
このとき、回復用FECブロックL(*, 1)に1個のパケット損失が発生し、回復用FECブロックL(*, 2)に3個のパケット損失が発生したものとする。
冗長復号部132においては、回復用のFEC復号処理とエラー伝搬対策用のFEC復号処理の両方が行われる(矢印305)。この場合、同期デコード再生時刻前に回復用FECブロックL(*, 1)内のパケット損失は、回復用FECブロックL(*, 1)にて回復される。したがって、この圧縮符号化データは、「デコード用データ」として動画像伸長復号部133に供給される(矢印306)。
ただし、回復用FECブロックL(*, 2)内の損失パケット数は回復用FECブロック内の冗長パケット数を超えるため回復用FECブロックでは回復することができず、同期デコード再生時刻前に回復されない。しかしながら、エラー伝搬対策用FECブロックL(*, 1~3)復号化処理により、回復される。したがってこの圧縮符号化データは、「エラー伝搬対策用データ」として動画像伸長復号部133に供給され、エラー伝搬対策用に使用される。
なお、エラー伝搬対策用FECブロックL(*, 1~3)内の損失パケット数は4個でエラー伝搬対策用FECブロック内の冗長パケット数を超えるが、1個のパケット損失は回復用FECブロックL(*, 1)にて回復されるため,3個の冗長パケットにて回復することができる。
動画像伸長復号部133は、このように供給される圧縮符号化データを伸長復号し、出力ピクチャ(非圧縮データブロック)を生成する(矢印307)。
[冗長符号化部の構成]
この場合の冗長符号化部122の主な構成例を示すブロック図を図26に示す。この場合も基本的には、図16の例の場合と同様であるが、回復用とエラー伝搬対策用の2つの構成を有している。つまり、冗長符号化部122は、回復用FECブロック化部321および回復用FEC符号化部322、並びに、エラー伝搬対策用FECブロック化部323およびエラー伝搬対策用FEC符号化部324を有する。
回復用FECブロック化部321およびエラー伝搬対策用FECブロック化部323は、処理対象FECブロックが異なるだけで、基本的にFECブロック化部221と同様の処理を行う。回復用FEC符号化部322およびエラー伝搬対策用FEC符号化部324は、処理対象FECブロックが異なるだけで、基本的にFEC符号化部222と同様の処理を行う。
「FEC処理」では、例えば、処理対象の圧縮符号化データを複数のRTPパケットに分割し、パケタイズ化したRTPパケットを単位として、FEC冗長符号化を行う。FEC冗長符号化には、例えば、Reed-Solomon符号等の消失誤り訂正符号が用いられる。
まず、これらの処理部に対して、FEC処理の処理単位(冗長符号単位)であるFECブロックについて(元データパケット数,冗長パケット数)の組が決定される。例えば、(元データパケット数,冗長パケット数)=(10,5)と指定された場合、FEC処理により元データパケット10個に対して冗長パケットが5個を生成される。つまり、送信装置101において、このFECブロックについて合計15個のパケットが送信される。受信装置102は、このFECブロックのパケット中10個のパケットを受信すれば、FEC復号処理により元データを回復することができる。
なお、回復用FECブロック化部321が生成する回復用FECブロックの元データのデータサイズは、エラー伝搬対策用FECブロック化部323が生成するエラー伝搬対策用FECブロックの元データサイズより小さい。
FECブロック元データ単位を大きく設定すれば、一般にバーストパケット損失耐性は高くなるが「初期バッファ遅延時間」にFECブロック内パケット受信時間を含めるように設定した場合、高遅延となってしまう。このため、なんらかのジッタやパケット損失が発生しない場合、同期デコード再生時刻までに「回復用FECブロック」内の全てのパケットの受信が保証されるようにするとともに、「エラー伝搬対策用FECブロック」内の全てのパケットの受信が保証されないように「初期バッファ遅延時間」が設定される。
回復された符号化データは、損失パケットの回復時刻が同期デコード再生時刻より前である場合、同期デコード再生に用いられ、損失パケットの回復時刻が同期デコード再生時刻後である場合、圧縮符号デコードにおける後続デコードデータに対するエラー伝搬対策用に使用される。これにより、FECブロック元データ単位拡大による遅延増加を抑制しながら、バーストパケット損失時のエラー伝搬を抑制することができる。
また、冗長符号化部122は、1FECブロックに対応する元データのデータサイズを決定するブロック元データ単位決定部331と、1FECブロックの冗長度(冗長パケット数)を決定する冗長度決定部332を有する。
ブロック元データ単位決定部331は、回復用FECブロック元データ単位決定部341およびエラー伝搬対策用FECブロック元データ単位決定部342を有する。つまり、回復用FECブロックとエラー伝搬対策用FECブロックの両方について、元データのデータサイズが決定される。FECブロック元データ単位決定処理の詳細については後述する。
また、冗長度決定部332は、回復用FECブロック冗長度決定部343およびエラー伝搬対策用FECブロック冗長度決定部344を有する。つまり、回復用FECブロックとエラー伝搬対策用FECブロックの両方について、冗長度が決定される。冗長度決定処理の詳細については後述する。
ブロック元データ単位決定部331および冗長度決定部332により、1FECブロックの元データのデータサイズと冗長度が、(元データパケット数,冗長パケット数)という形で指定される。
冗長符号化部122は、合成部325をさらに有する。合成部325は、回復用FEC符号化部322において生成された回復用FEC符号化データと、エラー伝搬対策用FEC符号化部324において生成されたエラー伝搬対策用FEC符号化データとを合成し、出力する。なお、合成部325は、例えば、合成する回復用FEC符号化データとエラー伝搬対策用FEC符号化データとで互いに重複する部分が存在する場合、その一方のデータを省略するなど、適宜、最適化しながら合成を行う。
[冗長復号部の構成]
図27は、この場合の冗長復号部132の構成例を示すブロック図である。図27に示されるように、この場合の冗長復号部132は、基本的に図22を参照して説明した場合と同様の構成を有するが、FEC復号部236の代わりに、回復用FEC復号部361およびエラー伝搬対策用FEC復号部362を有する。
回復用FEC復号部361は、回復用FECブロックのFEC復号処理を行う。エラー伝搬対策用FEC復号部362は、エラー伝搬対策用FECブロックのFEC復号処理を行う。つまり、回復用FEC復号部361およびエラー伝搬対策用FEC復号部362は、処理対象FECブロックが異なるだけで、基本的にFEC復号部236と同様にFEC復号処理を行う。
また、制御部231は、FECブロック判定部242の代わりに、回復用FECブロック判定部371およびエラー伝搬対策用FECブロック判定部372を有する。回復用FECブロック判定部371は、保持部233に、回復用FECブロック1つ分のFEC符号化データが蓄積されたか否かを判定する。エラー伝搬対策用FECブロック判定部372は、保持部233に、エラー伝搬対策用FECブロック1つ分のFEC符号化データが蓄積されたか否かを判定する。
[冗長符号化処理の流れ]
次に、この場合の冗長符号化処理の流れの例を図28のフローチャートを参照して説明する。
冗長符号化処理が開始されると、ステップS301において、回復用FECブロック元データ単位決定部341は、回復用FECブロック元データ単位を決定する。
回復用FECブロック元データ単位決定部341は、例えばユーザ等に与えられる目標遅延時間(許容されるネットワークシステム100全体の処理の遅延時間)を用いて以下の式(10)を満たすように「初期バッファ遅延時間」を設定する。
目標遅延時間=送信装置遅延時間+想定伝送最大遅延時間+初期バッファ遅延時間
+再生処理遅延時間 ・・・(10)
式(10)において、「送信装置遅延時間」は、送信装置101において実行される各処理による遅延時間を示す。「想定伝送最大遅延時間」は、送信装置101と受信装置102との間のパケット伝送による遅延時間の想定される最大値を示す。「初期バッファ遅延時間」は、上述した式(9)により与えられる。「再生処理遅延時間」は、受信装置102において行われる再生処理(復号処理等を含む)による遅延時間を示す。
また、「回復用FECブロック元データ単位」は、例えば、このときの「buf_param」と同数の非圧縮データブロックと対応する圧縮符号化データブロックを単位とする。図25の例の場合、「回復用FECブロック元データ単位」は、圧縮符号化データブロック1個毎に設定されている。
ステップS302において、エラー伝搬対策用FECブロック元データ単位決定部342は、エラー伝搬対策用FECブロック元データ単位を決定する。
「エラー伝搬対策用FECブロック元データ単位」は、例えば、階層1のある圧縮符号化データの影響範囲に含まれる非圧縮データブロックの入力時に生成した圧縮符号化データ範囲より小さく、「回復用FECブロック元データ単位」より大きい範囲に設定される。
つまり、「エラー伝搬対策用FECブロック元データ単位」は、当該ブロックの復号途中に生成される中間データと、復号に使用する0個以上の後続のブロックとを合わせたブロック以下となるように設定することができる。
「エラー伝搬対策用FECブロック元データ単位」をこれより大きく設定するとFEC復号処理による回復時に回復パケットの影響範囲の非圧縮データブロックのデコード再生が終了しており、効果が薄い可能性がある。図25の例の場合、「回復用FECブロック元データ単位」は、圧縮符号化データブロック1個毎に設定されている。また、圧縮符号化データL(1,1)の影響範囲は非圧縮データブロック5個分であるため、「エラー伝搬対策用FECブロック元データ単位」は、それより小さい圧縮符号化データブロック3個毎に設定される。
なお、回復用FECブロック元データ単位とエラー伝搬対策用FECブロック元データ単位は、互いに独立して設定することができる。したがって、上述したように、エラー伝搬対策用FECブロック元データ単位を、回復用FECブロック元データ単位の整数倍としても良いが、整数倍とならないようにしてもよい。例えば、ある回復用FECブロック元データが複数のエラー伝搬対策用FECブロック元データにまたがることがあるようにしてもよい。
また、符号化データの復号処理において、所定のサイズもしくは所定の再生時間に相当するサイズの符号化データがバッファに格納されてから復号される場合、「回復用FECブロック元データ単位」の大きさが、そのバッファサイズ以下に設定され、「エラー伝搬対策用FECブロック元データ単位」の大きさをそのバッファサイズ以上に設定されるようにしてもよい。
ステップS303において、回復用FECブロック冗長度決定部343は、回復用FECブロックの冗長度を決定する。ステップS304において、エラー伝搬対策用FECブロック冗長度決定部344は、エラー伝搬対策用FECブロックの冗長度を決定する。
回復用FEC用ブロックおよびエラー伝搬対策用FECブロックに対する冗長度は、例えば、損失回復性能指標を満たすように決定される。例えば、想定されるパケット損失率をpとし、FECブロック内のパケット数をnとし、元データパケット数をkとし、冗長パケット数をn-kとする。この場合において、目標FECブロック損失率をPtとすると、目標FECブロック損失率Ptは、以下の式(11)のように算出される。
元データパケット数kは、ステップS301若しくはステップS302のFECブロック元データ単位決定処理により上述したように決定される。したがって、回復用FECブロック冗長度決定部343およびエラー伝搬対策用FECブロック冗長度決定部344は、それぞれ、この式(11)を用いて、それぞれのFECブロックの冗長パケット数(冗長度)n-kを決定する。
FECブロック元データ単位および冗長度が決定されると、冗長符号化部122は、ステップS305において、符号化データを取得する。ステップS306において、回復用FECブロック化部321は、符号化データを回復用FECブロック1個分取得したか否かを判定する。このときの回復用FECブロック元データ単位は、ステップS301における決定に従う。
回復用FECブロック1個分の符号化データを取得したと判定した場合、回復用FECブロック化部321は、ステップS307に処理を進め、その回復用FECブロック1個分の符号化データを用いて回復用FECブロック(元データ)を生成する。
ステップS308において、回復用FEC符号化部322は、生成された回復用FECブロックについてFEC符号化を行い、冗長データを生成する。つまり、回復用FEC符号化部322は、回復用FECブロックのFEC符号化データである回復用FEC符号化データを生成する。このときの冗長度は、ステップS303における決定に従う。
ステップS309において、合成部325は、生成された回復用FEC符号化データをRTP送信部123に転送し、送信させる。回復用FEC符号化データを転送すると合成部325は、処理をステップS310に進める。また、ステップS306において、符号化データを回復用FECブロック1個分取得していないと判定された場合、回復用FECブロック化部321は、処理をステップS310に進める。
ステップS310乃至ステップS313において、エラー伝搬対策用FECブロック化部323、エラー伝搬対策用FEC符号化部324、および合成部325の各処理部は、ステップS306乃至ステップS309における、回復用FECブロックに対する処理と同様の処理を、エラー伝搬対策用FECブロックに対して行う。
ただし、合成部325は、ステップS313において、エラー伝搬対策用FEC符号化データの、回復用FEC符号化データと重複する部分については、RTP送信部123への伝送を省略する。つまり、合成部325は、例えば、エラー伝搬対策用FECブロックの冗長データのみをRTP送信部123へ伝送する。
ステップS314において、冗長符号化部122は、冗長符号化処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS305に戻し、それ以降の処理を繰り返す。また、ステップS314において、冗長符号化処理を終了すると判定された場合、冗長符号化部122は、冗長符号化処理を終了する。
このようにすることにより、送信装置101は、回復用とエラー伝搬用の両方についてFEC符号化を行い、冗長データを生成することができる。これにより、受信装置102は、FEC処理の回復性能を向上させながら、エラー伝搬を抑制することができる。
[冗長復号処理の流れ]
次に、この場合の、冗長復号部132により実行される冗長復号処理の流れの例を図29のフローチャートを参照して説明する。
この場合も、冗長復号処理の流れは、基本的に図23のフローチャートを参照して説明した場合と同様であるが、回復用FECブロックとエラー伝搬対策用FECブロックのそれぞれに対してFEC復号処理を行う点が異なる。
つまり、ステップS331において、取得部232がRTP受信部131からFEC符号化データを取得すると、ステップS332において、保持部233がそのFEC符号化データを保持する。
ステップS333乃至ステップS335は、回復用FECブロックに対する処理である。ステップS333において、回復用FECブロック判定部371は、回復用FECブロック1つ分以上のFEC符号化データが保持部233に保持されたか否かを判定し、保持されたと判定した場合、処理をステップS334に進める。
FEC符号化データが回復用FECブロック1個分蓄積されると、回復用FEC復号部361は、ステップS334において、そのFEC符号化データを読み出し、符号化データの損失がある場合、FEC復号する。ステップS335において、回復用FEC復号部361は、FEC復号結果としての符号化データをバッファ272に格納し、処理をステップS336に進める。
また、ステップS333において回復用FECブロック1個分が取得されていないと判定された場合、回復用FECブロック判定部371は、処理をステップS336に進める。
ステップS336乃至ステップS340は、エラー伝搬対策用FECブロックに対する処理である。エラー伝搬対策用FEC復号部362、伝搬対策部237、およびエラー伝搬対策用FECブロック判定部372は、このエラー伝搬対策用FECブロックに対して、図23のステップS203乃至207の各処理と同様に、ステップS336乃至ステップS340の各処理を実行する。
つまり、同期時刻前にFEC復号結果が得られた場合、そのエラー伝搬対策用FECブロックの符号化データは、復号処理対象として、バッファ272に蓄積され、同期時刻後にFEC復号結果が得られた場合、そのエラー伝搬対策用FECブロックの符号化データは、次以降のブロックへのエラー伝搬を抑制するために、参照用データとして、ウェーブレット逆変換部173に供給される。
ステップS341において、制御部231の終了判定部244は、冗長復号処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS331に戻し、それ以降の処理を繰り返す。また、ステップS341において、冗長復号処理を終了すると判定された場合、終了判定部244は、冗長復号処理を終了する。
このようにすることにより、受信装置102は、FEC処理の回復性能を向上させながら、エラー伝搬を抑制することができる。
[FEC復号処理タイミング]
図30は、このようなデータ伝送の各処理のタイミングの例を説明する図である。
図30に示されるように、例えば、回復用FECブロックL(*,1)乃至回復用FECブロックL(*,3)に対するFEC復号処理がそれぞれ行われた後、エラー伝搬対策用FECブロックL(*,1~3)に対するFEC復号処理が行われるとする。
この場合、回復用FECブロックL(*,2)において、冗長パケット数不足により損失パケットの回復に失敗しても、エラー伝搬対策用FECブロックL(*,1~3)において再度、その損失パケットの回復が行われる。
しかしながら、エラー伝搬対策用FECブロックにおけるFEC復号処理によるL(*,2)のパケットの回復がL(*,2)の伸長復号処理に間に合わない場合、その符号化データは、次以降のブロックの伸長復号処理において使用されるエラー伝搬対策用データとして、ウェーブレット逆変換部173に供給される。
また、図30に示されるように、例えば、回復用FECブロックL(*,4)乃至回復用FECブロックL(*,6)に対するFEC復号処理がそれぞれ行われた後、エラー伝搬対策用FECブロックL(*,4~6)に対するFEC復号処理が行われるとする。
この場合、回復用FECブロックL(*,6)において、冗長パケット数不足により損失パケットの回復に失敗しても、エラー伝搬対策用FECブロックL(*,4~6)において再度、その損失パケットの回復が行われる。
このとき、エラー伝搬対策用FECブロックにおけるFEC復号処理によるL(*,6)のパケットの回復がL(*,6)の伸長復号処理に間に合うとすると、その符号化データは、そのブロックの伸長復号対象データとして、エントロピ復号部171に供給される。
このように、ネットワークシステム100は、不要な遅延の増大を抑制しながら、後続データへのエラー伝搬を抑制するように、データを伝送させることができる。
[冗長データ]
なお、送信装置101が、圧縮符号化処理に階層符号化処理を用い、階層ごとに別々のFECブロックを形成し、階層毎の重要度に応じて、冗長度を調整するようにしてもよい。
また、冗長度の決定方式は任意であり、上述した式(11)を用いる方法以外であってもよい。例えば、「回復用FECブロック元データ」の「エラー伝搬対策用FECブロック元データ」に対する位置に応じて冗長パケット数が調整されるようにしてもよい。
図31は、FECブロックの構成例を示す図である。図31に示される例の場合、「エラー伝搬対策用FECブロック」の末尾に位置する「回復用FECブロック」に対する冗長パケット数が0個に設定され、その他は3個に設定されている。
これは、「エラー伝搬対策用FECブロック」の末尾に位置する回復用FECブロックL(*, 3)を含む圧縮符号化データL(*, 3)のデコード処理前にエラー伝搬対策用FECブロックL(*, 1~3)のFEC復号処理を行う事が出来るため、圧縮符号化データL(*, 3)は、L(*, 1)やL(*, 2)と同等のパケット損失回復性能を得ることができるためである。
<4.第4の実施の形態>
[ネットワークシステムの構成]
図32は、本発明を適用したネットワークシステムの構成例を示すブロック図である。
図32に示されるネットワークシステム500は、図1に示されるネットワークシステム100と基本的に同様の構成を有し、同様の処理を行う。ただし、ネットワークシステム500の場合、送信装置501および受信装置502は、さらに、送受信装置間でネットワーク状況情報の交換を行うためのRTCP通信部を有する。
つまり、受信装置102に対応する受信装置502は、受信装置102の構成に加え、RTCP通信部511を有する。また、送信装置101に対応する送信装置501は、送信装置101の構成に加え、RTCP通信部512を有する。
RTCP通信部511およびRTCP通信部512は、ネットワーク110の通信に関する状況を示す情報であるネットワーク状況情報を、例えば、IETF RFC 3550記載のRTCP Sender Report(SR)パケットやRTCP Receiver Report(RR)パケットを送受信することにより交換する。ネットワーク状況情報は、任意のパラメータに関する情報により構成される。例えば、往復伝送遅延、いわゆるRTT(Round Trip Time)、伝送ジッタ、送受信データレート、およびパケット損失率等のパラメータに関する情報が含まれるようにしてもよい。
また、ネットワーク状況情報には、例えば、所定数以上の連続パケットの損失の発生率、若しくは、所定区間中のパケット損失数が所定数以上である頻度を示すバーストパケット損失率の想定値が含まれるようにしてもよい。
例えば、RTCP通信部511は、RTP受信部131より、受信状況に関する情報を取得すると、その情報を、ネットワーク110を介してRTCP通信部512に送信する。
冗長符号化部122は、RTCP通信部512において取得されたネットワーク状況情報を参考にして処理を行う。
[冗長符号化部の構成]
図33にこの場合の冗長符号化部122の主な構成例を示す。図33に示されるように、この場合も、冗長符号化部122は、基本的に図26を参照して説明した場合と同様の構成を有する。ただし、この場合、ブロック元データ単位決定部331は、RTCP通信部512からネットワーク状況情報を取得し、その情報に基づいてブロック元データ単位を決定する。
また、冗長度決定部332も、RTCP通信部512からネットワーク状況情報を取得し、その情報に基づいて冗長度を決定する。
[FECブロック元データ単位決定処理の流れ]
次に、このブロック元データ単位決定部331により実行されるFECブロック元データ単位決定処理の流れの例を、図34のフローチャートを参照して説明する。
ブロック元データ単位決定部331は、ステップS401において、RTCP通信部512からネットワーク状況情報を取得する。ステップS402において、回復用FECブロック元データ単位決定部341は、ネットワーク状況情報の各種統計値を用いて、回復用FECブロック元データ単位を算出する。
例えば、RTCP通信部512により測定されたネットワークの往復伝搬遅延時間(計測RTT)や計測ネットワークジッタ値等が参照され、これらの一定時間の最大値、若しくは指数加重移動平均(EWMA)値等の統計値が、ブロック元データ単位の算出に利用される。
例えば、想定伝送最大遅延時間やジッタ許容時間は、以下の式(12)と式(13)のように算出される。
想定伝送最大遅延時間=計測RTTの統計値/2 ・・・(12)
ジッタ許容時間=計測ネットワークジッタ値の統計値 ・・・(13)
回復用FECブロック元データ単位は、これらの値を用いて、上述した式(9)や式(10)により算出される。
回復用FECブロック元データ単位が算出されると、回復用FECブロック元データ単位決定部341は、ステップS403において、回復用FECブロック元データ単位設定を更新する。
ステップS404において、エラー伝搬対策用FECブロック元データ単位決定部342は、回復用FECブロックの場合と同様に、ネットワーク状況情報の各種統計値を用いて、エラー伝搬対策用FECブロック元データ単位を算出する。
エラー伝搬対策用FECブロック元データ単位が算出されると、ステップS405において、エラー伝搬対策用FECブロック元データ単位決定部342は、回復用FECブロックの場合と同様に、エラー伝搬対策用FECブロック元データ単位設定を更新する。
ステップS406において、ブロック元データ単位決定部331は、FECブロック元データ単位決定処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS401に戻し、それ以降の処理を繰り返す。また、ステップS406においてFECブロック元データ単位決定処理を終了すると判定された場合、ブロック元データ単位決定部331は、FECブロック元データ単位決定処理を終了する。
なお、例えば、バーストパケット損失率が一定値以上となった場合、FECブロック元データ単位を大きく修正するようにしてもよい。
以上のようにFECブロック元データ単位を決定することにより、冗長符号化部122は、FECブロック元データ単位を、ネットワーク110の現在の通信状況に応じて適切に動的に設定することができる。
[FECブロック冗長度決定処理の流れ]
次に、図35のフローチャートを参照して、この場合のFECブロック冗長度決定処理の流れの例を説明する。
冗長度決定部332は、ステップS421において、RTCP通信部512からネットワーク状況情報を取得する。ステップS422において、回復用FECブロック冗長度決定部343は、ネットワーク状況情報の各種統計値を用いて、回復用FECブロック冗長度を算出する。
例えば、RTCP通信部512により測定されたネットワークのパケット損失率等が参照される。冗長度は、上述した式(11)により算出されるが、パケット損失率pは、上述したような想定される値ではなく、測定値とする。つまり、この場合のパケット損失率pは、ネットワーク状況に応じて動的に調整される。
回復用FECブロック冗長度が算出されると、回復用FECブロック冗長度決定部343は、ステップS423において、回復用FECブロック冗長度設定を更新する。
ステップS424において、エラー伝搬対策用FECブロック冗長度決定部344は、回復用FECブロックの場合と同様に、ネットワーク状況情報の各種統計値を用いて、エラー伝搬対策用FECブロック冗長度を算出する。
エラー伝搬対策用FECブロック冗長度が算出されると、ステップS425において、エラー伝搬対策用FECブロック冗長度決定部344は、回復用FECブロックの場合と同様に、エラー伝搬対策用FECブロック冗長度設定を更新する。
ステップS426において、冗長度決定部332は、FECブロック冗長度決定処理を終了するか否かを判定し、終了しないと判定された場合、処理をステップS421に戻し、それ以降の処理を繰り返す。また、ステップS426においてFECブロック冗長度決定処理を終了すると判定された場合、冗長度決定部332は、FECブロック冗長度決定処理を終了する。
なお、例えば、バーストパケット損失率が一定値以上となった場合、冗長度を大きく修正するようにしてもよい。
以上のように冗長度を決定することにより、冗長符号化部122は、ネットワーク110の現在の通信状況に応じて適切に動的に冗長度を設定することができる。つまり、送信装置101は、ネットワーク110の現在の通信状況において、必要最小限の冗長度でのデータ伝送を行うことができる。
もちろん、ネットワーク状況情報に基づいてFECブロック元データ単位と冗長度の両方が設定されるようにしてもよい。
以上のようにFEC処理を行うことにより、ネットワークシステム100およびネットワークシステム500は、マルチメディアストリーミングやリアルタイムコミュニケーションを行う場合において、不要な遅延の増加を抑制しながら、バーストパケット損失の回復、若しくは、後続データへのエラー伝搬を抑制することができる冗長符号化伝送を実現することができる。
<5.第5の実施の形態>
[パーソナルコンピュータ]
上述した一連の処理は、ハードウエアにより実行させることもできるし、ソフトウエアにより実行させることもできる。この場合、例えば、図36に示されるようなパーソナルコンピュータとして構成されるようにしてもよい。
図36において、パーソナルコンピュータ600のCPU601は、ROM(Read Only Memory)602に記憶されているプログラム、または記憶部613からRAM(Random Access Memory)603にロードされたプログラムに従って各種の処理を実行する。RAM603にはまた、CPU601が各種の処理を実行する上において必要なデータなども適宜記憶される。
CPU601、ROM602、およびRAM603は、バス604を介して相互に接続されている。このバス604にはまた、入出力インタフェース610も接続されている。
入出力インタフェース610には、キーボード、マウスなどよりなる入力部611、CRT(Cathode Ray Tube)やLCD(Liquid Crystal Display)などよりなるディスプレイ、並びにスピーカなどよりなる出力部612、ハードディスクなどより構成される記憶部613、モデムなどより構成される通信部614が接続されている。通信部614は、インターネットを含むネットワークを介しての通信処理を行う。
入出力インタフェース610にはまた、必要に応じてドライブ615が接続され、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリなどのリムーバブルメディア621が適宜装着され、それらから読み出されたコンピュータプログラムが、必要に応じて記憶部613にインストールされる。
上述した一連の処理をソフトウエアにより実行させる場合には、そのソフトウエアを構成するプログラムが、ネットワークや記録媒体からインストールされる。
この記録媒体は、例えば、図36に示されるように、装置本体とは別に、ユーザにプログラムを配信するために配布される、プログラムが記録されている磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc - Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク(MD(Mini Disc)を含む)、もしくは半導体メモリなどよりなるリムーバブルメディア621により構成されるだけでなく、装置本体に予め組み込まれた状態でユーザに配信される、プログラムが記録されているROM602や、記憶部613に含まれるハードディスクなどで構成される。
なお、コンピュータが実行するプログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数のデバイス(装置)により構成される装置全体を表すものである。
また、以上において、1つの装置(または処理部)として説明した構成を分割し、複数の装置(または処理部)として構成するようにしてもよい。逆に、以上において複数の装置(または処理部)として説明した構成をまとめて1つの装置(または処理部)として構成されるようにしてもよい。また、各装置(または各処理部)の構成に上述した以外の構成を付加するようにしてももちろんよい。さらに、システム全体としての構成や動作が実質的に同じであれば、ある装置(または処理部)の構成の一部を他の装置(または他の処理部)の構成に含めるようにしてもよい。つまり、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。