(57)【要約】  ビデオストリームのシングルパスおよび２パスエンコーディング用の目標ビットレートを動的な解像度切換えによって得る。シングルパスエンコーダは、あるフレームに対するエンコード用ビットレートが目標ビットレートを満たすかどうかを判定する。満たさない場合には、ビデオ解像度を調整する必要があるかどうかを判定すべく、そのフレームをエンコードするために使用する量子化パラメータを最小閾値および最大閾値と比較する。２パスエンコーダは、量子化パラメータを使用して入力フレームをエンコードし、第２のパス中にフレームをエンコードするためのビデオ解像度を、入力フレームをエンコードするビットレートに基づいて調整するかどうかを判定する。フレームをコーディングするために使用されるモーション探索領域に対するエンコーダ限界に基づいて解像度を調整することができる。
2019501554.tif 000002
【特許請求の範囲】
【請求項１】
ビデオストリームをエンコードする方法であって、
ビデオストリームの複数のフレームのうちの第１のフレームを識別することと、
前記第１のフレームを量子化パラメータを表す第１のビットレートでエンコードすることと、
前記第１のビットレートを前記第１のフレームの目標ビットレートと比較するとともに前記量子化パラメータを最小量子化閾値および最大量子化閾値の一方と比較することと、
前記第１のビットレートと前記目標ビットレートとの比較及び前記量子化パラメータと前記最小量子化閾値および前記最大量子化閾値の一方との比較に応答して、少なくとも１つのエンコードパラメータを調整することと、
前記ビデオストリームの第２のフレームを識別することと、
前記第２のフレームを前記調整された少なくとも１つのエンコードパラメータを使用して第２のビットレートでエンコードすることと、
エンコードされた前記第１のフレームおよびエンコードされた前記第２のフレームを出力ビットストリームに送信することと
を備え、
前記第１のビットレートが前記目標ビットレートより小さく、前記量子化パラメータが前記最小量子化閾値と同じかそれより小さい場合、前記少なくとも１つのエンコードパラメータを調整することが、
前記ビデオストリームの解像度を上昇させることと、
前記量子化パラメータを上昇させることと、
上昇後の前記解像度に基づいて前記最小量子化閾値および前記最大量子化閾値を調整することとを備える、
ビデオストリームをエンコードする方法。
【請求項２】
前記第１のビットレートが前記目標ビットレートよりも小さく、前記量子化パラメータが前記最小量子化閾値よりも大きい場合、前記少なくとも１つのエンコードパラメータを調整することが、前記量子化パラメータを低下させることを備える、請求項１に記載の方法。
【請求項３】
前記第１のフレームをエンコードすることに応答してモーション探索領域に対する１つまたは複数のエンコーダ限界を識別することと、
前記エンコーダ限界に基づいて前記ビデオストリームの解像度を調整することと
を更に備える請求項１または２に記載の方法。
【請求項４】
前記第１のビットレートが前記目標ビットレートよりも大きく、前記量子化パラメータが前記最大量子化閾値よりも小さい場合、前記少なくとも１つのエンコードパラメータを調整することは、前記量子化パラメータを上昇させることを備える、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記第１のビットレートが前記目標ビットレートより大きく、前記量子化パラメータが前記最大量子化閾値と同じかそれより大きい場合、前記少なくとも１つのエンコードパラメータを調整することは、
前記ビデオストリームの解像度を低下させることと、
前記量子化パラメータを低下させることと、
低下後の解像度に基づいて前記最小量子化閾値および前記最大量子化閾値を調整することと
を備える請求項１〜４のいずれか一項に記載の方法。
【請求項６】
前記少なくとも１つのエンコードパラメータを調整することは、
前記１つまたは複数のエンコーダ限界に基づいて前記ビデオストリームの解像度を低下させることと、
低下後の解像度での前記第１のフレームの基準位置を決定することと、
前記第１のフレームの前記基準位置に基づいて前記モーション探索領域の中点位置をリセットすることと
を備える、請求項１に記載の方法。
【請求項７】
前記少なくとも１つのエンコードパラメータは、前記ビデオストリームの解像度、前記量子化パラメータ、前記最小量子化閾値、または前記最大量子化閾値のうちの少なくとも１つを備える請求項１〜６のいずれか一項に記載の方法。
【請求項８】
ビデオストリームをエンコードする方法であって、
ビデオストリームの複数のフレームの入力フレームを識別することと、
前記入力フレームを入力量子化パラメータを用いてエンコードすることと、
前記入力フレームをエンコードすることに応答して複数のビットを生成することと、
前記複数のビットと、前記入力フレームをエンコードするための目標ビットレートとに基づいて、少なくとも１つのエンコードパラメータを調整することと、
前記少なくとも１つのエンコードパラメータを用いて前記入力フレームをエンコードすることによってエンコード済みフレームを生成することと、
前記エンコード済みフレームを出力ビットストリームに送信することと
を備え、
前記入力フレームをエンコードすることに応答して生成される前記複数のビットが前記目標ビットレートよりも小さいフレームビットレートを示す場合、
前記少なくとも１つのエンコードパラメータを調整することが前記ビデオストリームの解像度を上昇させることを備え、
前記エンコード済みフレームを生成することが上昇後の解像度で前記入力フレームをエンコードすることを備える、ビデオストリームをエンコードする方法。
【請求項９】
前記入力フレームをエンコードすることに応答して、モーション探索領域に対する１つまたは複数のエンコーダ限界を識別することと、
前記エンコーダ限界に基づいて前記ビデオストリームの解像度を調整することと
を更に備える請求項８に記載の方法。
【請求項１０】
前記入力フレームをエンコードすることに応答して生成された複数のビットが前記目標ビットレートよりも大きいフレームビットレートを示す場合、
前記少なくとも１つのエンコードパラメータを調整することが、前記ビデオストリームの解像度を低下することを備え、
前記エンコード済みフレームを生成することが、低下後の解像度で前記入力フレームをエンコードすることを備える請求項８または９に記載の方法。
【請求項１１】
前記少なくとも１つのエンコードパラメータを調整することは、前記少なくとも１つのエンコードパラメータが前記複数のビットと前記目標ビットレートとに基づく調整に供されるかどうかをフラグを用いて示すことを備える請求項８〜１０のいずれか一項に記載の方法。
【請求項１２】
前記少なくとも１つのエンコードパラメータを調整することは、
前記１つまたは複数のエンコーダ限界に基づいて前記ビデオストリームの解像度を低下させることと、
前記低下後の解像度で前記入力フレームの基準位置を決定することと、
前記入力フレームの前記基準位置に基づいて、前記モーション探索領域の中点位置をリセットすることとを備える請求項８〜１１のいずれか一項に記載の方法。
【請求項１３】
前記少なくとも１つのエンコードパラメータは、前記入力量子化パラメータ、エンコード量子化パラメータ、および前記ビデオストリームの解像度のうちの少なくとも１つを備える請求項８〜１２のいずれか一項に記載の方法。
【請求項１４】
前記入力量子化パラメータは定数である請求項８〜１３のいずれか一項に記載の方法。
【請求項１５】
ビデオストリームをエンコードする方法であって、
ビデオストリームの複数のフレームの入力フレームを識別することと、
前記入力フレームを一定の量子化パラメータを表す第１のビットレートでエンコードすることと、
前記第１のビットレートを前記入力フレームに対する最小目標ビットレート及び最大目標ビットレートの一方と比較することと、
前記第１のビットレートを前記最小目標ビットレート及び前記最大目標ビットレートの一方と比較することに応答して、少なくとも１つのエンコードパラメータを調整することと、
前記少なくとも１つのエンコードパラメータを用いて前記入力フレームをエンコードすることによってエンコード済みフレームを生成することと、
前記エンコード済みフレームを出力ビットストリームに送信することと
を備え、
前記第１のビットレートが前記最小目標ビットレートよりも小さい場合、
前記少なくとも１つのエンコードパラメータを調整することは、前記ビデオストリームの解像度を上昇させることを備え、
前記エンコード済みフレームを生成することは、前記上昇後の解像度で前記入力フレームをエンコードすることを備える、
ビデオストリームをエンコードする方法。
【請求項１６】
前記入力フレームをエンコードすることに応答してモーション探索領域に対する１つまたは複数のエンコーダ限界を識別することと、
前記エンコーダ限界に基づいて前記ビデオストリームの解像度を調整することと
を更に備える請求項１５に記載の方法。
【請求項１７】
前記第１のビットレートが前記最大目標ビットレートよりも大きい場合、
前記少なくとも１つのエンコードパラメータを調整することは、前記ビデオストリームの解像度を低下させることを備え、
前記エンコード済みフレームを生成することは、低下後の解像度で前記入力フレームをエンコードすることを備える
請求項１５または１６に記載の方法。
【請求項１８】
前記少なくとも１つのエンコードパラメータを調整することは、
前記少なくとも１つのエンコードパラメータが、前記入力フレームがエンコードされる第１のビットレートを示す複数のビットと、前記最小目標ビットレートと前記最大目標ビットレートとの間の目標ビットレートとに基づく調整に供されるかどうかをフラグを用いて示すことを備える
請求項１５〜１７のいずれか一項に記載の方法。
【請求項１９】
前記少なくとも１つのエンコードパラメータを調整することは、
前記１つまたは複数のエンコーダ限界に基づいて前記ビデオストリームの解像度を低下させることと、
低下後の解像度で前記入力フレームの基準位置を決定することと、
前記入力フレームの前記基準位置に基づいて前記モーション探索領域の中点位置をリセットすることと
を備える請求項１５〜１８のいずれか一項に記載の方法。
【請求項２０】
前記少なくとも１つのエンコードパラメータは、前記一定の量子化パラメータ、前記最小目標ビットレート、前記最大目標ビットレート、エンコード量子化パラメータ、または前記ビデオストリームの解像度のうちの少なくとも１つを備える、請求項１５〜１９のいずれか一項に記載の方法。
【請求項２１】
請求項１〜２０のいずれか一項に記載の方法を実施するように構成された装置。
【請求項２２】
少なくとも１つのプロセッサと、前記プロセッサに請求項１〜２０のいずれか一項に記載のステップを実行させるように構成された命令を格納するメモリとを備える、請求項２１に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、動的な解像度切換えを用いたリアルタイムビデオエンコーダレート制御に関する。
【背景技術】
【０００２】
デジタルビデオストリームは、通常、一連のフレームまたは一連の静止画像を使用してビデオを表現する。各フレームは多数のブロックを含むことができ、このことによって、ピクセル毎の色、輝度、または他の属性の値を記述する情報を含むことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
典型的なビデオストリームのデータ量は多く、ビデオの送信と格納のためにかなりのコンピューティングリソースや通信リソースを使用する。ビデオデータに含まれるデータが大量であることから、送信及び格納のために高性能圧縮が必要とされる。さらに、利用可能な接続に基づく最適化解像度で品質のよいビデオデータをストリーミングできることが望ましい。
【課題を解決するための手段】
【０００４】
本明細書において、ビデオストリームをエンコードするための目標ビットレートを得るための動的な解像度切換えを使用するシステム、方法、および装置のいくつかの態様を開示する。本開示のある態様に従う装置は、ビデオストリームの複数のフレームのうちの第１のフレームを識別し、その第１のフレームを量子化パラメータを表す第１のビットレートでエンコードし、第１のフレームをエンコードすることに応答して第１のモーション探索領域に対する１つ以上のエンコーダ限界を識別し、第１のビットレートを第１のフレームの目標ビットレートと比較し、量子化パラメータを最小量子化閾値および最大量子化閾値のうちの一方と比較し、第１のビットレートと目標ビットレートとの比較及び量子化パラメータと最小量子化閾値および最大量子化閾値のうちの一方との比較に応答して少なくとも１つのエンコードパラメータを調整し、ビデオストリームの第２のフレームを識別し、その第２のフレームを調整された少なくとも１つのエンコードパラメータを用いてエンコードし、エンコードした第１のフレームおよびエンコードした第２のフレームを出力ビットストリームに送信するように設けられる。
【０００５】
本開示の別の態様による装置は、複数のフレームの入力フレームを識別し、その入力フレームを入力量子化パラメータを使用してエンコードし、その入力フレームのエンコードに応答して、モーション探索領域に対する１つまたは複数のエンコーダ限界を識別し、前記入力フレームのエンコードに応答して複数のビットを生成し、前記複数のビットと、前記入力フレームをエンコードするための目標ビットレートとに基づいて少なくとも１つのエンコードパラメータを調整し、前記少なくとも１つのエンコードパラメータを用いて入力フレームをエンコードすることによってエンコード済みフレームを生成し、そのエンコード済みフレームを出力ビットストリームに送信するように設けられる。
【０００６】
本開示の別の態様による装置は、複数のフレームの入力フレームを識別し、その入力フレームを一定の量子化パラメータを表す第１のビットレートでエンコードし、入力フレームのエンコードに応答してモーション探索領域に対する１つまたは複数のエンコーダ限界を識別し、第１のビットレートを入力フレームの最小目標ビットレートおよび最大目標ビットレートのうちの一方と比較し、第１のビットレートと入力フレームの最小目標ビットレートおよび最大目標ビットレートのうちの一方との比較に応答して、前記少なくとも１つのエンコードパラメータを調整し、前記少なくとも１つのエンコードパラメータを使用して前記入力フレームをエンコードすることによってエンコード済みフレームを生成し、そのエンコード済みフレームを出力ビットストリームに送信するように設けられる。
【０００７】
本明細書の上記および他の箇所に記載の装置は、説明したように装置を設置するためにコンピュータメモリに格納された命令を実行するように構成された少なくとも１つのプロセッサを備えることができる。本開示の態様はまた、対応する方法、および適切なコンピュータシステム上で実行されるときにそのような命令または方法を実行するコンピュータプログラムコードを担持する１つまたは複数の対応するコンピュータ可読媒体を提供する。
【０００８】
本開示の上記した態様及び他の態様は、以下の実施形態の詳細な説明、添付の特許請求の範囲および添付の図面に開示される。
本発明は、添付の図面と併せて以下の詳細な説明を読むとよく理解される。図面中の同じ番号は、特に明記しない限り同様の要素を指す。
【図面の簡単な説明】
【０００９】
【図１Ａ】最大化された量子化パラメータに起因してオーバーシュートになっているビデオストリームをエンコードするための目標ビットレートを示すグラフ。
【図１Ｂ】最小化された量子化パラメータに起因してアンダーシュートになっているビデオストリームをエンコードするための目標ビットレートを示すグラフ。
【図２】ビデオエンコードデコードシステムの概略図。
【図３】送信局または受信局を実装できるコンピューティングデバイスの例のブロック図。
【図４】ビデオストリームに対するエンコードとそれに続くデコードの典型例の図。
【図５】本明細書の教示の一態様によるビデオ圧縮システムのブロック図。
【図６】本明細書の教示の別の態様によるビデオ解凍システムのブロック図。
【図７】シングルパスエンコードにおける目標エンコード用ビットレートを得るためのプロセスの一例のフローチャート図。
【図８】２パスエンコードにおける目標エンコード用ビットレートを得るためのプロセスの一例のフローチャート図。
【発明を実施するための形態】
【００１０】
ビデオエンコーダにおけるレート制御アルゴリズムは、入力データの複雑さが経時的に変化する場合に、エンコーダに一定のビットレートを生成させつづけることを目的としている。一定ビットレートは、先行する一または複数のフレームが生成したビットの量に基づき、フレーム毎の量子化パラメータ（ＱＰ）を調整することによって得ることができる。一般に、量子化が高いほどビットレートは低くなり、量子化が低いほどビットレートは高くなる。量子化パラメータは、ビデオストリームのデータがエンコーダによって量子化されるときの度合（ｓｃａｌｅ）を示す。すなわち、より高い量子化パラメータがエンコーダによって使用される場合、その量子化ステージでは、より高い量子化パラメータについてはビデオデータのより高い縮小（ｒｅｄｕｃｔｉｏｎ）を行い、より低い量子化パラメータについてはビデオデータにおけるより低い縮小を行う。こうして得られる量子化済みビデオデータは、当該データを備えるビデオストリームの一フレームをエンコードするときのビットレートを示す。一般に、ビデオストリームの所与のフレームについて、より高い量子化パラメータを使用するとより低いフレームビットレートが得られ、より低い量子化パラメータを使用するとより高いフレームビットレートが得られる。
【００１１】
しかしながら、ビデオシーケンスの複雑さおよびエンコーダの能力の多様さによって、所与のビデオストリームのエンコードに目標ビットレートを合わせることができない場合がある。その理由は、ＱＰが既に最大値閾値（例えば、明白な視覚的アーチファクトを生成することによって解像度に対して低ビデオ品質を更に向上させるＱＰの値）にキャップされているのに、まだビットレートが十分に低くなくて、その結果、ビットレートのオーバーシュートとなっている等である。あるいは、大きなＱＰの使用によってビデオ品質に有害なコーディングアーチファクトを生じることもある。同様に、所与の帯域幅でユーザに対してビデオ品質を最適化するのが目的であって、ＱＰが最小値閾値（例えば、更なる減少が解像度に対するビデオ品質の向上に影響を及ぼさない場合のＱＰの値）に到達している場合、ビデオ品質をさらに向上させる方法はないかもしれない。したがって、ユーザーエクスペリエンスは不快となる。
【００１２】
図１Ａ及び図１Ｂは、最大化された量子化パラメータに起因するオーバーシュートしたビデオストリームをエンコードするための目標ビットレートと、最小化された量子化パラメータに起因するアンダーシュートしたビデオストリームをエンコードするための目標ビットレートとをそれぞれ示すグラフである。横軸は、エンコーダによってエンコードされているビデオストリームのフレームの連続的な進行を示し、縦軸は、所定のフレームに対しエンコーダの量子化ステージで使用される量子化パラメータを示す。ビデオストリームのフレームをエンコードするための最小ＱＰ閾値１００および最大ＱＰ閾値１０２が目標ビットレート１０４に対する一定値として示されている。これらの図は、さらに、エンコードしているデータに応じてＱＰ１０６を単に上昇させたり低下させるだけでは目標ビットレート１０４が得られないことを示している。フレームビットレート１０８は、例えば所与のフレームを備える入力データのエンコードの複雑さに起因して変動することがある。
【００１３】
図１Ａに示すように、フレームビットレート１０８は、ビデオストリームのデータが複雑になるにつれて上昇する。フレームビットレート１０８の上昇に応答して、エンコーダは、ビデオストリームの目標ビットレート１０４を維持しようとしてＱＰ１０６を上昇させる。しかしながら、最終的には、ＱＰ１０６は最大ＱＰ閾値１０２に達し、それ以上上昇させることができないのに、エンコードするデータが目標ビットレート１０４を得るには過剰に多く残っているので、フレームビットレート１０８はまだ目標ビットレート１０４に達していない。これは、最大ＱＰ閾値１０２がキャップされているにもかかわらず、フレームビットレート１０８が目標ビットレート１０４よりも依然として高いので、ビットレートオーバーシュートと呼ばれる。同様に、図１Ｂに示すように、エンコーダは、フレームビットレート１０８が低すぎるので目標ビットレート１０４が得られないと判断した場合、ＱＰ１０６を減少させることがある。しかしながら、フレームビットレート１０８が最小ＱＰ閾値１００に達したにもかかわらず目標ビットレート１０４の下にとどまっていると、ビットレートアンダーシュートとなる。
【００１４】
したがって、従来のエンコーダは、ＱＰの単なる調整によってビデオデータのエンコード用の一定ビットレートを得られない。さらに、一部のエンコーダはエンコード用のキーフレームを挿入することもあるが、この解決策は、そのキーフレームをコーディングするときにビットレートピークを必然的に引き起こすとの理由の点で少なくとも最適ではない。対照的に、本開示は、エンコード中に解像度を切換えることによってレート制御性能を改善するための動的な基準フレームスケーリングを説明する。そこでレート制御が行われ、例えば、エンコーダが、それ用の予測信号を形成するのに先立って基準フレームを内部的にスケーリングすることによって達成される。ビデオストリームのエンコード用のシングルパスエンコーダおよび２パスエンコーダが説明される。２パスエンコーダでは、第１のパスが、一定の量子化器を使用してビデオストリームのフレームをエンコードし、第２のパスが、どのフレームが複雑でどれが単純であるかを先に知っているフレーム毎のビットを最適に割り当てる。動的基準フレームスケーリングの更なる詳細は、本明細書において、それが実施され得るシステムを参照して最初に説明される。
【００１５】
図２は、ビデオエンコードデコードシステム２００の概略図である。送信局２０２は、例えば図３に記載されているような内部ハードウェア構成を有するコンピュータとすることができるが、送信局２０２の他の適切な実装も可能である。例えば、送信局２０２の処理を複数の装置に分散させることができる。
【００１６】
ネットワーク２０４は、ビデオストリームのエンコードおよびデコードのために送信局２０２と受信局２０６とを接続することができる。具体的には、ビデオストリームを送信局２０２でエンコードすることができ、エンコードされたビデオストリームを受信局２０６でデコードすることができる。ネットワーク２０４は、例えば、インターネットとすることができる。ネットワーク２０４は、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、仮想プライベートネットワーク（ＶＰＮ）、携帯電話ネットワーク、または、送信局２０２からのビデオストリームを、この例では受信局２０６へと転送する他の手段であってもよい。
【００１７】
受信局２０６は、一例では、図３に記載されたような内部ハードウェア構成を有するコンピュータとすることができるが、受信局２０６の他の適切な実装も可能である。例えば、受信局２０６の処理を複数の装置に分散させることができる。
【００１８】
ビデオエンコードデコードシステム２００の他の実装も可能である。例えば、ある実装例ではネットワーク２０４を省略することができる。別の実装例では、ビデオストリームをエンコードし、受信局２０６へまたはメモリを有する任意の他の装置に後で送信するために格納することができる。一実装例では、受信局２０６は、エンコードされたビデオストリームを（例えば、ネットワーク２０４、コンピュータバスおよび／または何らかの通信路を介して）受信し、後でデコードするためにそのビデオストリームを記憶する。ある例示的な実装例では、エンコードされたビデオをネットワーク２０４を介して送信するために、リアルタイム転送プロトコル（ＲＴＰ）が使用される。別の実装例では、ＲＴＰ以外のトランスポートプロトコル、例えばＨＴＴＰベースのビデオストリーミングプロトコルを使用することができる。
【００１９】
例えばビデオ会議システムで使用される場合、以下に説明するように、ビデオストリームをエンコードおよびデコードする能力を送信局２０２および／または受信局２０６に含めてもよい。例えば、受信局２０６は、ビデオ会議サーバ（例えば、送信局２０２）からのエンコードされたビデオビットストリームを受信してデコードおよび表示し、さらにそれ自身のビデオビットストリームをエンコードし、他の参加者によるデコード及び視聴のためにビデオ会議サーバに送信するビデオ会議参加者であり得る。
【００２０】
図３は、送信局または受信局を実現できるコンピューティングデバイス３００の一例のブロック図である。例えば、コンピューティングデバイス３００は、図２の送信局２０２および受信局２０６の一方または両方を実装することができる。コンピューティングデバイス３００は、複数のコンピューティングデバイスを含むコンピューティングシステムの形態であってもよいし、例えば、携帯電話、タブレットコンピュータ、ラップトップコンピュータ、ノートブックコンピュータ、デスクトップコンピュータ等の単一のコンピューティングデバイスの形態であってもよい。
【００２１】
コンピューティングデバイス３００内のＣＰＵ３０２は、従来の中央処理装置とすることができる。あるいは、ＣＰＵ３０２は、現在存在しているかまたは今後開発される、情報を操作または処理することができる任意の他のタイプの装置または複数の装置であってよい。なお、開示された実装例は、例えばＣＰＵ３０２などの単一のプロセッサをもって実施することができるが、複数のプロセッサを使用して速度および効率の利点を得てもよい。
【００２２】
コンピューティングデバイス３００内のメモリ３０４は、一実装例では読み出し専用メモリ（ＲＯＭ）装置またはランダムアクセスメモリ（ＲＡＭ）装置とすることができる。任意の他の適切なタイプの記憶装置をメモリ３０４として使用することができる。メモリ３０４は、ＣＰＵ３０２がバス３１２を使用することによってアクセスされるコードおよびデータ３０６を含むことができる。メモリ３０４は、オペレーティングシステム３０８およびアプリケーションプログラム３１０をさらに含むことができ、このアプリケーションプログラム３１０は、ＣＰＵ３０２が本明細書で説明する方法を実行できるようにする少なくとも１つのプログラムを含む。例えば、アプリケーションプログラム３１０は、アプリケーション１〜Ｎを含むことができ、アプリケーション１〜Ｎは、本明細書で説明する方法を実行するビデオコーディングアプリケーションをさらに含む。コンピューティングデバイス３００は、例えば、モバイルコンピューティングデバイスとともに使用されるメモリカードであってよい二次記憶装置３１４を備えることもできる。ビデオ通信セッションはかなり多量の情報を含むことがあるので、それらの全体または一部が二次記憶装置３１４に記憶され、処理のために必要に応じてメモリ３０４にロードされる。
【００２３】
コンピューティングデバイス３００は、ディスプレイ３１８などの１つまたは複数の出力デバイスを備えることもできる。ディスプレイ３１８は、一例では、ディスプレイにタッチ入力を感知するように動作可能なタッチ感知要素を組み合わせたタッチ感知ディスプレイであってもよい。ディスプレイ３１８は、バス３１２を介してＣＰＵ３０２に結合され得る。ユーザがコンピューティングデバイス３００をプログラムするかまたは他の方法で使用することを可能にする他の出力デバイスを、ディスプレイ３１８に加えてまたはそれに代えて、設けてもよい。出力装置がディスプレイであるかまたはディスプレイを含む場合、ディスプレイは、液晶ディスプレイ（ＬＣＤ）、ブラウン管（ＣＲＴ）ディスプレイ、または、ＯＬＥＤディスプレイのような発光ダイオード（ＬＥＤ）ディスプレイといった様々な手段で実施することができる。
【００２４】
コンピューティングデバイス３００は、例えば、カメラ、またはコンピューティングデバイス３００を使用しているユーザの画像などの画像を感知することができる現在存在しているかまたは将来開発される任意の他の画像検出装置３２０といった、画像検出装置３２０を含んでもよいし画像検出デバイス３２０と通信してもよい。画像検出装置３２０は、コンピューティングデバイス３００を操作しているユーザを向くように配置され得る。一例では、画像検出装置３２０の位置および光軸は、視野がディスプレイ３１８に直接隣接する領域でかつそこからディスプレイ３１８が見える領域を含むように、構成することができる。
【００２５】
コンピューティングデバイス３００は、マイクロフォン、またはコンピューティングデバイス３００の近くの音を感知することができる現在存在するかまたは今後開発される任意の他のサウンド検出装置等の、サウンド検出装置３２２を含んでもよいしサウンド検出装置３２２と通信してもよい。サウンド検出装置３２２は、コンピューティング装置３００を操作しているユーザを向くように配置され得、ユーザがコンピューティング装置３００を操作している間にユーザによってなされた会話や他の発話といった音声を受信するように構成することができる。
【００２６】
なお、図３は、コンピューティングデバイス３００のＣＰＵ３０２およびメモリ３０４を単一のユニットに統合して示しているが、他の構成を利用することもできる。ＣＰＵ３０２の機能は、直接的に結合される複数のマシンにまたはローカルエリアネットワークまたは他のネットワークを介して結合される複数のマシンに分散させることができる（各マシンは１つまたは複数のプロセッサを有する）。メモリ３０４は、コンピューティングデバイス３００の動作を実行する複数のマシンのネットワークベースのメモリまたはメモリのような複数のマシンにわたって分散させることができる。なお、コンピューティングデバイス３００のバス３１２は、単一のバスとして示されているが、複数のバスから構成することができる。さらに、二次記憶装置３１４は、コンピューティング装置３００の他の構成要素に直接結合されてもよく、またはネットワークを介してアクセス可能であってよく、メモリカードなどの単一の統合ユニットを備えてもよくまたは複数のメモリカードなどの複数のユニットを備えてもよい。したがって、コンピューティングデバイス３００は、多様な構成で実現することができる。
【００２７】
図４は、ビデオストリーム４００をエンコードし、続いてデコードする例の図である。ビデオストリーム４００は、ビデオシーケンス４０２を含む。次のレベルでは、ビデオシーケンス４０２は、多数の隣接するフレーム４０４を含む。なお、隣接するフレーム４０４として３つのフレームが示されているが、ビデオシーケンス４０２は任意の数の隣接するフレーム４０４を含むことができる。隣接するフレーム４０４は、個々のフレーム例えばフレーム４０６へとさらに細分され得る。次のレベルでは、フレーム４０６を一連のセグメントまたは一連のプレーン４０８に分割され得る。複数のセグメント４０８は、例えば、並列処理を可能にする複数のフレームサブセットであってもよい。複数のセグメント４０８は、ビデオデータを別々の色に分離することができる複数のフレームサブセットであってもよい。例えば、カラービデオデータの一フレーム４０６は１つの輝度プレーンと２つのクロミナンスプレーンとを含むことができる。複数のセグメント４０８は異なる解像度でサンプリングされ得る。
【００２８】
フレーム４０６が複数のセグメント４０８に分割されているか否かにかかわらず、そのフレーム４０６は、例えばフレーム４０６内の１６×１６画素に対応するデータを含むことができる、複数のブロック４１０にさらに細分されてよい。複数のブロック４１０は、ピクセルデータの１つまたは複数のプレーン４０８からのデータを含むように構成することもできる。複数のブロック４１０は、４×４ピクセル、８×８ピクセル、１６×８ピクセル、８×１６ピクセル、１６×１６ピクセルまたはそれ以上といった、任意の他の適切なサイズとすることができる。特に注記しない限り、ブロックおよびマクロブロックという用語は、本明細書では互換的に使用される。
【００２９】
図５は、ある実装例に従うエンコーダ５００のブロック図である。エンコーダ５００は、例えばメモリ３０４などのメモリに格納されたコンピュータソフトウェアプログラムを提供するなどによって、上述したように、送信局２０２に実装することができる。そのコンピュータソフトウェアプログラムは、ＣＰＵ３０２のようなプロセッサによって実行されると、送信局２０２に図５で説明した方法でビデオデータをエンコードさせる機械命令を含むことができる。エンコーダ５００は、例えば送信局２０２に含まれる専用のハードウェアとして実装することもできる。１つの特に望ましい実装例では、エンコーダ５００はハードウェアエンコーダである。エンコーダ５００は、ビデオストリーム４００を入力として使用してエンコードまたは圧縮されたビットストリーム５２０を生成する（実線の接続線によって示される）順方向パス内の様々な機能を実行するための以下のステージ、すなわち、イントラ及びインター予測ステージ５０２、変換ステージ５０４、量子化ステージ５０６、およびエントロピーエンコードステージ５０８を有する。エンコーダ５００は、将来のブロックのエンコード用のフレームを再構成するための再構成経路（点線の接続線によって示される）を備えることができる。図５において、エンコーダ５００は、再構成経路内の様々な機能を実行するための以下のステージ、すなわち脱量子化（ｄｅｑｕａｎｔｉｚａｔｉｏｎ）ステージ５１０、逆変換（ｉｎｖｅｒｓｅ  ｔｒａｎｓｆｏｒｍ）ステージ５１２、再構成（ｒｅｃｏｎｓｔｒｕｃｔｉｏｎ）ステージ５１４、およびループフィルタリングステージ５１６を有する。エンコーダ５００の他の構造的変形を使用してビデオストリーム４００をエンコードすることができる。
【００３０】
エンコードのためにビデオストリーム４００が提示されると、各フレーム４０６がブロックの単位で処理される。イントラ及びインター予測ステージ５０２では、各ブロックが、フレーム内予測（イントラ予測とも呼ばれる）またはフレーム間予測（インター予測とも呼ばれる）を使用してエンコードされる。どの場合でも、予測ブロックが形成される。イントラ予測の場合、予測ブロックは、以前にエンコードされ再構成された現フレーム内のサンプルから形成されることができる。インター予測の場合、予測ブロックは、１つまたは複数の以前に構築された基準フレーム内のサンプルから形成されることができる。
【００３１】
次に、依然として図５を参照すると、イントラ及びインター予測ステージ５０２で現在のブロックから予測ブロックが減算されて残差ブロック（残差とも呼ばれる）を生成することができる。変換ステージ５０４では、その残差を、ブロックベース変換を使用する例えば周波数領域における変換係数に変換する。量子化ステージ５０６では、量子化値（ｑｕａｎｔｉｚｅｒ  ｖａｌｕｅ）または量子化レベル（ｑｕａｎｔｉｚａｔｉｏｎ  ｌｅｖｅｌ）を使用して、変換係数を、量子化済み変換係数と呼ばれる離散量子値に変換する。例えば、その変換係数は、量子化値によって除算され切り捨てられてもよい。次いで、量子化済み変換係数は、エントロピーエンコードステージ５０８によってエントロピーエンコードされる。エントロピーエンコードされた係数は、ブロックをデコードするために使用される他の情報、例えば、使用される予測のタイプ、変換タイプ、動きベクトルおよび量子化値を備えることができる他の情報と共に、圧縮ビットストリーム５２０へと出力される。圧縮ビットストリーム５２０は、可変長コーディング（ＶＬＣ）または算術コーディングなどの様々な技術を使用してフォーマットされ得る。圧縮ビットストリーム５２０は、エンコード済みビデオストリームまたはエンコード済みビデオビットストリームとも呼ばれ、これらの用語はここでは互換的に使用される。
【００３２】
図５の再構成経路（点線の接続線によって示される）は、エンコーダ５００およびデコーダ６００（以下に説明する）の両方が圧縮ビットストリーム５２０をデコードするために同じ参照フレームを使用することを保証するために使用され得る。この再構成経路は、以下で詳述するデコードプロセス中に生じる機能と似た機能を実行し、それには脱量子化ステージ５１０で量子化済み変換係数を脱量子化し、逆変換ステージ５１２で脱量子化済み変換係数を逆変換して微分残差ブロック（微分残差とも呼ばれる）を生成することが含まれる。再構成ステージ４１４では、イントラ及びインター予測ステージ５０２で予測された予測ブロックを微分残差に加えて再構成ブロックを作成する。ループフィルタリングステージ５１６は、ブロック化アーチファクトなどの歪みを低減するために再構成ブロックに適用され得る。
【００３３】
エンコーダ５００の他の変形を使用して圧縮ビットストリーム５２０をエンコードしてよい。例えば、非変換ベースのエンコーダは、あるブロックまたはフレームに対して変換ステージ５０４なしで残差信号を直接量子化することができる。別の実装例では、エンコーダは、量子化ステージ５０６及び脱量子化ステージ５１０を単一ステージへと結合させたものを有することができる。
【００３４】
図６は、別の実装例に従うデコーダ６００のブロック図である。デコーダ６００は、例えば、メモリ３０４に格納されたコンピュータソフトウェアプログラムを提供することによって受信局２０６に実装することができる。このコンピュータソフトウェアプログラムは、ＣＰＵ３０２のようなプロセッサによって実行されると受信局２０６に図６で説明した方法でビデオデータをデコードさせる機械命令を含むことができる。デコーダ６００は、例えば、送信局２０２または受信局２０６に含まれるハードウェアで実施することもできる。
【００３５】
デコーダ６００は、上述のエンコーダ５００の再構成経路と同様に、一例では、圧縮ビットストリーム５２０から出力ビデオストリーム６１６を生成するための様々な機能を実行するための以下のステージ、すなわち、エントロピーデコードステージ６０２、脱量子化ステージ６０４、逆変換ステージ６０６、イントラ及びインター予測ステージ６０８、再構成ステージ６１０、ループフィルタリングステージ６１２、およびデブロッキング（ｄｅｂｌｏｃｋｉｎｇ）フィルタリングステージ６１４を備える。圧縮されたビットストリーム５２０をデコードするためにデコーダ６００の他の構造的変形を使用することができる。
【００３６】
デコードのために圧縮ビットストリーム５２０が提示されると、圧縮ビットストリーム５２０内のデータ要素がエントロピーデコードステージ６０２によってデコードされて量子化済み変換係数のセットを生成する。脱量子化ステージ６０４は、（例えば、量子化済み変換係数に量子化値を乗算することによって）量子化済み変換係数を脱量子化し、逆変換ステージ６０６は脱量子化済み変換係数を逆変換して、エンコーダ５００における逆変換ステージ５１２によって作成されるものと同一であり得る微分残差を生成する。圧縮ビットストリーム５２０からデコードされたヘッダ情報を使用すると、デコーダ６００は、イントラ及びインター予測ステージ６０８を使用して、例えばイントラ及びインター予測ステージ５０２でエンコーダ５００において作成されたものと同じ予測ブロックを作成することができる。再構成ステージ６１０では、予測ブロックが微分残差に加えられて再構成ブロックが作成される。ループフィルタリングステージ６１２は、ブロッキングアーチファクトを低減させるために再構成ブロックに適用され得る。再構成ブロックに他のフィルタリングを適用することができる。この例では、デブロックフィルタリングステージ６１４が再構成ブロックに適用されてブロッキング歪を低減し、その結果が出力ビデオストリーム６１６として出力される。出力ビデオストリーム６１６は、デコードされたビデオストリームとも呼ばれ、これらの用語は本明細書では互換的に使用される。圧縮ビットストリーム５２０をデコードするためにデコーダ６００の他の変形を使用することができる。例えば、デコーダ６００は、デブロッキングフィルタリングステージ６１４なしで出力ビデオストリーム６１６を生成し得る。
【００３７】
図７および図８は、それぞれ単一パスエンコードおよび２パスエンコードにおいて一定目標ビットレートを得るための解像度スケーリングを使用するプロセス７００および８００のフローチャート図である。プロセス７００および８００は、ビデオストリームのエンコードを補助するために、コンピューティングデバイス３００などのシステムに実装することができる。プロセス７００および８００は、例えば、送信局２０２または受信局２０６などのコンピューティングデバイスによって実行されるソフトウェアプログラムとして実装することができる。このソフトウェアプログラムは、ＣＰＵ３０２などのプロセッサによって実行されると、コンピュータ装置にプロセス７００またはプロセス８００のうちの一方を実行させる、メモリ３０４などのメモリに格納される機械可読命令を含むことができる。プロセス７００および８００の全体または一部を、ハードウェアを使用して実装することができる。上述のように、いくつかのコンピューティングデバイスは、複数のメモリおよび複数のプロセッサを有してもよく、プロセス７００および８００のそれぞれのステップまたは動作は、異なるプロセッサおよびメモリを使用して分散されてもよい。本明細書で「プロセッサ」および「メモリ」という用語を単数形で使用することは、１つのプロセッサまたは１つのメモリのみを有するコンピューティングデバイスだけでなく、各々が説明したステップの必ずしもすべてでなくてよい一部のステップを実施するのに使用され得る複数のプロセッサまたはメモリを有するデバイスを包含する。
【００３８】
説明を簡単にするために、各プロセス７００および８００は、一連のステップまたは動作として示され説明される。しかし、本開示によるステップおよび動作は、様々な順序でおよび／または同時に行われることができる。さらに、本開示によるステップまたは動作は、ここに提示および記載されていない他のステップまたは動作と共に行うことができる。さらに、開示された主題に従って方法を実施するために、図示された全てのステップまたは動作が必要とされるわけではない。プロセス７００または８００の一方は、入力信号の各フレームに対して繰り返されてもよい。
【００３９】
図７を参照すると、比較的一定の目標ビットレートを得るためにシングルパスエンコードにおける解像度スケーリングを使用するプロセス７００は、動作７０２で、目標ビットレート、初期ＱＰ、最小ＱＰ閾値、および最大ＱＰ閾値のそれぞれの値を設定することによって開始する。これらの値は、ビデオストリームがエンコードされている初期解像度を示すことができる。動作７０４において、エンコーダは、その初期ＱＰを使用してビデオストリームの第１のフレームをエンコードする。動作７０６では、第１のフレームのエンコードが目標ビットレートを満たすフレームビットレートをもたらす場合、動作７０４に戻ってビデオストリームの次のフレームをエンコードするためにエンコーダを準備する。そうでない場合、プロセス７００は、動作７０８のトリガ調整フェーズに進んで、フィルタリングロジックを使用してビデオデータに振動（ｏｓｃｉｌｌａｔｉｏｎｓ）が存在するかどうかを判定する。動作７０８において振動がない場合、動作７０４に戻ってビデオストリームの次のフレームをエンコードするためにエンコーダを準備する。そうでない場合、プロセス７００は、動作７１０で開始される調整フェーズに進む。
【００４０】
動作７１０において、目標ビットレートを満たさないフレームビットレートが、オーバーシュートに起因したものなのかまたはアンダーシュートに起因したものなのかを判定する。例えばビデオストリームがエンコードされている解像度に対してＱＰが低すぎるので、フレームビットレートが目標ビットレートを超える（オーバーシュートする）ところで、オーバーシュートが発生する。例えばビデオストリームがエンコードされている解像度に対してＱＰが高すぎるので、フレームビットレートが目標ビットレートより下にある（アンダーシュートする）ところでアンダーシュートが生じる。オーバーシュートまたはアンダーシュートが判定されたかどうかに関わらず、ビデオストリームの品質を改善するために、ビデオストリームの１つまたは複数のエンコードパラメータがこれ以降で調整される。エンコーディングパラメータは、調整されるとビデオストリームの品質または視覚的表現に影響を及ぼす任意の値を含むことができる。ある実装例では、エンコードパラメータには、限定ではないが、ＱＰ、ビデオ解像度、最大ＱＰ閾値、および最小ＱＰ閾値が含まれる。エンコーダによって以下に行われる調整は、ビットレート問題がオーバーシュートまたはアンダーシュートに起因するものであるかどうかに依存する。
【００４１】
動作７１０で、ビットレートオーバーシュートがあると判定された場合、プロセス７００は動作７１２に進み、ＱＰに現在設定されている値（動作７１０が１回だけ実行された場合には動作７０２で設定された初期ＱＰであり得る）が最大ＱＰ閾値に現在設定されている値に等しい。そうでない場合、ＱＰは動作７１４で上昇され、動作７０４に戻り、上昇後のＱＰを使用してビデオストリームの次のフレームをエンコードするためにエンコーダを準備する。しかしながら、ＱＰの値が最大ＱＰ閾値の値と等しい場合、そのＱＰはビデオストリームの解像度に対する最大有効値に達したので、そのＱＰをさらに上昇させることはできない。そこで、動作７１６において、プロセス７００はビデオストリームの解像度を低下させる、これには最小ＱＰ閾値および最大ＱＰ閾値の値をリセットすることが含まれる。動作７１６は、解像度の低下に基づいてＱＰの値も低下させる。次に、動作７１６は、動作７０４に戻ることによって、新しい解像度およびＱＰ、最小ＱＰ閾値、および最大ＱＰ閾値を使用して、次のフレームをエンコードするためのエンコーダを準備する。
【００４２】
一方、動作７１０でビットレートアンダーシュートがあると判定した場合、プロセス７００は動作７１８に進む。そこでは、（動作７１０が１回だけ実行されたときの動作７０２で設定された初期ＱＰであり得る）ＱＰに現在設定されている値が最小ＱＰ閾値に現在設定されている値に等しいかどうかが判定される。等しくなければ、ＱＰは動作７２０で低下され、動作７０４に戻り、低下後のＱＰを使用してビデオストリームの次のフレームをエンコードするためにエンコーダを準備する。しかしながら、ＱＰの値が最小ＱＰ閾値の値と等しい場合、そのＱＰは、ビデオストリームの解像度に対する最小有効値に達したので、そのＱＰをさらに低下させることはできない。そこで、動作７２２において、プロセス７００はビデオストリームの解像度を上昇させ、これには最小ＱＰ閾値および最大ＱＰ閾値の値をリセットすることが含まれる。動作７２２は解像度の上昇に基づいてＱＰの値も上昇させる。動作７２２は、動作７０４に戻ることによって、新しい解像度およびＱＰ、最小ＱＰ閾値、および最大ＱＰ閾値を使用して、次のフレームをエンコードするためのエンコーダを準備する。
【００４３】
より高い解像度のソースが利用可能であれば、エンコード用ビットレートが一貫して目標ビットレートをアンダーシュートするか、または目標ビットレートを特定の閾値回数を超えてアンダーシュートするところのビデオ解像度を上昇させることが別の選択肢である。例えば、ユーザが３６０ｐの解像度でビデオを見ることを選択したが、当該ユーザの帯域幅ではより高い解像度で視聴できる場合、ビデオ解像度は、そのユーザの接続においてそのユーザがビデオをストリーミングできる最大解像度まで上昇させてよい。
【００４４】
２パスエンコードでは、ビデオストリームのフレームをエンコードするための第１のパスは、一定の量子化パラメータに基づいてエンコードするのに、どのフレームが困難すぎるかまたは容易すぎるかを、例えば、ビデオストリームの第１のフレームに対応する入力フレームをエンコードすることによって生成される複数のビットを検出することによって、判定することを備える。入力フレームが困難すぎるかまたは容易すぎることを生成した複数のビットが示す場合、エンコーダは、対応するフレームをエンコードする第２のパス上でそのビデオストリームの解像度を調整することができる。このようにして、２パスエンコードは、第１のパスで潜在的なインスタンスを識別している間に、第２のパスでビデオストリームを効果的にエンコードするために必要な調整を行うことによって、ほとんどのアンダーシュートおよびオーバーシュートを防止することができる。アンダーシュートの量またはオーバーシュートの量は、解像度が１次元当たりに調整される必要がある度合を示すことができる。
【００４５】
ここで図８を参照すると、比較的一定の目標ビットレートを得るための２パスエンコードにおける解像度スケーリングを使用するためのプロセス８００が、目標ビットレートの初期値およびＱＰの初期値を設定することによって動作８０２で開始する。動作８０４では、入力フレームを受信し、設定された目標ビットレートおよびＱＰ値を使用して入力フレームをエンコードする。動作８０６で入力フレームのエンコードに応答して複数のビットが生成される。この複数のビットは、入力フレームがエンコードされるビットレートを示す。生成されたビットのサイズに応じて、プロセス８００は、ビデオ解像度のようなビデオストリームのエンコードパラメータを調整するための調整フェーズに進むことができる。ある実装例では、調整フェーズに進むべきかどうかの判定は、フレームビットレートが、その範囲内でＱＰを変更しても望ましいビデオ品質（例えば、解像度に対して目に見えるコーディングアーチファクトのないビデオストリーミング）をもたらす特定の範囲の外にあるかどうかに基づいてなされることができる。例えば、フレームビットレートが目標ビットレートの１００〜２００ｋｂｐｓ内にある場合、動作８０８は、調整フェーズに進まないと判定することができる。調整が行われない場合、プロセス８００は動作８１６に進み、そこでは、エンコードされたフレームが、以前に設定されたＱＰ値に基づいて生成され、その後、エンコードされたフレームは、出力ビデオストリームの一部として動作８１８で送信される。ある実装例では、動作８０８における判定は、フラグを使用してコード化することができる。
【００４６】
動作８０８においてビデオ解像度に対する調整が必要であると判定された場合、プロセス８００は動作８１０に進み、そこでは、調整が必要になったのが、入力フレームエンコード用ビットレートが目標ビットレートのアンダーシュートに起因するのかまたはオーバーシュートに起因するかどうかを判定する。オーバーシュートの場合、動作８１２で、例えばビデオストリームの解像度を低下させることによって１つ以上のエンコードパラメータが調整される。アンダーシュートの場合、動作８１４で、例えばビデオストリームの解像度を上昇させることによって１つ以上のエンコードパラメータが調整される。ある実装例では、ビデオ解像度に対する調整は、ビットレート偏差百分率の重み付けされた逆数の平方根、例えばＳｎｅｗ＝√（１／（α×Ｂｄｅｖ））を用いて判定されてよく、ここで、Ｓｎｅｗは、解像度の新しいスケーリング／ディメンション比を表し、αは重み付けパラメータを表し、Ｂｄｅｖはビットレート範囲からのずれを表す。例えば、入力フレームのエンコードが２０％未満のオーバーシュートをもたらし、重み付けパラメータが１に設定される場合、１２８０×７２０の解像度を有するビデオストリームの入力フレームは、Ｓｎｅｗ＝√（１／（１×１．２））＝０．９１３とスケーリングされ、その結果、１１６８×６５７の新しいストリーミング解像度が得られる。同様に、入力フレームをエンコードすると５０パーセントの深刻なアンダーシュートが発生する場合、スケーリング比は、Ｓｎｅｗ＝√（１／（１×０．５））＝１．４１４となる。このようにして、解像度ビデオストリームは調整されて１８１０×１０１８でエンコードされる。重みパラメータαを１より大きく調整すると、新しいフレームビットレートは許容範囲の中間値（例えば、１００〜２００ｋｂｐｓの範囲に対して１５０ｋｂｐｓ）に近い値にエンコードされることになる。
【００４７】
ビデオ解像度に対する調整が行われた後、プロセス８００は動作８１６に進み、そこでは入力フレームに対応するエンコード済みフレームがビデオストリームの第２パスの一部としてエンコードされる。エンコード済みフレームは、その後、出力ビデオストリームの一部として、動作８１８で送信される。
【００４８】
解像度スケーリングは、上記の利点以外のさらなる利点を提供し得る。例えば、解像度スケーリングは、確立されたモーション探索ウィンドウ領域でのインター予測に対して許容可能な動きベクトルを見つけられなかったエンコーダに対して性能を改善することができる。これは、典型的には、イントラ予測の過度使用に起因する不十分な圧縮をもたらすこととなる。このような状況でビデオストリームを小スケール化すること（ｄｏｗｎｓｃａｌｉｎｇ）によってビットレートは低下する。というのは、エンコードするピクセルが少なく、ビデオストリーム内の絶対的動き量も少なくなるからである。これにより、検索ウィンドウの利用性が向上することがある。
【００４９】
ある実装例では、動作８１０でのアンダーシュートの判定に応答して、動作８１４は、モーション探索領域のサイズを減少させることを備え、これは、ビデオ解像度の低下に代えてまたは加えて行うこともできる。同様に、動作８１０でのオーバーシュートの判定に応答して、動作８１２は、ビデオ解像度を上昇させる代わりにまたはそれに加えて、モーション探索領域のサイズを大きくすることを備える。ある実装例では、モーション探索領域のサイズの変更は、入力フレームの特定の色成分に対して、例えばその輝度および／またはクロミナンス画素値に対してのみ行われる。
【００５０】
ある実装例では、例えば、動作８０４で入力フレームをエンコードすることに応答して、モーション探索領域に対する１つまたは複数のエンコーダ限界を識別することができる。それらエンコーダ限界は、例えば、ビデオストリームが、所与の解像度で高速移動場面を適切に表現するエンコーダ５００の能力を超える動き量を含む高速移動場面を含むといった、エンコーダ５００によって見つけられた動きベクトルが閾値を超える例を示すことができる。一実装例では、動きベクトルが閾値を超えることをエンコーダ限界が示すことに応答して、ビデオストリームの解像度を低下させる。
【００５１】
一実装例では、モーション探索領域のサイズは変更対象とならない。例えば、エンコーダ５００がハードウェアエンコーダとして実施される場合、モーション探索領域をＮ×Ｍのサイズに静的に設定してよい。ここで、ＮおよびＭは同じ値であってもよいしまたは異なる値であってもよい。従って、モーション探索領域は、ビデオストリームの解像度がＮ×Ｍより大きい場合にのみ、入力フレームの一部をカバーすることができる。モーション探索領域の中点位置を、例えば、カバーされる入力フレームの初期部分の初期基準位置（例えば、コードされるべき現在のブロックまたはスライスの中点位置）に対して定義することができる。しかし、一実装例では、例えば、モーション探索領域が入力フレームの大部分をカバーするようにすることによってエンコーダ５００がモーション探索領域内の動きを検出する能力を向上させるために、ビデオストリームの解像度を低下することができる。このように解像度を低下させる判定は（例えば、動作８０８でエンコードパラメータを調整するかどうかを判定する一部として）、上述したように、例えばモーション探索領域に対する閾値や他のエンコーダ限界に基づいて行うことができる。解像度を下げると、モーション探索領域によって結果的にカバーされる入力フレームの部分の基準位置に基づいて、モーション探索領域の中点位置がリセットされることになる。同様に、ある実装例では、ビデオストリームの解像度は、閾値または他のエンコーダ限界に基づいて上昇されてもよい。例えば、解像度がモーション探索領域のサイズよりも小さい場合（例えば、モーション探索領域が入力フレーム全体より多くをカバーする場合）、エンコーダ５００は、ビデオストリームの解像度をモーション探索領域のサイズに等しくなるまで上昇させることができる。したがって、モーション探索領域の中点位置は、適用可能な場合、入力フレームの基準位置にあるかまたはそのまま維持される。本明細書で使用する「中点」という用語は、対応する寸法に対する中心位置を指す。
【００５２】
モーション探索領域に対する１つ以上のエンコーダ限界を図８の２パスエンコードに関して本明細書で説明したが、それらエンコーダ限界は、図７に関して説明したような単一パスエンコードの文脈で適用してよい。例えば、ビデオストリームの第１のフレームのエンコードパラメータを調整することは、（例えば、動作７０８におけるトリガ調整判定の一部として）モーション探索領域に対するエンコーダ限界を特定すること、およびエンコーダ限界に基づいて解像度を低下させる（または上昇させる）ことを含んでよい。ある実装例では、このように解像度を変更することにより、モーション探索領域の中点位置が、モーション探索領域によって結果的にカバーされる第１のフレームの部分の基準位置に対してリセットされる結果となる。
【００５３】
エンコーダ５００がハードウェアエンコーダである別の実装例では、モーション探索のパラメータは、モーション探索領域の中点位置がエンコードされているフレームのブロックと共に変化することを除いて、ブロック−ブロック間およびフレーム−フレーム間で同じに維持される。したがって、解像度が変更されると、解像度の変化によって多かれ少なかれ動きがキャプチャされる。例えば、解像度を変更することにより、フレーム内のあるブロックに対してより良好なマッチングが得られ、したがって、速い動きがある場合に、低い解像度が同じサーチエリア内でより多くの動きをキャプチャするので、残差はより少なくなる。
【００５４】
プロセス７００および８００の初期動作で設定される目標ビットレートは、変動の影響を受ける可変ビットレートであってもよい。この変動は、ビデオをストリーミングするユーザの接続速度またはネットワーク接続タイプの変化によって生じる可能性がある。例えば、ユーザが最初にＷｉＦｉ接続を介してビデオをストリーミングし、それが利用できなくなる場合、そのビデオストリーミングはＬＴＥ接続に切換えることがある。各ネットワーク接続タイプが、所与の解像度で所与のビデオストリームを最適に見るために最適化されたそれ自身の目標ビットレートを示すことがあるという点で、可変目標ビットレート用の単一パスエンコード及び２パスエンコード用の開示されたレート制御プロセスの実装例は望ましい。
【００５５】
上記のエンコードおよびデコードの態様は、エンコードおよびデコード技術のいくつかの例を示す。しかしながら、エンコードおよびデコードは、それらの用語が特許請求の範囲で使用されるように、圧縮、解凍、変換、または他の任意の処理またはデータの変更を意味し得ることを理解されたい。
【００５６】
「例」という語は、本明細書では、例、事例、または説明として役立つことを意味するために使用される。本明細書において「例」と記載された任意の態様または設計は、必ずしも他の態様または設計に対して好ましいまたは有利であると解釈されるべきではない。むしろ、「例」という言葉の使用は、技術液思想を具体的な方法で示すことを意図している。本出願で使用される場合、用語「または」は排他的な「または」ではなく包括的な「または」を意味するものとする。すなわち、他に明記されていない限り、または文脈から明らかでない限り、「ＸはＡまたはＢを含む」とは、自然の包括的置換のいずれかを意味することを意図する。つまり、ＸがＡを含む；ＸがＢを含む；またはＸがＡおよびＢの両方を含むとあれば、「ＸはＡまたはＢを含む」は、上記のどの場合でも満足する。さらに、本出願および添付の特許請求の範囲で使用される冠詞「ａ」および「ａｎ」は、他に明記されない限り、または単数形に向けられる文脈から明らかでない限り、「１つ以上」を意味すると一般に解釈されるべきである。さらに、「ある実装例」または「一実装例」という用語の使用は、そのように記載されていない限り、同じ実施形態または実装例を意味するものではない。
【００５７】
送信局２０２および／または受信局２０６（およびその上に記憶され、および／またはそれによって実行される、エンコーダ５００およびデコーダ６００を備えるアルゴリズム、方法、命令など）の実装例は、ハードウェア、ソフトウェア、またはそれらの任意の組合せを含む。ハードウェアは、例えば、コンピュータ、ＩＰ（ｉｎｔｅｌｌｅｃｔｕａｌ  ｐｒｏｐｅｒｔｙ）コア、特定用途向け集積回路（ＡＳＩＣ）、プログラマブル論理アレイ、光プロセッサ、プログラマブル論理コントローラ、マイクロコード、マイクロコントローラ、サーバ、マイクロプロセッサ、デジタル信号プロセッサ、または他の適切な回路を備えることができる。特許請求の範囲において、「プロセッサ」という用語は、前述のハードウェアのいずれかを単独でまたは組み合わせて備えるものとして理解されるべきである。用語「信号」および「データ」は互換的に使用される。さらに、送信局２０２および受信局２０６の部分は、必ずしも同じ方法で実施される必要はない。
【００５８】
さらに、一態様では、例えば、送信局２０２または受信局２０６は、実行されると、本明細書で説明した方法、アルゴリズムおよび／または命令のうちのいずれかを実行するコンピュータプログラムを備えた汎用コンピュータまたは汎用プロセッサを使用して実装され得る。加えてまたは代えて、例えば、本明細書で説明した方法、アルゴリズム、または命令のいずれかを実行するための他のハードウェアを備えることができる専用コンピュータ／プロセッサを利用することができる。
【００５９】
送信局２０２および受信局２０６は、例えば、ビデオ会議システムのコンピュータ上に実装することができる。あるいは、送信局２０２はサーバ上に実装することができ、受信局２０６は、ハンドヘルド通信デバイスなどのサーバとは別のデバイス上に実装することができる。この場合、送信局２０２は、エンコーダ５００を使用してコンテンツをエンコード済みビデオ信号へとエンコードし、そのエンコード済みビデオ信号を通信装置に送信し得る。次に、その通信装置は、デコーダ６００を使用して、エンコード済みビデオ信号をデコードし得る。あるいは、その通信装置は、その通信装置上にローカルに格納されたコンテンツ、例えば、送信局２０２によって送信されていないコンテンツをデコードし得る。他の適切な送信および受信実施方式が利用可能である。例えば、受信局２０６は、ポータブル通信デバイスではなく、概して据え置きのパーソナルコンピュータであってもよく、および／またはエンコーダ５００を備える装置がデコーダ６００を備えてもよい。
【００６０】
さらに、本発明の実装の全部または一部は、例えば、有形のコンピュータ使用可能媒体またはコンピュータ可読媒体からアクセス可能なコンピュータプログラム製品の形態を取ることができる。コンピュータ使用可能媒体またはコンピュータ可読媒体は、例えば、プロセッサによって使用されるプログラムを有形に格納、記憶、通信、または移送できる任意の装置であり得る。当該媒体は、例えば、電子媒体、磁気媒体、光学媒体、電磁気媒体、または半導体デバイスであり得る。他の適切な媒体も利用可能である。
【００６１】
上述した実施形態、実施形態及び態様は、本発明の理解を容易にするために記載されており、本発明を限定するものではない。それどころか、本発明は、添付の特許請求の範囲内に含まれる様々な改変および同等の構成を包含することを意図しており、その範囲は、法律で許容されるようなすべての改変および同等の構造を包含するように最も広い解釈が与えられる。
【図１Ａ】
2019501554.tif 000003
【図１Ｂ】
2019501554.tif 000004
【図２】
2019501554.tif 000005
【図３】
2019501554.tif 000006
【図４】
2019501554.tif 000007
【図５】
2019501554.tif 000008
【図６】
2019501554.tif 000009
【図７】
2019501554.tif 000010
【図８】
2019501554.tif 000011
【国際調査報告】
2019501554.tif 000012
2019501554.tif 000013