首页 / 专利库 / 软件 / 无损压缩 / Method and system for compressing video data

Method and system for compressing video data

阅读:929发布:2021-09-25

专利汇可以提供Method and system for compressing video data专利检索,专利查询,专利分析的服务。并且PURPOSE: To provide a method for compressing video movie data up to a regulat ed target size by using intra-frame and inter-frame compression schemata. CONSTITUTION: Intra-frame compression compresses a movie frame by mutually comparing adjacent pixels in the same frame and inter-frame compression compresses adjacent frames by mutually comparing pixels positioned by a similar shape in the adjacent frames. Under a condition that lossless compression is not sufficient, a threshold or an allowable difference is used for attaining more compression. The dispersion of colors between pixels is less than an allowable difference, two pixels are coded by using a single color value. The allowable difference is controlled to attain compression in a target range. When an image of unacceptable quality is generated, raw data are divided into halves and respective data parts are individually compressed. The succeeding frame of a 1st frame is generally compressed by using the combination of intra-frame compression and inter-frame compression.,下面是Method and system for compressing video data专利的具体信息内容。

【特許請求の範囲】
  • 【請求項1】 複数の画素によって形成されているビデオデータを圧縮するための方法において、 (a) 複数の画素群を形成する段階; (b) 各画素群について1つの特性値を決定する段階; (c) 許容差を特定する段階; (d) 画素群の特性値間のばらつきを決定する段階; (e) 決定されたばらつきが許容差内にある場合、画素群を表わす規定の特性値を特定し、、各画素群の特性値を規定の特性値に設定する段階、及び (f) 同じ規定の特性値をもつ連続した画素群の数を計数し、ビデオデータの圧縮バーションの形で計数した数と規定の特性値を記憶する段階 を含む方法。
  • 【請求項2】 − ビデオデータの圧縮バージョンのためのターゲット範囲を特定する段階;及び − ビデオデータの圧縮バージョンがターゲット範囲内にくるまで、許容差を反復的に調整する段階、 を含む、請求項1に記載の方法。
  • 【請求項3】 許容差を反復的に調整する段階には、 − ビデオデータの圧縮バージョンのサイズを決定する段階及び − 決定されたサイズがターゲット範囲内にない場合、
    許容差を調整し、調整された許容差を用いて段階(e)
    −(f)を反復する段階、 を反復的に実行することが含まれている、請求項2に記載の方法。
  • 【請求項4】 許容差を調整する段階には、 − 許容差範囲を識別すること、 − 識別された許容差範囲から新しい許容差値を選択すること;及び − 新たに選択された許容差に等しい限界を有するものとして許容できる許容差の範囲を再度定義づけすること が含まれている、請求項3に記載の方法:
  • 【請求項5】 新しい許容差を選択する段階には; − 予め定められた値を、以前に使用した許容差のうちの1つに付加すること、が含まれる、請求項4に記載の方法。
  • 【請求項6】予め定められた値が、許容差の各反復的調整毎に増大させられる、請求項5に記載の方法。
  • 【請求項7】 複数の画素で形成されている複数の生ビデオフレームにより形成されている1つのビデオをマッピングするための方法において、 (a) 各生データフレームの画素から複数の画素群を形成する段階; (b) 各画素群について1つの特性値を決定する段階; (c) 許容差を特定する段階; (d) 画素群の特性値の間のばらつきを決定する段階;及び (e) 決定されたばらつきが許容差内にある場合、画素群を表わす規定の特性値を特定し、各画素群の特性値を規定の特性値に設定する段階、 を含む方法。
  • 【請求項8】 (f) 許容差範囲を特定する段階; (g) マッピングされたビデオのための受諾できる解像度の範囲を特定する段階; (h) マッピングされたビデオの解像度を決定する段階;及び (i) 決定された解像度が受諾できる解像度の範囲内に無い場合、規定の許容差範囲内から新しい許容差を選択し、選択された新しい許容差に等しい末端限界をもつものとして許容差範囲を再度定義づけする段階、及び (j) マッピングされたビデオが受諾できる解像度の範囲内にくるまで、段階(e)、(h)及び(i)を反復的にくり返す段階、 を含む、請求項7に記載の方法。
  • 【請求項9】 新しい許容差が許容差範囲のほぼ中間点から選択される、請求項8に記載の方法。
  • 【請求項10】 新しい許容差が、前に使用された許容差の1つに対して予め定められた値を付加することによって選択される、請求項8に記載の方法。
  • 【請求項11】 予め定められた値が許容差の各反復的調整毎に増大させられる、請求項10に記載の方法。
  • 【請求項12】 複数の画素により形成される複数の生データビデオフレームにより形成されている1つのビデオを圧縮するための方法において、 (a) 各生データフレームの画素から複数の画素群を形成する段階、 (b) 各画素群について1つの特性値を決定する段階; (c) 許容差を特定する段階; (d) 画素群の特性値の間のばらつきを決定する段階; (e) 決定されたばらつきが許容差内にある場合、画素群を表わす規定の特性値を特定し、各画素群の特性値を規定の特性値に設定する段階、及び (f) 同じ規定の特性値をもつ連続した画素群の数を計数し、圧縮されたデータビデオフレーム内に計数した数と規定の特性値を記憶する段階、 を含む方法。
  • 【請求項13】 − 圧縮されたデータビデオフレームのためのターゲット範囲を特定する段階;及び、 − 圧縮されたデータビデオフレームがターゲット範囲内にくるまで許容差を反復的に調整する段階、 を含む、請求項12に記載の方法。
  • 【請求項14】 許容差を反復的に調整する段階には、 − 圧縮されたデータビデオフレームのサイズを決定する段階、及び − 決定されたサイズがターゲット範囲内に無い場合、
    許容差を調整し、調整された許容差を用いて段階(e)
    −(f)を反復する段階、 を反復的に実行することが含まれている、請求項13に記載の方法。
  • 【請求項15】 許容差を反復的に調整する段階には、 − 前に決定された有効許容差を識別する段階; − 有効許容差を用いて段階(e)−(f)を反復し、
    圧縮されたデータビデオフレームのサイズを決定する段階; − 有効許容差を用いて決定されたサイズがターゲット範囲内に無い場合、最大許容差を特定し、最大許容差を用いて段階(e)−(f)を反復し、圧縮データビデオフレームのサイズを決定する段階、及び − 最大許容差を用いて決定されたサイズがターゲット範囲内に無い場合、発見的に決定された許容差を特定し、この発見的に決定された許容差を用いて段階(e)
    −(f)を反復し、圧縮データビデオフレームのサイズを決定する段階、 が含まれている、請求項13に記載の方法。
  • 【請求項16】 − 最大値を特定する段階;及び、 − 許容差が最大値より大きい場合、生データビデオを複数の生データ部分に分割する段階; − 生データフレームとして各生データ部分を用いて段階(a)−(f)を反復する段階;及び − 分割生データフレームに続く生データフレームのうちの1つに生データ部分のうちの1つを置換する段階、 を含む、請求項13に記載の方法。
  • 【請求項17】 複数の画素により形成されている複数の生データビデオフレームによって形成されているビデオを圧縮するための方法において、 (a) 各生データフレームの画素から複数の画素群を形成する段階、 (b) 各画素群について1つの特性値を決定する段階; (c) フレーム間許容差を特定する段階; (d) 複数の相応するフレーム間画素について、フレーム間画素群の特性値間のフレーム間ばらつきを決定する段階; (e) 決定されたフレーム間ばらつきがフレーム間許容差内にある連続したフレーム間画素群の数を計数する段階、及び (f) 圧縮データビデオフレーム内で連続するフレーム間画素群の計数された数を表わすデータをコード化する段階、 を含む方法。
  • 【請求項18】 デルタをコード化する段階には、 − 受諾できるデルタ値の範囲を選択する段階;及び − 連続するフレーム間画素群の計数された値がデルタ値の範囲内にある場合、デルタを計数された数としてコード化する段階、 が含まれている、請求項17に記載の方法。
  • 【請求項19】 − 連続するフレーム間画素群の計数された数がデルタ値の範囲内にない場合、エスケープシーケンス、即ち計数された数及び付加的な位置づけ情報を用いてデルタをコード化する段階が含まれる、請求項18に記載の方法。
  • 【請求項20】 特性値がカラー値であり、画素群の各々が単一の画素によって形成されている、請求項17に記載の方法。
  • 【請求項21】 − 決定されたフレーム間ばらつきがフレーム間許容差(than不要?)内にない場合、フレーム内許容差を特定し、複数のフレーム内画素群についてフレーム内画素群の特性値間のフレーム内ばらつきを決定する段階; − 決定されたフレーム内ばらつきがフレーム内許容差内にある場合、各フレーム内画素群を表わすべく規定の特性値を特定し、各フレーム内画素群の特性値を規定の特性値に設定する段階; − 同じ規定の特性値を有する連続したフレーム内群の数を計数する段階;及び − 計数された数及び規定の特性値を圧縮データビデオフレーム内に記憶する段階 を含む、請求項17に記載の方法。
  • 【請求項22】 −圧縮データビデオフレームのためのターゲット範囲を特定する段階; − 圧縮データビデオフレームのサイズを決定する段階;及び − 決定されたサイズがターゲット範囲内にない場合、
    フレーム間許容差を調整し、調整されたフレーム間許容差を用いて段階(c)−(f)を反復する段階、 が含まれている、請求項21に記載の方法。
  • 【請求項23】 フレーム間許容差を調整する段階には; − フレーム間許容差の範囲を特定すること、 − フレーム間許容差の特定された範囲から新しいフレーム間許容差値を選択すること、及び − 新しい選択されたフレーム間許容差に等しい限界をもつものとしてフレーム間許容差の範囲を再度定義づけすること、 が含まれている、請求項21に記載の方法。
  • 【請求項24】 − 最大値を特定する段階;及び − 許容差のうち少なくとも1つが最大値よりも大きい場合、複数の生データ部分に生データフレームを分割し、生データフレームとして各生データ部分を用いて段階(a)−(f)を反復する段階 を含む、請求項21に記載の方法。
  • 【請求項25】 − 圧縮データビデオフレームのためのターゲット範囲を特定する段階; − 圧縮データビデオフレームのサイズを決定する段階;及び − 決定されたサイズがターゲット範囲内に無い場合、
    フレーム間又はフレーム内許容差のうち少なくとも1つを調整し、この調整された許容差を用いて段階(e)−
    (f)を反復する段階; が含まれている、請求項21に記載の方法。
  • 【請求項26】 − 圧縮データビデオフレームについてターゲット範囲を特定する段階; − 圧縮データビデオフレームのサイズを決定する段階; − 決定されたサイズがターゲット範囲内に無い場合、
    許容差のうち少なくとも1つを調整し、調整された許容差を用いて段階(e)−(f)を反復する段階; − 最大値を特定する段階;及び − 許容差のうちの少なくとも1つが最大値よりも大きい場合、生データフレームを複数の生データ部分に分割し、生データフレームとして生データ部分の各々を用いて段階(a)−(f)を反復する段階、 が含まれている、請求項21に記載の方法。
  • 【請求項27】 − 周期的キーフレーム間隔を特定する段階; − 周期的キーフレーム間隔の終結時点でキーフレームとして生データフレームを指定する段階;及び − キーフレームの複数のフレーム内画素群について、
    フレーム内画素群の間の特性値間のばらつきを決定し、
    決定されたばらつきがフレーム内許容差内にある場合フレーム内画素群を表わすべく特性値を特定し、各フレーム内画素群の特性値を規定の特性値に設定し、同じ規定の特性値をもつ連続したフレーム内画素群の数を計数し、圧縮データビデオフレーム内に、計数された数及び規定の特性値を記憶する段階、 を含む、請求項21に記載の方法。
  • 【請求項28】 第1のデータ群内の同一に位置づけされたデータ単位に類似したものである第2のデータ群内の連続したデータ単位の数(原文of抜け)を表わすデルタをコード化する方法において、 − 受諾できるデルタ値の範囲を選択する段階; − 連続するデータ単位の数を決定する段階;及び − 決定された連続するデータ単位の数がデルタ値の範囲内にある場合、連続するデータ単位の決定された数としてデータをコード化する段階、 を含む方法。
  • 【請求項29】 − 決定された連続するデータ単位の数がデルタ値の範囲内に無い場合、エスケープシーケンス、即ち計数された数及び付加的な位置づけ情報を用いてデルタをコード化する段階、 を含む、請求項28に記載の方法。
  • 【請求項30】 − 方向的オフセットを決定する段階、及び − 単一の値すなわち方向的オフセットの絶対値を表わす値としてデルタをコード化する段階、 を含む、データをコード化するための方法。
  • 【請求項31】 デルタが最大デルタ値を有し、 − 第1のランレングス値を定義づけするためランの長さの値に対し最大デルタ値を付加する段階; − 第1のランレングス値をコード化する段階; − 第2のランレングス値を定義づけするため特性値を決定する段階;及び − 第2のランレングス値をコード化する段階、 を含む、請求項30に記載の方法。
  • 【請求項32】 各々1つの特性値及び1つの比例絶対値で形成された複数のランレングスデータ群及び各々可能なかぎり最大のデルタ値をもつ複数のデルタによって形成されている複数の圧縮データ群から、ビデオデータの圧縮解除バージョンを作り出す方法において、 − 圧縮データ群を検索する段階; − 圧縮データ群がランレングス表示である場合、この表示の特性値を決定し、比例絶対値から可能なかぎり最大のデルタ値を減算することによってこの表示のランレングス値を決定し、ランレングス値に等しい数について、ビデオデータの圧縮解除バージョンの一定数のデータ記憶場所の中に特性値を書き込む段階;及び − 圧縮データ群がデルタ単位である場合、デルタ単位の値を決定しデルタ単位の値に等しい数のデータ単位(原文of抜け)だけ位置づけポインタを移動させる段階、 を含む方法。
  • 【請求項33】 ビデオデータの圧縮されたバージョンからビデオデータの圧縮解除されたバージョンを作り出すための方法において; − ビデオデータの圧縮されたバージョンから圧縮データ群を検索する段階; − 受諾できるデルタ値の範囲を識別する段階; − 圧縮データ群の絶対値を決定する段階;及び − 圧縮データ群の絶対値が受諾可能なデルタ値の範囲内にある場合、圧縮デルタ群の絶対値に等しいデータ値の数だけ位置づけポインタを移動させる段階、 を含む方法。
  • 说明书全文

    【発明の詳細な説明】

    【産業上の利用分野】本発明は、データ圧縮及び圧縮解除に関し、特に、圧縮画像のサイズの特定の目標の範囲にビデオデータを符号化するための方法及びシステムに関する。

    【従来の技術】マルチメディアのパーソナルコンピュータ(MPC)の到来は、家庭用娯楽産業に変革をもたらすと思える。 一般に、MPCは、例えばインテル386
    マイクロプロセッサといった強なマイクロプロセッサ、VGAモニタ、サウンドカード、少なくとも2MバイトのRAM及びCD−ROMドライプを含む。 アプリケーションプログラムがMPCの潜在力を完全に実現するためには、これらの構成要素をその能力いっぱいまで使用しなければならない。 システムの構成要素を最大に利用しながら、MPCでのビデオ映画を楽しみたいという希望は、本発明の発端となった。 ビデオ映画を見てきれいであるためには、15フレーム毎秒の速度で作動すればよい。 しかし、標準のCD−ROMドライブは、1
    50Kバイト毎抄のデータを提供することができるのみである。 従って、MPCで表示するに適する映画を作るためには、圧縮方法は、映画の各フレームを約10Kバイトに圧縮する必要がある:〔(150Kバイト/秒)
    /(15フレーム/抄)=10KバイトB/フレーム〕。 しかし、フレームをこのサイズに一貫性をもって圧縮可能とする方法を開発することは−−情報の実質的な量を失わないで−−複雑な手順となる。 この手順は、
    二つの基本的な理由で複雑となる。 まず、元の生データのサイズは、映画から映画で大幅に異なり、例えば、3
    20X240ピクセルのビデオ映画のフレームは、17
    5Kバイトの生データとなるが、160X120ピクセルのビデオ映画のフレームは、25Kバイトの生データに過ぎない。 第二に、同じ映画でさえも、フレームのいくつかは、他のフレームよりも圧縮しにくい。 例えば、
    明るい色の草原を描くフレームは、薄暗い通りを描くフレームより、必然的により細かくなる。 従って、圧縮方法は、画像の品質をかなり落とさなくては、草原のフレームを10Kバイトに符号化することはできない。

    【発明が解決しようとする課題】従来技術は、MPCでの再生用に、ビデオ映画を符号化するための固定圧縮率を使用している。 しかし、この方法は、深刻な欠陥を有す。 即ち、固定圧縮率による方法は、ビデオデータを恒常的に過剰圧縮を起こすかあるいは圧縮不足を起こす。
    例えば、生データを生データの元のサイズの20%に圧縮する圧縮法は、25Kバイトの生データフレームを5
    Kバイトに圧縮する。 従って、従来技術の圧縮法は、不要に5Kバイトのデータを破壊してしまう可能性がある。 その結果、圧縮データは、拡大されると、劣化した品質の画像を生成する。 一方、同じ圧縮方法は、175
    Kバイトのビデオデータを35Kバイトに圧縮する。 この場合、得られた圧縮データは、MPCで使用するには大きすぎる。 更に、従来技術の圧縮方法のあるものは、
    非標準フォーマットで圧縮データを符号化している。 これら従来の圧縮方法は、殆どのMPCのアプリケーションで、非標準の圧縮データをアプリケーションがデータをMPC上へ表示する前に既知のフォーマットへ変換しなければならないので問題を伴う。 従って、再生用のビデオデータやその他のデータをあるデータ速度で満足に圧縮することを可能とする方法とシステムに対する必要性があった。

    【課題を解決するための手段】フレーム内及びフレーム間圧縮技術を使用して、ビデオデータのフレームを特定の目標サイズへ圧縮する方法を開示する。 フレーム内圧縮を使用する場合は、この方法は、一フレームのビデオデータをそのフレームに含まれるそのデータに対してのみ圧縮する。 一方、フレーム間圧縮を使用する場合は、
    本発明は、現在圧縮過程にあるフレームの直前のビデオデータのフレームに対して一フレームのビデオデータを圧縮する。 より具体的には、フレーム内圧縮に付いては、圧縮方法は、ビデオデータのフレームを構成するピクセルから複数のピクセルグループを形成することで始まる。 次に、本発明は、例えば色、強度等といったのグループの特性に基づいて二つのグループの間の変化値を計算する。 計算後、その変化値を特定のフレーム内許容値と比較する。 変化値がフレーム内許容値に等しいかまたはそれより小さい場合は、本発明は両グループの特徴を表す一つの値を指定する。 この計算と比較は、この方法でフレームの全てのグループを調べるまで継続される。 本発明によれば、同じ特徴値を有す連続したピクセルグループの数を計数することによりそのフレームを圧縮する。 本方法によれば、計数を完了すると計数値及び特徴値をビデオフレームの圧縮バージョンとして記憶する。 フレーム間圧縮も同様な方法で動作する。 この場合は、しかし、二つの連続したフレームの類似した状況のピクセルグループを比較する。 本発明では、指定したフレーム間許容値内にある連続したフレーム間ピクセルグループの数が計数される。 次に、連続したフレーム間ピクセルグループのこの数を示すデルタを符号化する。 更に、本圧縮法は、フレーム内及びフレーム間の両方の組み合わせを使用する。 使用する圧縮法にかかわらず、本方法は、得られた圧縮ビデオフレームと指定目標範囲と比較している。 圧縮ビデオフレームが指定目標範囲にない場合は、本方法では、許容値の一つまたは両方を調整し、データを既に述べた方法で再度圧縮する。 更に、本方法により、ビデオ画像の質を大きく損なわないでは、
    指定目標範囲に圧縮できない場合は、生データのビデオフレームを半分に分割し、各半分を別々に圧縮する。

    【実施例】本発明は、目標範囲内にビデオデータを圧縮するために、ランレングス符号化及び反復許容値を使用する。 本発明は、基本的に、類似の特徴、例えば、類似の色を有すピクセルを統合することによってビデオデータを圧縮する。 まず第一に、発明はピクセル対をなすピクセル間の差に基づく変化値を計算する。 第二に、この変化値を許容値と比較する。 変化値が許容値より小さいか同じの場合は、本発明では、両ピクセルは、単一の特徴値で記述されて、例えば、二つの連続した非常に薄い青色のピクセルの隣に二つの連続した薄い青色のピクセルがある場合、これらは四つの連続した薄い青色のピクセルとして記述される。 本実施例では、フレーム内圧縮かまたはフレーム間圧縮を利用してビデオ映画のフレームの圧縮を行う。 フレーム内圧縮を用いる場合は、本発明はその特定のフレーム内に含まれるデータのみを使用してフレームを圧縮する。 一方、フレーム間圧縮を用いる場合は、本発明は、直前のフレームに対してフレームを圧縮する。 例えば、本発明は、ビデオ映画のフレーム(n+1)を、フレーム(n)から実質的に変化しているピクセルのみを記憶することにより圧縮する。 映画の殆どのフレームは、動きの錯覚を作り出すために、前後のフレームに類似しているので、フレーム間圧縮は、極めて効果的な手法である。 再生では、フレーム(n+
    1)のフレーム間符号化データは、フレーム(n)に直接に重なって表示されるので、動きの錯覚は、維持される。 しかし、本発明が必要なものは、フレーム(n+
    1)に更新されねばならないフレーム(n)のピクセルに素早くアクセスする手段である。 本発明は、この条件を、フレームの圧縮バージョンに於いて、デルタとして知られる、特別のバイトグループを符号化することによって満足している。 基本的に、デルタは、フレーム(n
    +1)を生成するために更新を必要とするフレーム(n)のピクセルに対して、ピクセルを着色するの使用される器具であるブラシを移動させる。 本発明は、多くのやり方でもってデルタを符号化する。 一つのデルタ符号化法は、デルタ符号化のために4バイトグループを使用する方法がある。 この方法は、(1)2バイトのエスケープシーケンスと、(2)平オフセットと、(3)
    垂直オフセットとをフレームの圧縮バージョンに記憶する。 2バイトエスケープシーケンスは、符号化されたバイトをデルタとして認識するのに使用される。 水平及び垂直オフセットは、ピクセル更新前に、圧縮解除ルーチンがブラシを移動させるべきピクセルの数を単に記述しているのみである。 図9を参照(水平及び垂直オフセットを使用したデルタ符号化処理を説明している)。 この符号化技術は、ブラシを適当なピクセルヘ移動させるには有効であるが、場合によってはメモリの最も効果的な使用法とならない場合がある。 圧縮ビデオデータで発生するデルタの大部分は、ゼロの垂直オフセットを有す。
    更に、殆どのデルタの水平オフセットは、相対的に短く、即ち16ピクセルより短い。 このような場合は、本発明はデルタを1バイトとして符号化し、このバイトは、水平オフセットの大きさを示す。 図14を参照(単バイトを使用するデルタ符号化処理を説明している)。
    図14のデルタ符号化法は、従って、図9のデルタ符号化法より75%少ないバイトを用いる。 更に、圧縮ビデオデータでデルタは頻繁に起こるので、各デルタで得られる75%の節約は、圧縮ビデオデータの全体サイズでは、20%の節約に相当する。 しかし、本発明がどのデルタ符号化法を適用するかにより、フレーム間圧縮は、
    貴重な圧縮ツールとなる。 更に、フレーム内圧縮と組み合わせてフレーム間圧縮を使用することにより本発明は、極めて高解像度の圧縮フレームを形成することが可能である。 例えば、フレーム(n+1)の70%が、実質的にフレーム(n)から変化していないとすると、本発明はビデオフレームの残り30%を記憶する約10K
    のメモリを有す。 従って、フレーム内圧縮及び小さい許容値を用いることにより、本発明は非常な細部に付きデータの残り30%を記憶することが可能となる。 ある場合は、フレーム間圧縮を使用して得られる細部のデータ量にかかわらず、本発明はフレーム内圧縮を使用してフレームを符号化する。 このフレームをキーフレームと呼ばれる。 キーフレームは、ビデオ映画のランダムフレームに対するユーザのアクセス性を高める。 例えば、ユーザが、ビデオ映画で約10分間ほど経過した時点で発生したフレームにアクセスを希望すると、希望フレームは、約9,000の先行フレームがある。 本発明により、フレーム間圧縮を使用して第一フレームを除く全てを符号化する場合、フレーム9,000へアクセスすることは多大な処理時間を必要とし、即ち、本発明は、希望フレームを表示する前に9,000フレームを符号化し、表示する必要がある。 この問題を回避するために、
    本発明は、映画全体を通じて一定間隔をおいて、例えば、30秒毎にキーフレームを挿入する。 従って、映画に10分より若干少ない時間経過した時点で発生するフレームを表示するには、本発明は、映画の中の9−1/
    2分経過した時点で圧縮されたキーフレームを直ちに指示する。 (1)キーフレーム及び(2)キーフレームと希望フレームとの間を圧縮解除することによって、本発明は視聴者の指定フレームを素早く表示する。 全体フレームが一旦圧縮されると、圧縮データのサイズと目標範囲が比較される。 圧縮データが目標範囲の上限より大きい場合は、本発明は(1)許容値を増加させるか、または(2)ビデオデータを小さく分割する。 本発明は、増加させた許容値か、または低減したデータ量を使用してデータを再圧縮する。 本発明は、データの圧縮バージョンが目標範囲となるまでこの再圧縮処理を繰り返す。 一方、圧縮データが目標範囲より小さい場合は、本発明は、許容値を低減し、フレームを再圧縮する。 この方法で、本発明は、指定された目標範囲の最適情報量を含む圧縮ビデオデータを生成する。 図示されているように、
    本発明は、ビデオ映画を圧縮し、圧縮解除するための方法及びシステムで実施されている。 しかし、本発明による圧縮及び圧縮解除は、他の種類のデータを圧縮するのにも使用可能である。 一般に、ビデオ映画は、複数のビデオフレームで形成されている。 また、各フレームはというと、複数のピクセルで形成されている。 一般に、各ピクセルは、関連した特徴値、例えば色、強度他を有す。 更に、ピクセルのグループは、そのグレースケール及び主色を有す。 本発明は、個別ピクセルまたはピクセルグループの特徴値を比較することによって圧縮することを想定する。 はっきりさせるために、図1から図14
    の説明では個別ピクセルの色値を用いて圧縮及び圧縮解除が実行される。 殆どの着色法では、各ピクセルの色は、多数の色成分により表現される。 色成分のよく使用される組み合わせは、RGBセットであり、Rは赤成分、Gは緑成分、Bは青成分を表す。 一つのピクセルの成分を表すために下付き文字2を使用し、他のピクセルの成分を表すために下付き数字1を使用して、本発明の実施例は、以下の式を使用してピクセル対の変化値を計算する。 変化値=(R −R +(G −G +(B
    −B これより、本発明は、以下の式を使用して圧縮を目標として二つのピクセルが類似した色であるかどうかを決定する。 変化値≦許容値 変化値が以上の式を満足した場合は、本発明は両ピクセルは単一の色値として参照される。 一方、変化値が許容値より大きい場合は、本発明は、ピクセル対の各ピクセルを二つの異なった色値を使用して参照する。 説明の実施例では、各フレームまたは複数のフレームの各ラインでの全ての連続したピクセル対につき上述の比較法を用いることによってビデオデータを圧縮する。 更に、本実施例では、フレーム間圧縮及びフレーム内圧縮で異なって許容値を使用する。 これらの許容値は、フレーム間許容値及びフレーム内許容値としてそれぞれ呼称される。
    これらの二つの許容値を以下に詳述する。 許容値を調整するか、または(2)フレームの生データを分割するかによって、本発明は、指定された目標範囲内に生ビデオデータを圧縮する。 圧縮法ルーチン ビデオ映画を圧縮するルーチンのフローチャートは、図1に示される。 ブロック100がビデオ映画のフレームを生データとして受信すると圧縮処理が開始する。 ブロック105では、ルーチンが、ルーチンによりまだ圧縮されていない映画の少なくとも一フレームがあるかどうか判断する。 生データフレームが存在すると、ルーチンは、ブロック110のサブルーチン圧縮フレームを呼び出す。 このようにして、ブロック110は、生データフレームの圧縮バージョンを生成する。 この圧縮処理は、
    図2を参照して詳細に説明される。 ブロック120は、
    ブロック110のサブルーチンにより戻された圧縮フレームのサイズを判断する。 圧縮フレームが、目標の範囲にない場合は、ルーチンは、制御をブロック130へ移管する。 ブロック130は、フレームが分割されるべきかどうかを決定する。 本実施例では、ブロック130
    は、フレーム間許容値を最大許容値と比較することによって、この決定を実行する。 フレーム間許容値が最大許容値より大きければ、ブロック130は、処理制御をブロック150へ移管する。 ブロック150は、図6の分割フレームルーチンを使用して、元の生データフレームを二つの生データフレームへ分割し、制御をブロック1
    10へ移管する。 一方、フレーム間許容値が、最大許容値より小さい場合は、ブロック130は、制御をブロック140へ移管する。 ブロック140は、修正バイナリ探索法を使用してフレーム間許容値を増加または低減している。 一般に、バイナリ探索は、可能な値のより狭い範囲の大体の中心点からのテスト値を繰り返し選択することによって理想値を素早く見いだす。 探索法がテスト値を選択すると、探索法は、その選択値が理想値より大きいが小さいかを決定する。 選択値が理想値より大きい場合は、探索法は、第二テスト値を選択する。 探索法は、範囲の元の最小値と先に選択された値により定義された、範囲の中心点から第二のテスト値を選択する。 逆に、選択値が理想値より小さい場合は、探索法は、先に選択された値と、範囲の元の最大値により定義される範囲の中心点から第二のテスト値を選択する。 値の範囲をより狭め中心点の値を繰り返し選択することによって、
    バイナリ探索法は、素早く理想値を求める。 しかし、本発明は、バイナリ探索法をビデオデータ圧縮に理想的に適切となるように適合化させる。 本発明は、目標範囲内のビデオフレームの圧縮バージョンを生成する許容値を求めるために、修正バイナリ探索法を使用する。 本発明による第一の修正は、本方法が選択する第一のテスト値は、許容値の全体の許容範囲の中心点にはない。 例えば、RGB色値を使用して、許容値の許容できる範囲は、ゼロから195,075(この値を含む)までである。 (255 +255 +255 )。 従って、第一の選択許容値は、ゼロと195,075の中心である9
    7,537.50としてもよいかもしれない。 理論的には、これは有効である。 しかし、ビデオデータに付いては、本発明者等は、許容値2,000及び250がそれぞれ理想フレーム間及びフレーム内許容値での理想的な第一推測値であることをヒューリスティックに求めている。 または、許容値1,024及び128がうまく使用できた。 バイナリ探索への第二の修正は、最終推測値が理想許容値より小さかった場合の本発明による次の推測許容値の決定である。 厳密なバイナリ探索理論は、以下の関係を使用して次の推測値を決定する: 次の推測値=(先行の推測値+許される最大特性値)/
    2 しかし、許される最大許容値195,075は、ビデオデータの質を非常に劣化させるので、実際には使用されることは稀である。 従って、次の推測値を求めるのに変数として許される最大許容値を使用すると、ビデオデータを許容できない程度までに劣化させる許容値を生成させる。 しかし、実験によれば、次の関係は、真のバイナリ探索を十分に近似することが分かった。 次のフレーム間許容推測値=先行のフレーム間 許容推測値+2 *(2048) 上式に於いて、値“n”は、始めは0に設定され、後続フレーム間許容推測値の各後続の計算毎に増分される。
    例えば、この式を用いて、先行フレーム間許容推測値へ加える第一の三つの数が2048、4096、8192
    である。 上述の関係を用いて、本発明は目標範囲内にビデオデータを圧縮するために使用できるフレーム間許容値を素早く決定することができる。 このようにして、本発明により、新規のフレーム間許容値が計算されると、
    次に新規のフレーム内許容値が計算される。 本発明によれば、有効なフレーム間許容値及びフレーム内許容値の間の、ヒューリスティックに求めた関係を使用して、新規のフレーム内許容値が計算される: フレーム内許容値=(フレーム間許容値)/8 従って、第一のフレーム内許容推測値は、第一のフレーム間許容推測値を8で除したものである。 ブロック14
    0は、この修正バイナリ探索法を使用して許容値を調整する。 ブロック140が許容値を調整すると、制御は、
    ブロック110に返されて、そこでフレームは再圧縮される。 ブロック110、120、130、140及び1
    50からなるループは、ブロック120が圧縮データが目標範囲に納まるまで継続される。 その時点で、ルーチンは、制御をブロック105へ戻し、ブロック105
    は、他の生データフレームのチェックをする。 このようにして、本発明は、目標範囲内に映画の全フレームを圧縮する。 ルーチンが全フレームを圧縮し終わると、制御をブロック180へ移管する。 ブロック180は、発明の処理を呼びだしたアプリケーションに戻る。 圧縮フレーム・ルーチン 図1のブロック110に依ってコールされる、圧縮フレーム・ルーチンのフロー・ダイアグラムが図2に図示されている。 ルーチンは、ルーチンが相互フレームまたは内部フレーム圧縮を呼び出すかどうかについて決定する、シリーズのテストを実施することに依って、プロセスを開始する。 まず、ブロック200は、ルーチンがムービーの最初のフレームを圧縮しているかどうかについて確認するテストを行う。 このケースで、相互フレームは不可能である。 相互フレーム圧縮は2つのフレームを要求し、ここで、発明は使用できる1つのフレームしか搭載していない。 ブロック210は、ルーチンがフレームをキー・フレームとして圧縮するかどうかについて確認するテストを行う。 例えば、コール・ルーチンが発明はキー・フレームを150フレームごとに1回生成することを指定している場合、ルーチンは、カウンターに1
    50の値をロードして、カウンターの値を全てフレーム圧縮の後に減少する。 ルーチンがカウンターをゼロまで下げると、それは、次のフレームがキー・フレームとして圧縮されるべきであることを指示するフラグをセットする。 次に、ルーチンはカウンターに150の圧縮を再びロードする。 このようにして、発明は、キー・フレームを頻度ごとに、または、コール・プログラムに依って指定される、キー・フレーム間隔で生成する。 最終的に、ブロック230は、相互フレーム圧縮が使用できる唯一のタイプの圧縮であるかどうかについて確認するテストを実施する、例えば、圧縮方法をコールするアプリケーションが任意の相互フレーム圧縮を使用しないことを指定している場合があるかも知れない−−これは、圧縮されるデータが、相互フレーム圧縮を再び分類せすに、ターゲット・レンジにルーチンで入ることができるケースであるかも知れないからである。 ブロック20
    0、210、または230で行われる任意のテストが肯定的である場合、ルーチンはコントロールをブロック2
    50にパスする。 ブロック250は、次に説明される、
    サブルーチン内部フレーム圧縮をコールする。 図5(内部フレーム圧縮ルーチンのフロー・ダイアグラム)を参照すること。 一方、ブロック200、210、230で行われるテストの全てが否定的である場合、ルーチンは、次に説明されるサブルーチン相互フレーム圧縮をコールするブロック240にコントロールを進める。 図3
    と4(相互フレーム圧縮ルーチンのフロー・ダイアグラム)を参照すること。 ブロック240またはブロック2
    50がフレームを圧縮した後に、ルーチンは、図1のブロック110にリターンするブロック260にコントロールを進める。 相互フレーム圧縮ルーチン 相互フレーム圧縮ルーチンのフロー・チャートが図3と4に図示されている。 図2のブロック240(相互フレーム圧縮ルーチンのコール)を参照すること。 前述のように、相互フレーム圧縮は、ビデオ・データのフレームを直前のフレームに相応して、例えば、今のフレーム、
    フレームn+1を前のフレーム、フレームnに相応して圧縮することに依ってエンコードする。 相互フレーム圧縮ルーチンは、2つの許容値を用いて、すなわち、相互フレーム許容値と内部フレーム許容値を用いて、フレームn+1をフレームnに相応して圧縮する。 発明は、相互フレーム許容値を用いて、2つの隣接するフレームと類似の位置に設定されているピクセルが、圧縮に対して全く同じと見なされるカラーに十分に似ているかどうかについて決定する。 同様に、発明は、内部フレーム許容値を用いて、同じフレームの2つの連続するピクセルが、圧縮に対して全く同じと見なされるカラーに十分に似ているかどうかについて決定する。 相互フレーム圧縮ルーチンは、今のフレームの圧縮を図3のブロック30
    0から始める。 ブロック300は、今のフレームにビデオ・データの圧縮されていないラインが残っているかどうかについて決定する。 ルーチンが今のフレームの全てのラインを圧縮すると、ブロック300は、コントロールを、図2のブロック260にリターンするブロック3
    05に送る。 一方、ビデオ・データの少なくとも1つの圧縮されていないラインが今のフレームに残っている場合、ブロック300はコントロールをブロック307に送る。 順に、ブロック307は、前のフレーム・ピクセル・ポインタの内容を、前のフレームの次の圧縮されていないラインの最初のピクセルのアドレスにセットする。 同様に、ブロック310は、今のピクセル・ポインタの内容を、今のフレームの次の圧縮されていないラインの最初のピクセルのアドレスにセットする。 次に、ブロック320はデルタ・オフセットをゼロに初期設定する。 ここで、ブロック330は、今と前のフレーム・ピクセル・ポインタの内容から参照されるピクセルが、有効な相互フレーム・ピクセル・ペアを形成しているかどうかについて、すなわち、ピクセルの列の末端が到達されたかどうかについて確認するテストを行う。 ペアが有効な時に、ルーチンは、ブロック340のペアの変動値を、例えば、変動値=(R2−R1)2+(G2−G
    1)2+(B2−B1)2の関係式を用いて計算する。
    ルーチンは、次に、変動値と相互フレーム許容値を比較する。 相互フレーム許容値が決定された変動値より大きいか等しい場合、ブロック350はコントロールをブロック352に送る。 順に、ブロック352はデルタ・オフセットを更新する、例えば、ブロック352は水平オフセットを増加する(このプロセスは次の例で更に詳細に説明される)。 ブロック352がデルタ・オフセットを更新した後に、それはコントロールをブロック354
    に送る。 ブロック354は、前のフレーム・ピクセル・
    ポインタの内容を増加して、コントロールをブロック3
    56に送る。 ブロック356は、今のフレーム・ピクセル・ポインタの内容を増加して、コントロールをブロック330に送る。 ブロック330は、再び、別の有効な相互フレーム・ピクセル・ペアのテストを行う。 一方、
    ブロック350が変動値が相互フレーム許容値より大きいと決定すると、ブロック350は、コントロールをブロック360に送る。 ブロック360はデルタ・オフセットの値を調べる。 水平と垂直の両方のデルタ・オフセットがゼロに等しい場合、ブロック360は、コントロールを図4のブロック407に送る。 一方、少なくとも1つのデルタ・オフセットがゼロでない時に、図3のブロック360は、コントロールをブロック365に送る。 (1)垂直デルタ・オフセットがゼロに等しくて、
    なおかつ、(2)水平オフセットが指定されたデルタの最小値より小さい場合、ブロック365はコントロールをブロック380に送る。 順に、ブロック380は、絶対モードのデルタ・オフセットに依ってカバーされるピクセルをエンコードする。 図9(絶対モードについて説明している)を参照すること。 本質的に、絶対モードは、ピクセルのカラー・インデックスの前の2バイト・
    エスケープ・シーケンスを用いて、ピクセルをエンコードする。 図10(カラー・ルックアップ・テーブル)を参照すること。 絶対モードで、2バイト・エスケープ・
    シーケンスの第1バイトはゼロになる。 第2バイトは絶対エンコード・ピクセルの数を示している。 これらの2
    つのバイトの次に、各々絶対エンコード・ピクセルは、
    ピクセルのカラーを示すインデックスに依って表される。 図10(カラー・ルックアップ・テーブル)を参照すること。 例えば、図9と10を見ると、3つのピクセルは、各々同じRGBカラー値−−(235,20,2
    0)を備えていて、次のバイト・グループ〔00 03
    40 40 40〕から表される。 前述のように、第1
    バイト(00)はエスケープコードである。 第2バイト(03)は、3つのピクセルのカラー値を示す、3つのバイトが、この2バイト・エスケープ・シーケンスに準じていることを示している。 次の3つのバイト(40,
    40,40)はピクセルのカラー・インデックスを説明している。 図10(カラー・ルックアップ・テーブル)
    を参照すること、この手順を用いて、図3のブロック3
    80は、(1)垂直デルタ・オフセットがゼロに等しくて且つ(2)水平オフセットが指定されたデルタの最小値より小さい場合に、ピクセルをエンコードする。 一方、(1)垂直デルタ・オフセットがゼロでなく、なおかつ、(2)水平オフセットが指定されたデルタの最小値より大きい場合、ブロック365はコントロールをブロック370に送る。 水平オフセットは、適正エンコーディングのために指定されたデルタの最小値についてテストされる。 この方法は、2つのバイトを用いて、絶対エンコードのためにエスケープ・シーケンスをエンコードする(図9を参照)、すなわち、デルタをエンコードするために1つまたは4つのバイトを使用する。 図9と14を参照すること。 従って、小さいジャンプのデルタをエンコードすることは、コスト経済的でない。 この非効率的な例として、デルタを2つだけのピクセルのジャンプのためにエンコードする効果について考えてみる。
    このようなエンコーディングは4バイトまでのコートを要すると思われる、すなわち、2バイト・デルタ・エスケープ・シーケンスと絶対エンコードを再開する2バイトである。 この例を図示するために、デルタ・エンコーディングは、40のカラー・インデックスをもつ3つのピクセルに依って何れかの側に置かれる44のカラー・
    インデックスをもつ2つのピクセルの上にジャンプすると想定してみる。 図9のエンコーディング技術を用いると、デルタをこの状態でエンコードするために、14バイト、すなわち、〔00 03 40 40 40〕
    〔00 02 0200〕〔00 03 40 40
    40〕が必要になる。 明確にするために区分けされる、
    第1バイト・グループは、各々が40のカラー・インデックスをもつ、3つのピクセルの絶対エンコードになる。 第2バイト・グループは、2の水平オフセットとゼロの垂直オフセットをもつデルタになる。 図9を参照すること。 最後のバイト・グループは、各々が40のカラー・インデックスをもつ、3つのピクセルの別の絶対エンコードになる。 代わりに、純粋に水平のデルタのためにシングル・バイト・エンコーディングを用いる、図1
    4のエンコーディング技術は、更に効果的であるが、まだ11バイト、すなわち、〔00 03 40 40
    40〕〔02〕〔00 03 40 40 40〕を依然として必要とする。 このエンコーディングの場合、第1と第3のバイト・グループは前述のグループと同じである。 中間のバイト・グループ、シングル・バイト・デルタは、図9の方法に対して3バイト節約できる。 この節約は、しかし、デルタのエンコードを正当化しない。
    デルタをエンコードしないので、発明は、図9の方法に関して4バイト且つ図14の方法に関して1バイト節約できる。 このシーケンスのストレートな絶対エンコードは10バイトしか要求しない、すなわち〔00 08
    40 40 40 44 44 40 40 40〕である。 前述の例から指摘された理由のために、発明の今の実施態様は、長さで4ピクセルより小さい水平ジャンプに対してデルタをエンコードしない。 しかし、図3のブロック370は、図9または図14で定める手順に基づいて、デルタの最小値より大きいジャンプに対して、
    デルタをエンコードしない。 ルーチンがピクセル・インフォーメーションをデルタすると、図3のブロック37
    0またはブロック380に依って、ルーチンは、コントロールを図4のブロック407にパスする。 前述のように、全てのデルタ・オフセットがゼロの時に、ブロック360は、コントロールを図4のブロック407に直接移す。 ブロック407はラン変数の長さを1に初期設定する。 ルーチンは、ラン変数の長さを用いて、ビデオ・
    データの連続するピクセルの数をカウントするが、そこでは、そのカラーは内部フレーム許容値より大きくならない。 次に、ブロック410は、ルーチンが内部フレーム圧縮を用いてフレームを圧縮するかどうかについて決定する。 内部フレーム圧縮が有効な時に、ルーチンはコントロールをブロック420にパスする。 ブロック42
    0は、圧縮の決定を、ラン変数の長さの今の値とラインに残っている圧縮されていないピクセルの数に基づいて行う。 ランの長さの最小値は、絶対モードと逆に、ランの長さでピクセルのストリングを効果的にエンコードできるかどうかについて、ルーチンが決定するために用いるスレショルド値である。 ランの長さの最小値より小さいか等しい値の場合、絶対モード・エンコーディングからランの長さのエンコーディングに向けてブレークすることは、コスト経済的でない。 従って、小さいランの長さは前述の絶対値モード方法を用いてエンコードされる。 図9と14(絶対モード・エンコーディングについて説明している)と前述のデルタの最小値の説明(同じ効率性)を参照すること。 代わりに、ランの長さの最小値より大きいランの長さの場合、ラン変数の長さに依って表されるピクセルをランの長さのエンコーディングとしてエンコードすると、コスト経済的になる。 図4のブロック420が(1)ラインに残っているピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より小さいか等しい或いは(2)ラインに残っているピクセルの数がゼロに等しい場合、ルーチンは、コントロールをブロック465に送る。 ブロック465はラン変数の長さの大きさを評価する。 ラン変数の長さがランの長さの最小値より大きいか等しい場合、ブロック465は、ピクセルをランの長さのエンコーディングとしてエンコードするブロック468にコントロールをパスする。 図9と14(ランの長さのエンコーディングについて説明している)を参照すること。 ブロック468
    は、このランの長さを状態の数でエンコードする。 ランの長さをエンコードする1つの方法が図9に図示されている。 この方法の場合、2つのバイトがランの長さのエンコーディングを意味するために用いられている。 1〜
    255の範囲のプラスの値をもつ、第1バイトは、ランの長さの大きさを意味している。 0〜255の範囲のプラスの値をもつ、第2バイトは、ピクセルのカラー・インデックスを意味している。 図10(カラー・ルックアップ・テーブル)を参照すること。 別にランの長さをエンコードする技術が図14に図示されている。 図14の技術は、2つのバイトがランの長さを意味しているところが図9の技術と似ている。 第2の技術の場合、しかし、第1バイトは15〜255だけの範囲しかもっていない。 この範囲の制限は、前述のように、数値1−14
    が水平デルタをエンコードするために確保されているので必要になる。 図14の方法を用いると、ランの長さの大きさは14をランの長さのエンコーディングの第1バイトから減算して求められる。 ランの長さのエンコーディングの第2バイトは、図9を用いて既に説明された同様の状態でピクセルのカラー・インデックスを意味している。 図解のために、ラン変数の長さが5の値をもち且つ今のフレームのピクセル・ポインタが(255,0,
    0)のRGB値をもつピクセルを表していると想定してみる。 図10のカラー・ルックアップ・テーブルに従って、これらのRGB値は43のカラー・インデックスに依って表される。 図10(カラー・ルックアップ・テーブル)を参照すること。 従って、図9のエンコーディング方法は、ランの長さをバイト・グループ〔05 4
    3〕としてエンコードする。 すなわち、第1バイト(0
    5)はランの長さの大きさであり、第2バイト(43)
    はピクセルのカラー・インデックスになる。 同様に、図14のエンコーディング方法は、ランの長さをバイト・
    グループ〔19 43〕としてエンコードする。 すなわち、第1バイト(19)はランの長さの大きさを(実際のランの長さの大きさは14をこの値から減算して求められる)意味し、第2バイト(43)はピクセルのカラー・インデックスになる。 図10(カラー・ルックアップ・テーブル)を参照すること、これらの2つの技術の中の1つを用いて、ブロック468はランの長さのエンコーディングを作成する。 逆に、ラン変数の長さがランの長さの最小値より小さい時に、ブロック465はコントロールをブロック469にパスする。 ブロック469
    は、絶対モード・エンコーディングを用いて、ピクセル・インフォーメーションを記号化する。 図9と14(絶対モード・エンコーディングについて説明している)を参照すること。 ルーチンがピクセル・インフォーメーションをエンコードすると、図4のブロック468または469を経由して、ルーチンは、コントロールを図3のブロック300に戻す。 一方、ブロック420は(1)
    ラインに残っている圧縮されていないピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より大きくて且つ(2)ラインに残っている圧縮されていないピクセルの数がゼロと等しくないと決定すると、ブロック420はコントロールをブロック425にパスする。 ブロック425は、変動値=(R2−R1)
    2+(G2−G1)2+(B2−B1)2の関係式を用いて、次に内部フレームピクセル・ペアの変動値を計算する。 内部フレーム許容値が計算された変動値より大きいか等しい時に、ブロック430は、コントロールをブロック455にパスする。 ブロック455は、ラン変数の長さを増加して、コントロールをブロック420にリターンする。 ブロック420,425,455から形成されるプロセスは、(a)ブロック430が内部フレーム・ピクセル・ペアの変動値が内部フレーム許容値に入っていないと決定するまで、または(b)ブロック42
    0が(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より小さいか等しい或いは(2)ラインに残っている圧縮されていないピクセルの数がゼロに等しいと決定するまで、継続する。 ブロック430が内部フレーム許容値より大きい変動値を見いだすと、ルーチンはコントロールをブロック435にパスする。 ブロック435は、次に、指定されたランの長さの最小値に相応するラン変数の長さの値を調べる。 ラン変数の長さが指定されたランの長さの最小値より小さい時に、ルーチンはコントロールをブロック436にパスする。 順に、ブロック436は、絶対モードのピクセルを、前述の方式でエンコードする。 図9と14(絶対モード・エンコーディングについて説明している)を参照すること。 代わりに、ラン変数の長さが指定されたランの長さの最小値より大きいか等しい時に、ルーチンはコントロールをブロック437にパスする。 次に、ブロック437は、ピクセルをランの長さのエンコーディング・バイト・グループとして(図9の方法または図14の方法を用いて)
    エンコードする。 ブロック436またはブロック437
    が関連するピクセル・インフォーメーションをビデオ・
    データの圧縮されたバージョンでエンコードすると、ルーチンはコントロールをブロック438に送る。 ブロック438は(1)ラン変数の長さをゼロにセットして(2)コントロールをブロック440に送る。 ブロック440は、前のフレームのピクセル・ポインタに搭載されているアドレスを、ランの変数の長さをそのアドレスに加えて更新する。 次に、ブロック440は、今のフレームのピクセル・ポインタを同じ形式で更新するブロック445にコントロールをパスする。 ルーチンはコントロールを図3のブロック320に送る。 ここで、ブロック320は、相互フレーム圧縮プロセスを、デルタ・オフセットをゼロにリセットして再開する。 ブロック33
    0が全ての内部フレーム・ピクセル・ペアを比較したと判断すると、それはコントロールをブロック331に送る。 順に、ブロック331,332,333は、ピクセル・インフォーメーションを前述のブロック365,3
    70,380と同じ方式でエンコードする方法を決定する。 ルーチンがピクセル・インフォーメーションをエンコードすると、ルーチンはコントロールを図3のブロック300に戻す。 次に、ブロック305は図2のブロック260にリターンする。 内部フレーム圧縮 内部フレーム圧縮ルーチンのフロー・チャートが図5に図示されている。 ブロック250の図2(図5のルーチンをコールする)を参照すること。 内部フレーム圧縮ルーチンはブロック500のプロセスから始める。 ブロック500は、フレームにビデオ・データの任意に残っている圧縮されていないラインがあるかどうかについて決定する。 ルーチンがフレームの全てのラインを圧縮すると、ブロック500はコントロールをブロック502に送る。 次に、ブロック502は、コントロールを図2のブロック260にリターンする。 一方、図5のブロック500は、圧縮されていないビデオ・データの少なくとも1つの残っているラインがあると決定すると、ブロック500は、コントロールをブロック505に送る。 ブロック505で、ルーチンは、今のピクセル・ポインタの内容を、圧縮されていない生のビデオ・データの次のラインの最初のピクセルのアドレスにセットする。 次に、ルーチンは、ラン変数の長さを1に初期設定する、
    ブロック510にコントロールを送る。 前述のように、
    ルーチンは、ラン変数の長さを用いて、内部フレーム許容値に入っている連続するピクセルの数を記録する。 次に、ブロック515は、(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さをプラスした値がランの長さの最小値より大きいかどうかについて、なおかつ、(2)ラインに残っている圧縮されていないピクセルの数がゼロでないかどうかについて決定する。 ブロック515の両方のテストが肯定的である場合に、ブロック515はコントロールをブロック520に送る。 順に、ブロック520は、(1)今のピクセル・
    ポインタのアドレスと(2)今のピクセル・ポインタにラン変数の長さの値をプラスしたアドレスから表されるピクセルのペア変動値を計算する。 次に、ブロック52
    5は変動値を内部フレーム許容値に基づいて評価する。
    内部フレーム許容値が変動値より大きいか等しい時に、
    ブロック525は、コントロールをブロック540に送る。 ブロック540は、ラン変数の長さを増加して、コントロールをブロック515に戻す。 ブロック515,
    520,525,540は、(1)ブロック525が、
    変動値が内部フレーム許容値より大きいピクセルのペアを見いだすか、または(2)ブロック525が(a)ラインに残っている圧縮されていないピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より小さいか等しい或いは(b)ラインに残っている圧縮されていないピクセルの数がゼロに等しいと決定するまで、内部フレーム・ピクセルのペアの比較を続ける。
    ルーチンが、変動値が内部フレーム許容値より大きい、
    ピクセルのペア発見すると、ブロック525はコントロールをブロック530に送る。 ブロック530は、ラン変数の長さが指定されたランの長さの最小値より大きいか等しい値をもつかどうかについて決定する。 前述のように、ランの長さの最小値は、絶対モードと逆のランの長さとしてピクセルのストリングをエンコードできるかどうかについて決定するために、ルーチンが使用するスレショルド値である(図4のブロック468に関する説明を参照)。 ブロック530が指定されたランの長さの最小値より大きいか等しいランの長さを発見すると、ブロック530は図9のランの長さのエンコード方法または図14のランの長さのエンコード方法を用いて、ランの長さをエンコードするブロック531にコントロールを送る(図4のブロック468の説明で既に述べられた方法)。 一方、ブロック530がランの長さが指定されたランの長さの最小値より小さいことを発見すると、ブロック530はコントロールをブロック532に送る。
    順に、ブロック532は、ピクセル・インフォーメーションを前述の方式の絶対モードでエンコードする。 図9
    と14(絶対モード・エンコーディングについて説明している)を参照すること。 ルーチンがピクセルをエンコードすると、ブロック531を経由するランの長さのエンコーディングに依って、またはブロック532を経由する絶対モードのエンコーディングに依って、ルーチンは、コントロールをブロック535に送る。 ブロック5
    35は、今のピクセル・ポインタを更新して、次の圧縮されていないピクセルを生のデータ・フレームで示す。
    次に、ルーチンは、内部フレーム圧縮プロセスを、ラン変数の長さを1に初期設定して更新するブロック510
    にコントロールをリターンする。 一方、ブロック515
    が(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より小さいか等しい或いは(2)ラインに残っている圧縮されていないピクセルの数がゼロに等しいと決定すると、ルーチンは、コントロールをブロック5
    45に送る。 ブロック545,456,457はピクセル・インフォーメーションを、前述のように、ブロック530,531,532と同じ方式でエンコードする。
    ルーチンがピクセル・インフォーメーションをエンコードすると、それは、圧縮されていないデータの更なるラインをチェックするブロック500にコントロールを戻す。 スプリット・フレーム・ルーチン スプリット・フレーム・ルーチンのフロー・ダイアグラムが図6に図示されている。 図1のブロック150(図6のルーチンをコール)を参照すること。 本質的に、図1のルーチンは、それがエンコードされるイメージの品質を不当に損ねずに、与えられたターゲット・レンジに相応してフレームを圧縮できない時に、すなわち、許容範囲を拡大するとルーチンに最小許容分解能レベルより低い圧縮されたフレームを生成させる場合に、このスプリット・フレーム・ルーチンをコールするだけである。
    これらの状態の時に、発明の今の実施態様は生のデータを2つの部分に分割する。 いちど分割されると、生のデータの各々半分が分離して圧縮される。 スプリット・プロセスは、今のフレームの生のデータをテンプフレームにリネームするブロック610から始まる。 ブロック6
    20はテンプフレームのデータを半分に分割する。 次に、ブロック630は、“今のフレーム”のネームをテンプフレーム・データの上半分に再び指定する。 同様に、ブロック640は“次のフレーム”のネームをテンプフレーム・データの下半分に再び指定する。 ルーチンが今のフレームと次のフレームをこの形式で設定すると、ブロック650は、図1のブロック110にコントロールをリターンする。 圧縮解除方法 本発明の圧縮解除ルーチンのフロー・チャートが図7に図示されている。 本質的に、このルーチンは、図1−6
    のルーチンに依って圧縮されるフレームをとり、それらを表示可能なフォーマットに拡大する。 圧縮解除プロセスは、ビデオ・ムービーの圧縮データを受け取るブロック700から始まる。 次に、ブロック710は、ルーチンがビデオ・ムービーのエンコードされたフレームの全ての圧縮を解除したかどうかについて決定する。 少なくとも1つのフレームが圧縮された状態で残っている時に、ブロック710は、圧縮されたフレームを検索するブロック720にコントロールを送る。 次に、ブロック730は、実際にフレームの圧縮を解除するサブルーチンをコールする。 順に、ブロック740は、最後に圧縮されたフレームが単純に生のデータ・フレームの上半分であったかどうかについて決定する。 最後に圧縮を解除されたフレームが生のデータ・フレームの上半分だけだった場合、ルーチンは、それがフレームの下半分の圧縮を解除するまで、圧縮を解除されたデータの表示を遅延する。 ブロック740は、コントロールをディスプレイ・ブロック750の代わりにブロック720に送って、
    この遅延を行う。 次に、ブロック720はスプリッド・
    フレームの下半分を検索する。 ブロック730は、生のデータ・フレームの下半分の圧縮を解除する、圧縮解除フレーム・サブルーチンをコールする。 ブロック730
    のサブルーチンがリターンすると、ブロック750はフレームを例えばビデオ・モニターの上に表示する。 ブロック750がフレームを表示した後に、それはコントロールをブロック710にリターンする。 このようにして、ルーチンは、圧縮を解除して、ムービーのフレームの全てを表示する。 ルーチンが全体のムービーを表示すると、ブロック760は、圧縮解除ルーチンをコールしていたアプリケーションにリターンする。 圧縮解除フレーム・ルーチン 圧縮解除フレーム・ルーチンのフロー・チャートが図8
    に図示されている。 図7のブロック730(図8のルーチンをコールする)を参照すること。 圧縮解除フレーム・ルーチンのプロセスはブロック810から始まる。 ブロック810で、ルーチンは、バイト・グループを圧縮を解除されたビデオ・データから検索する。 次に、ブロック815は、バイト・グループをテストして、それがビットマップ・エンコーディングの最後であるかどうかについて確認する。 ブロック815がバイト・グループがビットマップ・エンコーディングの最後であると決定すると、ルーチンはコントロールをブロック840にパスする。 ビットマップの最後はフレームに関して圧縮されたデータの最後を示すので、ブロック840は、図7
    のブロック740にリターンする。 しかし、ユニットがビットマップ・エンコーディングの最後でない時に、ブロック815は、コントロールをブロック820に送る。 ブロック820が、バイト・グループがライン・エンコーディングの最後であると決定すると、ルーチンは、コントロールをブロック845に送る。 順に、ブロック845は、ブラッシュをビデオ・データの圧縮を解除されたバージョンの次のラインに移す。 ブロック84
    5がブラッシュを移すと、ルーチンはコントロールをブロック810に送る。 一方、バイト・グループがライン・エンコーディングの最後でない時に、ブロック820
    は、コントロールをブロック825に送る。 ブロック8
    25がバイト・グループがデルタ・エンコーディングであると決定すると、ルーチンはブロック850に移る。
    順に、ブロック850は、ブラッシュをデルタ・オフセットに依って指示されるロケーションに移す。 例えば、
    デルタは5の水平オフセットとゼロの垂直オフセットをエンコードしていたかも知れない。 このケースで、ルーチンは、ブラッシュを5ピクセル、その今のポジションから水平に移動する。 ブロック850がブラッシュを移すと、ルーチンは、コントロールをブロック810に送る。 代わりに、バイト・グループがデルタ・エンコーディングでない時に、ブロック825はコントロールをブロック830に送る。 ブロック830がバイト・グループがランの長さのエンコーディングであると決定すると、ブロック830はコントロールをブロック855に送る。 ブロック855は、次に使用できるピクセルを圧縮を解除されたデータで着色して、コントロールをブロック860に送る。 ブロック860は、ランの長さの残りの大きさを減少して、コントロールをブロック865
    に送る。 次に、ブロック865は、ランの長さの残っている大きさについてヌル値をテストする。 ランの長さの残っている大きさがヌル値である時に、ルーチンはランの全てのピクセルに着色して、ブロック865はコントロールをブロック810に送る。 一方、ランの長さの残っている大きさがゼロでない時に、ブロック865はコントロールをブロック855に戻す。 このようにして、
    ブロック855,860,865は、エンコードされたランの長さと関連するカラーの値から指示される全てのピクセルに着色する。 バイト・グループがランの長さのエンコーディングでない時に、ブロック830はコントロールをブロック880に移す。 ブロック880が、バイト・グループが絶対モード・エンコーディングであると決定すると、ブロック880はコントロールをブロック885に移す。 ブロック885は、次のカラー・インデックスを絶対モード・エンコーディングから検索して、次に使用できるピクセルを圧縮を解除されたデータで、コントロールをブロック890に移す前に着色する。 順に、ブロック890は、絶対モードでエンコードされたピクセルの残っている数を示すバイトを値を減算して、コントロールをブロック865に移す。 図9と1
    4(絶対モード・エンコーディングについて説明している)を参照すること。 次に、図8のブロック865は減算されたバイトの値についてヌル値をテストする。 絶対モードでエンコードされたピクセルの残っている数を示すバイトの値がゼロの時に、ルーチンは、絶対エンコード・ピクセルの全てに着色する。 そこで、ブロック89
    5は、コントロールをブロック810にリターンする。
    一方、絶対モードでエンコードされたピクセルの残っている数を示すバイトの値がゼロでない時に、ブロック8
    95は、コントロールをブロック885に戻す。 このようにして、ブロック885,890,895は、バイト・グループに依って指示された全ての絶対エンコード・
    ピクセルに着色する。 最後に、ブロック880がバイト・グループを絶対エンコーディングとして認識しない時に、ルーチンは、コントロールをブロック810に移すことに依って、データを無視する。 圧縮フレーム 図11と12は、例を用いて、ビデオ・ムービーの発明の圧縮を示している。 例について、次に詳細にわたって説明される。 しかし、読者の便宜を考えて、次に示す例の概略的な説明が用意されている。 簡潔にするために、
    例のムービーは僅か2つのフレームの長さであり、なおかつ、各々フレームはシングルの10のピクセル・ラインに組み込まれている。 図11を参照すること(ブロック1100と1125は、2つのフレーム・ムービーの、各々、フレームnとn+1に対して生のビデオ・データを示している)。 更に、発明は、圧縮されるデータのために6−11バイトを包含するターゲット・レンジを使用している。 圧縮されたデータをエンコードする時に、発明は、図10のカラー・ルックアップ・テーブルを使用して、圧縮されたデータが(1)図9のエンコーディング技術と(2)図14のエンコーディング技術の両方から表示される様子を示している。 図14の優れた特性は、2つのエンコーディング技術の結果を対比することに依って明らかになる。 その今の実施態様に於いて、発明は、ビデオ・データのフレームをロストレスでエンコードすることを試みて、例えば、ゼロの内部フレームと相互フレームの許容値を用いて開始する。 発明がロストレスでフレームをターゲット・レンジにエンコードできない場合、発明は、いま圧縮されているフレームの前のフレームに対してターゲット・レンジで圧縮を行った許容値を用いて圧縮する、すなわち、発明が今フレーム“n”を圧縮していた場合、発明は、フレーム“n
    −1”の最終許容値を用いて、圧縮を始めると思われる。前述の許容値でフレーム“n”を与えられたターゲット・レンジに圧縮できない場合、今の実施態様は、最大許容値を用いてフレームを圧縮する。発明は、時間を節約するために、すなわち、フレームが分割されなければならないかどうかについて瞬時に決定するために、これを行う。ユーザがフレームの分割を希望していないので、使用可能な最大許容値がない場合、発明は、前述の第1推定値、すなわち、内部フレーム許容値に対して2
    50の第1推定値と相互フレーム許容値に対して200
    0の第1推定値を用いて、フレームの圧縮を試みる。 簡潔にするため、この例は最大許容値を使用する圧縮について説明しない。 代わりに、発明は、まず、ロストレス・エンコーディング、すなわち、ゼロの許容値を、フレームnに対してだけ試みる。 次に、この例は、第1推定値、すなわち、250の内部フレーム許容値を用いて、
    フレームnの圧縮を試みる。 フレームn+1を圧縮している時に、この例は、フレームnのために作動していた内部フレーム許容値から誘導された許容値を使用して、
    圧縮を開始する。 更に、この例は、1,500が最大内部フレーム許容値であると想定している。 圧縮の例は、
    フレームnのロストレスのランの長さのエンコーディング(図11のブロック1100)から始まる。 発明は、
    ゼロの内部フレーム許容値を用いてフレームnのデータをロストレスでエンコードする。 しかし、このケースで、発明は、フレームnを6−11バイトのターゲット・レンジにロストレスで圧縮できない。 フレームnの圧縮されたバージョンをターゲット・レンジで行うとする時に、発明は、250の内部フレーム許容値を用いてフレームを再び圧縮する(前述のように、250は実験から適切な初期の内部フレーム許容値であると決定されている)。 250の許容値で用いて、発明は、フレームn、ブロック1100を、ターゲット・レンジで圧縮する。 例はフレームn+1(図12のブロック1125)
    の圧縮を続ける。 発明は、250の内部フレーム許容値と2,000の相互フレーム許容値を用いて、フレームn+1を圧縮する。 発明は、その数値がフレームnの圧縮で巧みに作動していたので、250を内部フレーム許容値として使用することを続ける(フレームn+1はフレームnと類似していると思われる)。 発明は、2,0
    00の相互フレーム許容値を用いて、相互フレーム圧縮を開始する、何故ならば、前述のように、内部フレーム許容値の値の8倍の相互フレーム許容値は適切であったと発見手法的に決定されていたからである。 これらの2
    つの許容値と図9のエンコード方法を用いて、発明は、
    フレームn+1、図12のブロック1125を、ターゲット・レンジで圧縮する。 図12、ブロック1210を参照すること。 しかし、これらの同じ2つの許容値を用いて、図14のエンコード方法は、フレームn+1、ブロック1125を、ターゲット・レンジのフロアより低く、すなわち6バイト未満に圧縮する。 図12、ブロック1220を参照すること。 その結果、発明は、相互フレーム許容値を1000に(前述の修正されたバイナリ・サーチを用いて)減少して、フレームn+1を再び圧縮する。 新しい相互フレーム許容値と図14のエンコード方法を用いると、発明は、フレームをターゲット・レンジで圧縮することができる。 更に、発明は、フレームn+1を図9のエンコード方法より図14のエンコード方法を用いて圧縮すると、より多くのインフォーメーションをエンコードすることができる。 図12のブロック1210と1230を比較してみること。 その例について、ここで詳細にわたって説明される。 図1と11の両方を見ると、圧縮プロセスは図1のブロック100から始まっている。 図1のブロック100は、ムービーの生のビデオ・データ(図11のブロック1100と112
    5)を受け取る。 次に、図1のブロック100は、図1
    のブロック1100を次の生のデータ・フレームと判定して圧縮する。 その結果、図1のブロック100は、図2の圧縮フレーム・ルーチンをコールするブロック11
    0にコントロールを送る。 順に、図2のブロック200
    は、図11のブロック1100が圧縮されたビデオ・ムービーの第1フレームであることを発見する。 そこで、
    図2のブロック200はコントロールをブロック250
    に移す。 ブロック250は図5の内部フレーム圧縮ルーチンをコールする。 前半の注記事項で説明されたように、発明は、生のデータをターゲット・レンジでロストレスでエンコードすることを試みて、すなわち、ランの長さのエンコーディングをゼロの内部フレーム許容値で使用して、内部フレーム圧縮プロセスを開始する。 まず、図5のブロック500は図11のブロック1100
    がビデオ・データの圧縮されていないラインであることを決定すると、次に図5のブロック505はコントロールをブロック510に移す。 順に、ブロック505は、
    今のピクセル・ポインタの内容を図11のブロック11
    00のピクセル1101のアドレスにセットして、ラインのロストレスの圧縮を開始する。 次に、図5のブロック510は、ラン変数の長さを1に初期設定して、コントロールをブロック515にパスする。 ブロック515
    は、(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さの値をプラスした数値がランの長さの最小値より大きいか、または(2)ラインに残っている圧縮されていないピクセルの数がゼロに等しいかどうかについて決定する。 このケースで、ラインに残っている圧縮されていないピクセルの数(10)にラン変数の長さの値(1)をプラスした数値は、ランの長さの最小値(4)より大きくなる。 その結果、ブロック51
    5はコントロールをブロック520に移す。 順に、ブロック520は、変動値を図11のピクセル1101と1
    102のカラー属性に基づいて計算する((1)今のピクセル・ポインタの内容と(2)今のピクセル・ポインタの内容にラン変数の長さをプラスした数値に依って表されるピクセル)。 この実施態様で、発明は2つのピクセルの各々カラー要素の差の平方を合計して変動値を計算する、すなわち、変動値=(255−255)2+
    (0−0)2+(0−0)2=0になる。 この場合、ゼロの変動値は内部フレーム許容値と等しくなる。 そこで、図5のブロック525はコントロールをブロック5
    40に移す。 順に、ブロック540は、ラン変数の長さを増加して、コントロールをブロック515にリターンする。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(8)にラン変数の長さの値(2)をプラスした数値がランの長さの最小値(4)より大きいかどうかについて決定し、なおかつ、その結果、ブロック515はコントロールをブロック520に移す。 ブロック520は図11のピクセル1101と1
    103の変動値を計算する。 やはり、この値はゼロになる(0=(255−255)2+(0−0)2+(0−
    0)2)。 次に、図5のブロック525は、コントロールをブロック515にパスする前に、ラン変数の長さを3に増加する、ブロック540にコントロールをパスする。 再び、ブロック515は、ラインに残っている圧縮されていないピクセルの数(7)にラン変数の長さの値をプラスした数値(3)がランの長さの最小値(4)より大きいかどうかについて決定する。 この判定に対応して、ブロック515は、コントロールをブロック520
    にパスする。 ブロック520は、図11のピクセル11
    01と1104の変動値を計算する。 このケースで、計算された変動値はゼロになる、すなわち(0=(255
    −255)2+(0−0)2+(0−0)2)。 ペアの変動値は内部フレーム許容値より大きくないので、図5
    のブロック525は再びコントロールをブロック540
    にパスする。 順に、ブロック540はラン変数の長さを4に増加する。 次に、ブロック540はコントロールをブロック515にパスする。 ラインに残っている圧縮されていないピクセルの数(6)にラン変数の長さの値をプラスした数値(4)は、ランの長さの最小値(4)より大きいので、ブロック515は、コントロールをブロック520にパスする。 順に、ブロック520は、図1
    1のピクセル1101と1105の変動値を計算する。
    その値は、62,377になる。 すなわち、(62,3
    77=(178−255)2+(168−0)2+(1
    68−0)2)。 この値はゼロの内部フレーム許容値より□かに大きいので、図5のブロック525はコントロールをブロック530に送る。 ブロック530はラン変数の長さの大きさを調べる。 このケースで、ラン変数の長さは、ランの長さの最小値に等しい値(4の値)をもつ。 そこで、ブロック530はコントロールをブロック531に送る。 ブロック531は図11のピクセル11
    01,1102,1103,1104をランの長さのエンコーディングとしてエンコードする。 図9と14は、
    ランの長さのエンコーディングを生成できる2つの可能性のある方法を示している。 完璧にするために、この例は両方の方法を示している。 図11のブロック114
    0,1150,1160と図12のブロック1210は図9のエンコード方法を使用しているが、図11のブロック1170,1180,1190と図21のブロック1220,1230,1240は図14のエンコード方法を使用している。 通常の条件のもとで、しかし、1つのエンコード方法だけアプリケーションで用いられると思われる。 図11のブロック1140は、図9に依って開示されるエンコード方法を用いて生成される、ブロック1100のロストレスで圧縮されたデータの部分的なエンコードである。 図11のブロック1140の内部のバイト・グループ1141は、ピクセル1101,11
    02,1103,1104のランの長さのエンコーディングである。 このグループの第1バイト(04)はランの長さの大きさになる。 このグループの第2バイト(4
    3)は、(255,0,0)のRGBカラー値のために、図10のカラー・ルックアップ・テーブルから導かれるカラー・インデックスである。 同様に、図11のブロック1170は、図14に依って開示されるエンコード方法を用いて、生成されるブロック1100のロストレスで圧縮されたデータの部分的なエンコードである。
    図11のブロック1180の内部のバイト・グループ1
    171は、ピクセル1101,1102,1103,1
    104のランの長さのエンコーディングである。 このグループの第1バイト(18)は、ランの長さの大きさに比例する。 ランの長さの実際の大きさは、14をバイトから減算して求められる。 このグループの第2バイト(43)は、ピクセル1101,1102,1103,
    1104のカラー・インデックスである。 図10(カラー・ルックアップ・テーブル)を参照すること。 図5のブロック531がランの長さをエンコードすると、ブロック535は、今のピクセル・ポインタの内容を更新して、発明が調べた最後のピクセル、このケースでは、図11のピクセル1105を示す。 図5のブロック535
    がポインタで更新すると、それは、ラン変数の長さを1
    に再び初期設定するブロック510にコントロールをリターンする。 次に、ブロック515は、ラインに残っている圧縮されていないピクセルの数(6)にラン変数の長さ(1)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 その結果、ブロック515はコントロールをブロック520にパスする。 ブロック520は図11のピクセル1105と1106の変動値を計算する。 このケースで、変動値は100になる〔100=(168−178)2+(168−16
    8)2+(168−168)2〕。 100はゼロの内部フレーム許容値より大きいので、ブロック525は、コントロールをブロック530に送る。 順に、ブロック5
    30は、ラン変数の長さ(1)がランの長さの最小値(4)より小さいことを決定して、コントロールをブロック532に送る。 ブロック532はピクセル・インフォーメーションを絶対モードでエンコードする。 効率的にするために、絶対モード・エンコーディングは、3つのピクセルの中の最小値を記号化する、すなわち、絶対モード・エスケープ・シーケンスそのものは2つのバイトを続けるので、3つのバイトをエンコードして、1つのピクセルをエンコードすることは無駄と考えられるからである。 更に、エスケープ・シーケンス〔00 0
    1〕と〔00 02〕、1と2のバイトの絶対モード・
    エンコーディングのためのロジカル・エスケープ・シーケンスは、ビットマップとデルタ・エンコーディングに対して既に用いられている。 図9と14(絶対とビットマップの最後とデルタ・エンコーディングについて説明している)を参照すること。 これらの効率性の問題のために、発明は、図9の方法を用いて、図11とピクセル1105,1106,1107を、ブロック1140の1142のバイト・グループとしてエンコードする。 同様に、図14の方法を用いて、発明は、図11のピクセル1105,1106,1107を、ブロック1170
    のバイト・グループ1172としてエンコードする。 図9と図14の絶対エンコード方法は同じなので、図11
    のバイト・グループ1142と1172も同じになる。
    各々グループの最初の2つのバイト(00 03)は、
    次の3つのバイト(48,42,42)を、絶対エンコード・ピクセルとして識別する。 (48)と(42)
    は、各々(178,168,168)と(168,16
    8,168)のRGB値のカラー・インデックスになる。 図10(カラー・ルックアップ・テーブル)を参照すること。 図5のブロック532が図11のピクセル1
    105,1106,1107をエンコードすると、図5
    のブロック532は、コントロールをブロック535にパスする。 順に、ブロック535は、今のピクセル・ポインタの内容を更新して、調査される次のピクセル、すなわち図11のピクセル1108を示す。 次に、図5のブロック535はコントロールをブロック510にパスする。 ブロック510は、ラン変数の長さを1に再び初期設定して、コントロールをブロック515にパスする。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(3)にラン変数の長さの値(1)
    をプラスした数値がランの長さの最小値(4)より大きくないと決定する、するとブロック515は、次にコントロールをブロック545にパスする。 ブロック545
    は、ラン変数の長さの値がランの長さの最小値より小さいことを発見して、コントロールをブロック547にパスする。 順に、ブロック547は、ラインの残っているピクセル、すなわち、図11のブロック1100のピクセル1108,1109,1110を絶対モードでエンコードする。 効率的にするために、図5のブロック54
    7は、既に絶対モードでエンコードされていたピクセル、すなわち、図11のブロック1100のピクセル1
    105,1106,1107(各々、ブロック1140
    と1170のバイト・グループ1142と1172に既にエンコードされていたピクセル1105,1106,
    1107)と、それらを組み合わせて、これらのピクセルをエンコードする。 その結果、ピクセル1105,1
    106,1107,1108,1109,1110はシングル・バイト・グループに依って表される。 図9の方法を用いて、図11のブロック1150のバイト・グループ1152は、これらのピクセルを示している。 同様に、図14の方法を用いて、ブロック1180のバイト・グループ1182は、これらのピクセルを示している。 前述のように、絶対エンコードの場合、図9と14
    に依って表される方法は同じである。 従って、図11のバイト・グループ1152と1182は同じである。 各々グループの最初の2つのバイト(00 06)は、次の6バイト(48,42,42,48,42,42)を絶対エンコード・ピクセルと識別する。 (48)と(4
    2)は、各々(178,168,168)と(168,
    168,168)のRGB値のカラー・インデックスになる。 図10(カラー・ルックアップ・テーブル)を参照すること。 図5のブロック547がこれらのピクセルをエンコードした後に、ブロック547は、ビットマップ・エスケープ・コードの最後をエンコードして、フレームの最後を送る(ブロック1150のバイト・グループ1153とブロック1180のバイト・グループ11
    83)。 このエンコーディングは、図9と14に依って明瞭に説明される。 図5のブロック547がビットマップ・バイト・グループの最後をエンコードすると、図1
    1のブロック1100のデータのロストレスの圧縮は完璧になる。 次に、図5のブロック500は、(1)圧縮されていないビデオ・データのラインが図11のブロック1100にないことを認めて、(2)コントロールを図5の502に送る。 順に、ブロック502はコントロールを図2のブロック260にリターンする。 このポイントから、ブロック260は、コントロールを図1のブロック120にリターンする。 ブロック120は、ロストレスでエンコードされて圧縮されたデータのサイズを調べる「図11のブロック1150(図9の方法を用いて圧縮)と図11のブロック1180(図14の方法を用いて圧縮)」。 このケースで、図1のブロック120
    は、図11の両方のブロック1150と1180が、各々12バイトのデータを搭載していて、ターゲット・レンジの上限(上限は11バイトに等しい)より大きいと決定する。 その結果、ブロック120は、コントロールをブロック130にパスする。 ブロック130は、フレームが分割されるべきかどうかについて決定する。 最初に用いられた内部フレーム許容値がゼロであり且つ15
    00の最大内部フレーム許容値より大きくなかったので、ブロック130は、コントロールをブロック140
    にパスする。 順に、ブロック140は、内部フレーム許容値を250に増加して、コントロールをブロック11
    0にパスする(前述のように、250は実験に依って内部フレーム許容値に適した第1推定値と決定されていた)。 順に、ブロック110は、図2の圧縮フレーム・
    ルーチンをコールする。 図2のブロック200は、図1
    1のブロック1100がムービーの最初のフレームであることを決定して、コントロールを図2のブロック25
    0にパスする。 ブロック250がコントロールをもつと、それは図5の内部フレーム圧縮ルーチンをコールする。 もう一度、図5のブロック500は、(1)図11
    のブロック1100がビデオ・データの圧縮されていないラインであることを決定して、(2)コントロールを図5のブロック505に送る。 ブロック505は、今のピクセル・ポインタの内容を図11のブロック1100
    のピクセル1101のアドレスにセットする。 次に、図5のブロック510は、ラン変数の長さを1に初期設定して、コントロールをブロック515にパスする。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(10)にラン変数の長さの値(1)をプラスした数値がランの長さの最小値(4)より大きいと決定すると、コントロールをブロック520にパスする。
    順に、ブロック520は、変動値を図11のピクセル1
    101と1102のカラー属性に基づいて計算して、コントロールを図5のブロック525にパスする。 このケースで、ピクセルの変動値はゼロ〔0ー(255−25
    5)2+(0−0)2+(0−0)2〕になるので、2
    50の内部フレーム許容値より小さくなる。 そこで、ブロック525はコントロールをブロック540に送る。
    順に、ブロック540は、ラン変数の長さを2に増加して、コントロールをブロック515にリターンする。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(8)にラン変数の長さの値(2)をプラスした数値がランの長さの最小値(4)より大きいと決定すると、その結果、ブロック515はコントロールをブロック520にパスする。 ブロック520は図11のピクセル1101と1103の変動値を計算する。 再び、この値はゼロ〔0=(255−255)2+(0−
    0)2+(0−0)2〕になる。 図5のブロック525
    は、計算された変動値が内部フレーム許容値より小さいことを認めて、コントロールをブロック540にパスする。 順に、ブロック540はラン変数の長さを3に増加する。 再び、ブロック525は、ラインに残っている圧縮されていないピクセルの数(7)にラン変数の長さの値(3)をプラスした数値がランの長さの最小値(4)
    より大きいことを決定すると、次に、ブロック515はコントロールをブロック520にパスする。 順に、ブロック520は、図11のピクセル1101と1104の変動値を計算する。 計算された変動値はゼロ〔0=(2
    55−255)2+(0−0)2+(0−0)2〕になる。 ペアの変動値は内部フレーム許容値より大きくないので、図5のブロック525は、再び、コントロールをブロック540にパスする。 順に、ブロック540は、
    コントロールをブロック515にパスする前に、ラン変数の長さを4に増加する。 ラインに残っている圧縮されていないピクセルの数(6)にラン変数の長さの値をプラスした数値(4)は、ランの長さの最小値(4)より大きいので、ブロック515は、コントロールをブロック520にパスする。 順に、ブロック520は、図11
    のピクセル1101と1105の変動値を計算するが、
    このケースで、その値は62,377になる、すなわち、(62,377=(178−255)2+(168
    −0)2+(168−0)2)。 この値は250の内部フレーム許容値より□かに大きいので、図5のブロック525はコントロールをブロック530に送る。 ブロック530はラン変数の長さの大きさを調べる。 このケースで、ラン変数の長さは、ランの長さの最小値に等しい値(4の値)をもつ。 そこで、ブロック530はコントロールをブロック531に送る。 ブロック531はピクセル1101,1102,1103,1104をブロック1160と1190のランの長さのエンコーディングとしてエンコードする。 ブロック1160は(1)25
    0の内部フレーム許容値と(2)図9のエンコード方法で生成されたブロック1100の圧縮されたデータである。 図11のブロック1160の内部のバイト・グループ1161は、ピクセル1101,1102,110
    3,1104をランの長さのエンコーディングとして表している。 前述のように、このグループの第1バイト(04)はランの長さの大きさであり、第2バイト(4
    3)は図10のカラー・ルックアップ・テーブルから導かれるピクセルのカラー・インデックスである。 同様に、図11のブロック1190は(1)250の内部フレーム許容値と(2)図14のエンコード方法で生成されたブロック1100のデータである。 図11のブロック1190の内部のバイト・グループ1191は、ピクセル1101,1102,1103,1104をランの長さのエンコーディングとして表している。 ブロック1
    170に対して既に説明されたように、このグループの第1バイト(18)は、ランの長さの大きさに比例する(ランの長さの実際の大きさは14をバイトから減算して求められる)。 このグループの第2バイト(43)はピクセルのカラー・インデックスである。 図10(カラー・ルックアップ・テーブル)を参照すること。 図5のブロック531がランの長さをエンコードすると、ブロック535は、今のピクセル・ポインタの内容を更新して、発明が調べた最後のピクセル、すなわち、図11のピクセル1105を示す。 図5のブロック535がポインタを更新した後に、ルーチンは、ラン変数の長さを1
    に再び初期設定するブロック510に、コントロールをリターンする。 次に、ブロック515は、ラインに残っている圧縮されていないピクセルの数(6)にラン変数の長さ(1)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 その結果、ブロック515は、コントロールをブロック520にパスする。
    ブロック520は、図11のピクセル1105と110
    6の変動値を計算する。 このケースで、変動値は100
    (100=(168−178)2+(168−168)
    2+(168−168)2)になる。 前に行われたロストレスの圧縮と対照的に、この変動値は、もはや内部フレーム許容値より大きくない(内部フレーム許容値はゼロから250に図1のブロック140に依って増加していた)。 その結果、図5のブロック525は、コントロールをブロック515に送る前に、ラン変数の長さを2
    に増加する、ブロック540にコントロールを送る。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(4)にラン変数の長さの値(2)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 その結果、ブロック515は、コントロールをブロック520にパスする。 順に、ブロック520
    は、図11のピクセル1105と1107の変動値を計算する。 やはり、変動値は100(100=(168−
    178)2+(168−168)2+(168−16
    8)2)になる。 100は250の内部フレーム許容値より小さいので、図5のブロック525は、(1)ラン変数の長さを3に増加して、(2)コントロールをブロック515にパスする、ブロック540にコントロールを送る。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(3)にラン変数の長さの値(3)をプラスした数値がランの長さの最小値(4)より大きいことを決定すると、コントロールをブロック5
    20にパスする。 ブロック520は図11のピクセル1
    105と1108の変動値を計算する。 このケースで、
    変動値はゼロになる、すなわち(0=(178−17
    8)2+(168−168)2+(168−168)
    2)である。 ゼロは250の内部フレーム許容値より小さいので、図5のブロック525は、(1)ラン変数の長さを4に増加して、コントロールをブロック515にパスする、ブロック540にコントロールを送る。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(2)にラン変数の長さの値(4)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 そこで、ルーチンは、コントロールをブロック520にパスする。 順に、ブロック520は、図11
    のピクセル1105と1109の変動値を計算する。 このケースで、変動値は100(100=(168−17
    8)2)+(168−168)2+(168−168)
    2)になる。 100は250の内部フレーム許容値より小さいので、図5のブロック525は、(1)ラン変数の長さを5に増加して、コントロールをブロック515
    にパスする、ブロック540にコントロールを送る。 ブロック515は、ラインに残っている圧縮されていないピクセルの数(1)にラン変数の長さの値(5)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 この決定に対応して、ルーチンはコントロールをブロック520にパスする。 ブロック520がコントロールをもつと、それは、図11のピクセル110
    5と1110の変動値を計算する。 このケースで、変動値は100になる、すなわち、(0=(168−17
    8)2+(168−168)2+(168−168)
    2)になる。 100は250の内部フレーム許容値より小さいので、図5のブロック525は、(1)ラン変数の長さを6に増加して、コントロールをブロック515
    にパスするブロック540にコントロールを送る。 ここで、ブロック515は、ラインに残っている圧縮されていないピクセルの数がゼロであることを決定して、コントロールをブロック545にパスする。 順に、ブロック545は、ラン変数の長さの値(6)がランの長さの最小値(4)より大きいことを発見して、コントロールをブロック546にパスする。 その結果、ブロック546
    は、図11のピクセル1105,1106,1107,
    1108,1109,1110を、ランの長さのエンコーディングとしてエンコードする。 このランの長さのエンコーディングは(1)図11のブロック1160のバイト・グループ1162と(2)図11のブロック11
    90のバイト・グループ1192に依って表される(前述のように、ブロック1160は図9のエンコード方法を示し、ブロック1190は図14のエンコード方法を示している)。 図11のバイト・グループ1162に関して、グループの第1のバイト(06)はランの長さの大きさである。 グループの第2バイト(48)は(25
    5,0,0)のRGBカラー値のカラー・インデックスでる。 図10(カラー・ルックアップ・テーブル)を参照すること。 同様に、図11のバイト・グループ119
    2に関して、グループの第1バイト(20)はランの長さの大きさに比例する。 ランの長さの実際の大きさは1
    4をバイトから減算して求められる。 バイト・グループ1162の第2バイトと同様に、バイト・グループ11
    92の第2バイト(48)は(255,0,0)のRG
    Bカラー値のカラー・インデックスである。 図10(カラー・ルックアップ・テーブル)を参照すること。 図5
    のブロック546が図11のピクセル1105,110
    6,1107,1108,1109,1110をランの長さのエンコーディングとしてエンコードした後に、図5のブロック546は、ビットマップ・エスケープ・コードの最後をエンコードする(ブロック1160のバイト・グループ1163とブロック1190のバイト・グループ1193)。 ビットマップ・エンコーディングの最後は図9と14から明瞭に説明される。 図5のブロック546がこれらの最後の2つのバイト・グループをエンコードすると、ブロック500はコントロールをブロック502に送る。 次に、ブロック502はコントロールを図2のブロック260にリターンする。 このポイントから、ブロック260はコントロールを図1のブロック120にリターンする。 ブロック120は、圧縮されたデータのサイズ(図11のブロック1160(図9の方法を用いて圧縮)と図11のブロック1190(図1
    4の方法を用いて圧縮))を調べる。 このケースで、図1のブロック120は、図11のブロック1150と1
    180の両方が、各々6バイトのデータを搭載していて、6−11バイトのターゲット・レンジに入っていることを決定する。 その結果、図1のブロック120はコントロールをブロック105に送る。 順に、図1のブロック105は、図12のブロック1125を、圧縮に必要な生のデータのフレームとして認識する。 そこで、ブロック110は、図2の圧縮フレーム・ルーチンをコールする。 図2の圧縮フレーム・ルーチンは、ブロック2
    00,210,230に依って図示されているように、
    データに関するシリーズのテストを行う。 図12のブロック1125のデータはムービーの最初のフレームでないので、ブロック200はコントロールをブロック21
    0に送る。 この例は、図1の圧縮方法をコールするアプリケーション・プログラムが、ブロック1125の図1
    2データのブロック1125のデータをキー・フレームとして圧縮することを指定していなかったことを想定している。 従って、図2のブロック210はコントロールをブロック230に送る。 同様に、この例は、図1の圧縮方法をコールするアプリケーション・プログラムが内部フレーム圧縮だけ用いてムービーを圧縮することを指定していなかったので、図2のブロック230は、コントロールをブロック240に送ることを想定している。
    順に、ブロック240は図3と4の内部フレーム圧縮ルーチンをコールする。 例で概略的に示されたように、図3と4の内部フレーム圧縮ルーチンは、各々、250と2,000の内部フレームと相互フレームの許容値を使用している。 この例は、250の内部フレーム許容値を使用している、何故ならば、この値は、図12のブロック1100のデータを圧縮する際に、好ましい結果を示して作動していたからである。 同様に、この例は2,0
    00の内部フレーム許容値を使用している、何故ならば、効果的な相互フレーム許容値は成功した内部フレーム許容値の一般的に8倍だったことを、実験が示唆していたからである。 図3のブロック300から開始して、
    ルーチンは、図12のブロック1125が圧縮されていないデータのラインであることを決定して、コントロールを図3のブロック307にパスする。 ブロック307
    は、前のフレームのピクセル・ポインタの内容をセットして、図12のブロック1100のピクセル1101を示す。 同様に、図3のブロック310は、今のフレームのピクセル・ポインタの内容を図12のブロック112
    5のピクセル1126にセットする。 次に、図3のブロック320は、デルタ・オフセットをゼロに初期設定する。 相互フレーム圧縮プロセスの中心部は、ブロック3
    30,340,350,352,354,356から形成されるループである。 このループは、ペアの変動値が相互フレーム許容値より大きくなるので、相互フレーム・ピクセル・ペアのカラーの値を比較する。 この例の場合、ループは、ブロック330が図12のピクセル11
    01と1126が有効な相互フレーム・ピクセル・ペアを形成していると決定すると開始する。 次に、図3のブロック340は、これらのピクセルの変動値を、図5のブロック520と同じ方式で、すなわち、変動値の関係式=(84−255)2+(84−0)2+(84−
    0)2=43,353を用いて決定する。 順に、ブロック360は、両方のデルタ・オフセットがゼロに等しいと決定して、コントロールを図4のブロック407にパスする。 ブロック407がコントロールをもつと、それは、ラン変数の長さを1に初期設定して、コントロールをブロック410にパスする。 この例は、図1の圧縮方法をコールするアプリケーションが、ハイブリッド圧縮、すなわち、相互フレームと内部フレームの圧縮の混合を可能にすることを想定している。 この想定に基づいて、図4のブロック410は、コントロールをブロック420に送る。 ブロック420は、(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さをプラスした数値がランの長さの最小値より大きいか、
    または(2)ラインに残っている圧縮されていないピクセルの数がゼロに等しいかどうかについて決定する。 このケースで、ラインに残っている圧縮されていないピクセルの数(10)にラン変数の長さの値(1)をプラスした数値は、ランの長さの最小値(4)より大きい。 その結果、ブロック420は、変動値を図12のピクセル1126と1127のカラー属性に基づいて計算する。
    ブロック425にコントロールを送る((1)今のフレームのピクセル・ポインタの内容と(2)今のフレームのピクセル・ポインタの内容にラン変数の長さをプラスした値に依って表されるピクセル)。 このケースで、ピクセルの変動値はゼロ〔0=(84−84)2+(84
    −84)2+(84−84)2〕になる。 ゼロの変動値は250の内部フレーム許容値より小さいので、図4のブロック430はコントロールをブロック455に送る。 順に、ブロック455は、ラン変数の長さを2に増加して、コントロールをブロック420にリターンする。 ブロック420は、ラインに残っている圧縮されていないピクセルの数(8)にラン変数の長さ(2)をプラスした数値がランの長さの最小値(4)より大きいと決定すると、その結果、ブロック420は、コントロールをブロック425にパスする。 ブロック425は、図12のピクセル1126と1128の変動値を計算する。 再び、この値はゼロ〔0=(84−84)2+(8
    4−84)2+(84−84)2〕になる。 その結果、
    図4のブロック430は、ラン変数の長さを3に増加する、ブロック455にコントロールをパスする。 次に、
    ブロック455は、コントロールをブロック420にパスする。 再び、ブロック420は、ラインに残っている圧縮されていないピクセルの数(7)にラン変数の長さの値(3)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 次に、ブロック42
    0はコントロールをブロック425にパスする。 順に、
    ブロック425は図12のピクセル1126と1129
    の変動値を計算する。 ピクセルの計算された変動値はゼロ〔0=(255−255)2+(0−0)2+(0−
    0)2〕になる。 ペアの変動値は内部フレーム許容値より大きくないので、図4のブロック430はコントロールをブロック455にパスする。 そこで、ブロック45
    5はラン変数の長さを4に増加する。 次に、ブロック4
    55はコントロールをブロック420にパスする。 ブロック420は、ラインに残っている圧縮されていないピクセルの数(6)にラン変数の長さの値(4)をプラスした数値がランの長さの最小値(4)より大きいことを決定する。 その結果、ブロック420はコントロールをブロック425にパスする。 順に、ブロック425は、
    図12のピクセル1126と1130の変動値を計算する。 再び、この値はゼロ〔0=(84−84)2+(8
    4−8)2+(84ー84)2〕になる。 次に、図4のブロック430は、ラン変数の長さを5に増加する、ブロック455にコントロールをパスする。 次に、ブロック455はコントロールをブロック420にパスする。
    ブロック420は、ラインに残っている圧縮されていないピクセルの数(5)にラン変数の長さ(5)をプラスした数値がランの長さの最小値(4)より大きいと決定すると、その結果、ブロック420はコントロールをブロック425にパスする。 順に、ブロック425は図1
    2のピクセル1126と1131の変動値を計算する。
    ここでしかし、計算された変動値は10,443〔1
    0,443=(143−84)2+(143−84)2
    +(143−84)2〕になる。 この値は250の内部フレーム許容値より□かに大きいので、図4のブロック430は、コントロールをブロック435に送る。 ブロック435はラン変数の長さの大きさを調べる。 このケースで、ラン変数の長さの値(5)はランの長さの最小値(4)より大きい。 そこで、ブロック435は、コントロールをブロック437に送る。 ブロック437は、
    ピクセル1126,1127,1128,1129,1
    130をランの長さのエンコーディングとしてエンコードする。 図11のブロック1100の既に圧縮されていたデータと同様に、図9のエンコード方法と図14のエンコード方法が共に図12に図示されている。 図12のブロック1210は図9のエンコード方法を使用しているが、ブロック1220と1230は図14のエンコード方法を使用している。 やはり、通常の条件のもとで、
    1つだけのエンコード方法がアプリケーションに依って用いられると思われる。 図12のブロック1210の内部のバイト・グループ1211は、図9の方法を使用するピクセル1126,1127,1128,1129,
    1130のランの長さのエンコーディングである。 このグループの第1バイト(05)はランの長さの大きさである。 このグループの第2バイト(41)は、ピクセル1126,1127,1128,1129,1130のカラー・インデックスである。 図10((84,84,
    84)のRGBカラー値のカラー・インデックスとして41を示すカラー・ルックアップ・テーブル)を参照すること。 同様に、図12のブロック1220の内部のバイト・グループ1221は、図14の方法を使用するピクセル1126,1127,1128,1129,11
    30のランの長さのエンコーディングである。 このグループの第1バイト18はランの長さの大きさに比例する。 ランの長さの実際の大きさは14をバイトから減算して求められる。 図12のブロック1210のバイト・
    グループ1211の第2バイトと同様に、ブロック12
    20のバイト・グループ1221の第2バイト41は、
    ピクセル1126,1127,1128,1129,1
    130のカラー・インデックスである。 図10((8
    4,84,84)のRGBカラー値のカラー・インデックスとして41を示すカラー・ルックアップ・テーブル)を参照すること。 図4のブロック437がランの長さをエンコードすると、ブロック437はコントロールをブロック428に送る。 ブロック438は(1)ラン変数の長さをゼロにセットして(2)コントロールをブロック440に送る。 ブロック440は、今のフレームのピクセル・ポインタの内容を更新して、調査される必要がある図12のブロック1125の次のピクセル、すなわち、ピクセル1131を示す。 同様に、ブロック4
    45は、前のフレームのピクセル・ポインタの内容を更新して、図12のブロック1100の対応するピクセル、すなわち、ピクセル1106を示す。 図4のブロックが前のフレームのピクセル・ポインタを更新すると、
    ブロック445は、コントロールを図3のブロック32
    0に送る。 ブロック320は、デルタ・オフセットをゼロにリセットして、コントロールをブロック330にパスする。 ブロック330は、図12のブロック1100
    のピクセル1106と、図12のブロック1125の1
    131を、有効な相互フレームピクセル・ペアとして認識する。 その結果、図3のブロック340は、ペアに対して1,875の変動値を計算する〔1,875=(1
    43−168)2+(143−168)2+(143−
    168)2〕。 ブロック350は、この値を2,000
    の相互フレーム許容値より小さいものと認識して、コントロールをブロック352にパスする。 ブロック352
    は、デルタ・オフセットを更新する、すなわち、水平デルタ・オフセットを1に増加して行い、コントロールをブロック354に送る。 ブロック354は、前のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック356に送る。 類似の方式で、ブロック3
    56は、今のフレームのピクセル・ポインタの内容に増加して、コントロールをブロック330に送る。 ブロック330は、図12のブロック1100のピクセル11
    07と、図12のブロック1125の1132を、有効な相互フレーム・ピクセル・ペアとして認識する。 その結果、図3のブロック340は、ペアに対して675の変動値を計算する〔675=(153−168)2+
    (153−168)2+(153−168)2〕。 ブロック350は、この値を21,000の相互フレーム許容値より小さいものと認識して、コントロールをブロック352にパスする。 再び、ブロック352はデルタ・
    オフセットを更新する。 ここでは、水平デルタ・オフセットを2に増加して行う。 順に、ブロック354は、前のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック356に送る。 同じ方式で、ブロック356は、今のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック330に送る。
    ブロック330は、図12のブロック1100のピクセル1108と、図12のブロック1125の1133
    を、有効な相互フレーム・ピクセル・ペアとして認識する。 その結果、図3のブロック340は、ペアに対して1,075の変動値を計算する〔1,075=(153
    −178)2+(153−168)2+(153−16
    8)2〕。 ブロック350は、この値を2,000の相互フレーム許容値より小さいものと認識して、コントロールをブロック352にパスする。 ブロック352は、
    デルタ・オフセットを更新する、すなわち、水平デルタ・オフセットを3に増加して行い、次に、コントロールをブロック354に送る。 ブロック354は、前のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック356に送る。 類似の方式で、ブロック356は、今のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック330に送る。 ブロック330は、図12のブロック1100のピクセル1
    109と、図12のブロック1125の1134を、有効な相互フレーム・ピクセル・ペアとして認識する。 その結果、図3のブロック340は、ペアに対して1,8
    75の変動値を計算する〔1,475=(153−16
    8)2+(143−168)2+(143−168)
    2〕。 ブロック350は、この値を2,000の相互フレーム許容値より小さいものと認識して、コントロールをブロック352にパスする。 ブロック352は、デルタ・オフセットを更新する、すなわち、水平デルタ・オフセットを4に増加して行って、コントロールをブロック354に送る。 ブロック354は、前のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック356に送る。 類似の方式で、ブロック356
    は、今のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック330に送る。 ブロック3
    30は、図12のブロック1100のピクセル1110
    と、図12のブロック1125の1135を、有効な相互フレーム・ピクセル・ペアとして認識する。 その結果、図3のブロック340は、ペアに対して675の変動値を計算する〔675=(153−168)2+(1
    53−168)2+(153−168)2〕。 ブロック350は、この値を2,000の相互フレーム許容値より小さいものと認識して、コントロールをブロック35
    2にパスする。 ブロック352は、デルタ・オフセットを更新する、すなわち、水平デルタ・オフセットを5に増加して行って、コントロールをブロック354に送る。 ブロック354は、前のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック356
    に送る。 類似の方式で、ブロック356は、今のフレームのピクセル・ポインタの内容を増加して、コントロールをブロック330に送る。 ブロック330がコントロールをもつと、しかし、それは、今のフレームのピクセル・ポインタと前のフレームのピクセル・ポインタが生のビデオ・データの境界を越えている(図12のブロック1100と1125を越えている)ことを認識する。
    その結果、図3のブロック330は、コントロールをブロック331に送る。 ブロック331は、水平デルタの値(5)のデルタの最小値(4)より大きいことを決定して、コントロールをブロック332に送る。 ブロック332は、図12のピクセル1131,1132,11
    33,1134,1135のデルタをエンコードする。
    図9のデルタ・エンコード方法は図12のブロック12
    10のバイト・グループ1212に依って表される。 このグループの最初の2つのバイト(00と02)はデルタ・エスケープ・シーケンスを意味している。 次のバイト(05)は水平デルタ・オフセットの大きさである。
    同様に、最終バイト(00)は、垂直デルタ・オフセットの大きさである。 従って、図9の方法は、デルタをエンコードするために、4バイトを要求する。 図14のデルタ・エンコード方法は、しかし、シングル・バイトだけ要求する。 図12のブロック1220のバイト・グループ1222を参照すること。 このグループの唯−のバイト(05)はデルタ・オフセットの大きさである。 前述のように、図14のエンコード方法は、1〜14の範囲の値をもつ、全てのシングル・バイトが水平デルタであると想定している。 この方式で、図14のエンコード方法は、図9の方法と比べると、データを20%節約してルーチンで圧縮する。 図3のブロック332がデルタをエンコードした後に、ブロック332はビット・マップ・エスケープ・コードの最後(ブロック1210のバイト・グループ1213とブロック1220のバイト・
    グループ1223)をエンコードする。 ピットマップ・
    エンコーディングの最後は、図9と14から明瞭に説明される。 このポイントで、図3のブロック300は、発明がフレームn+1(図12のブロック1220)をブロックのフレームn(図12のブロック1100)に相応して完全に圧縮したことを認識する。 その結果、図3
    のブロック305は、コントロールを図1のブロック2
    60にリターンする。 順に、ブロック260は、コントロールを図1のブロック120にリターンする。 ブロック120は、圧縮されたデータのサイズを6−11バイトのターゲット・レンジに相応して調べる。 図9のエンコード方法はデータを8バイトに圧縮していた。 図12
    のブロック1210を参照すること。 対照的に、図14
    のエンコード方法はデータを5バイトに圧縮していた。
    図12のブロック1220を参照すること。 そこで、図9の方法を使用してエンコードされたデータは、6−1
    1バイトのターゲット・レンジのほぼ中間にある。 一方、図14の方法を使用してエンコードされたデータはターゲット・レンジのフロアより低い、すなわち、5バイトは6バイトのフロアより低い。 その結果、ブロック120は、2つの異なるコースのアクションを、エンコード方法が用いられていた何れかのアクションに基づいて実施する。 図9のエンコード方法に関して、ブロック120はコントロールをブロック105に送る。 ブロック105は、ルーチンが生のビデオ・データの全てを圧縮していたことを決定する。 その結果、ブロック105
    はコントロールをブロック180に送る。 順に、ブロック180は図1の圧縮方法をコールしていたアプリケーションにリターンする。 一方、図14のエンコード方法に関して、図1のブロック120はコントロールをブロック130に送る。 ブロック130は、ルーチンがフレームをスプリットすべきかどうかについて決定する。 発明はフレームをターゲット・レンジのフロアより低く圧縮していたので、フレームを分解する必要はなく、ブロック130はコントロールをブロック140にパスする。 この例で、ブロック140は、既に説明済みの修正されたバイナリ・サーチ方法を用いて、両方の許容値を減少する。 従って、新しい相互フレーム許容値は1,0
    00になり、新しい内部フレーム許容値は125になる。 許容値の調整後に、ブロック140はコントロールをブロック110に送る。 順に、ブロック110は、図2の圧縮フレーム・ルーチンをコールする。 図2の圧縮フレーム・ルーチンは、ブロック200,210,23
    0に依って図示されているように、データに関するシリーズのテストを実施する。 前述のように、これらのテストの各々は否定にリターンして、ルーチンは、図3と4
    の相互フレーム圧縮ルーチンをコールする、ブロック2
    40にコントロールを最終的にパスする。 図3のブロック300から開始して、ルーチンは、図12のブロック1125が圧縮されていないデータのラインであることを決定して、コントロールを図3のブロック307にパスする。 ブロック307は、前のフレームのピクセル・
    ポインタの内容をセットして、図12のブロック110
    0のピクセル1101を示す。 同様に、図3のブロック310は、今のフレームのピクセル・ポインタの内容をセットして、図12のブロック1125のピクセル11
    26を示す。 次に、図3のブロック320は、デルタ・
    オフセットをゼロに初期設定する。 次に、ブロック33
    0は、図12のピクセル1101と1126が有効な相互フレーム・ピクセル・ペアを形成していることを決定する。 そこで、図3のブロック340はピクセルの変動値を決定する。 このケースで、ピクセルの変動値は4
    3,353になる、すなわち〔43,353=(84−
    255)2+(84−0)2+(0−84)2〕である。 この値は新しい相互フレーム許容値1,000より大きいので、図3のブロック350はコントロールをブロック360に送る。 順に、ブロック360は、両方のデルタ・オフセットがゼロに等しいことを決定して、コントロールを図4のブロック407にパスする。 ブロック407がコントロールをもつと、それは、ラン変数の長さを1に初期設定して、コントロールをブロック41
    0にパスする。 前述のように、この例は、図1の圧縮方法をコールするアプリケーションが、ハイブリッド圧縮、すなわち、相互フレームと内部フレームの圧縮の混合を可能にすることを想定している。 そこで、図4のブロック410は、コントロールをブロック420に送る。 ブロック420は、(1)ラインに残っている圧縮されていないピクセルの数にラン変数の長さをプラスした数値がランの長さの最小値より大きいか、または(2)ラインに残っている圧縮されていないピクセルの数がゼロに等しいかどうかについて決定する。 このケースで、ラインに残っている圧縮されていないピクセルの数(10)にラン変数の長さの値(1)をプラスした数値は、ランの長さの最小値(4)より大きい。 その結果、ブロック420は、変動値を図12のピクセル11
    26と1127のカラー属性に基づいて計算する、ブロック425にコントロールを送る((1)今のフレームのピクセル・ポインタの内容と(2)今のフレームのピクセル・ポインタの内容にラン変数の長さをプラスした値に依って表されるピクセル)。 この場合、画素のばらつき値はゼロである〔0=(84−84) +(84−
    84) +(84−84) 〕。 ゼロの「ばらつき値」
    は、125という新しい「フレーム内許容差」よりも小さいことから、図4のブロック430は制御をブロック455まで移送する。 ブロック455の方は、「ランレングス」変数を2まで増分し、制御をブロック420へ戻す。 ブロック420は、ライン内に残された未圧縮画素の数(8)に「ランレングス」変数(2)を加算した数が「ランレングス最小値」(4)よりも大きいことを決定し、結果としてブロック420は制御をブロック4
    25へ移行させる。 ブロック425は、図12の画素1
    126及び1128についての「ばらつき値」を計算する:ここでも又この値はゼロである:〔0=(84−8
    4) +(84−84) +(84−84) 〕。 その結果、図4のブロック430は、制御をブロック455
    へと移行させ、このブロック455は「ランレングス」
    変数を3まで増分する。 これに続いて、ブロック455
    は制御をブロック420まで移行させる。 さらにもう1
    度、ブロック420は、ライン内に残った未圧縮画素数(7)に「ランレングス」変数の値(3)を加えたものが「ランレングス最小値」(4)よりも大きいことを決定する。 それに続いて、ブロック420は制御をブロック425まで移行させる。 ブロック425は、図12の画素1126及び1129について「ばらつき値」を計算する。 ここで再び、画素の計算上の「ばらつき値」はゼロ〔0=(255)−255) +(0−0)
    (0−0) 〕である。 この対の「ばらつき値」は12
    5という新しい「フレーム内許容差」より小さいことから、ブロック430は再び制御をブロック455まで移行させる。 ブロック455の方は、「ランレングス」変数を4まで増分させる。 これに続いて、ブロック455
    は制御をブロック420まで移行させる。 ブロック42
    0は、ライン内に残っている未圧縮画素の数(6)に「ランレングス」変数の値(4)を加えたものが「ランレングス最小値」(4)よりも大きいことを決定する。
    その結果、ブロック420は制御をブロック425へと移行させる。 ブロック425の方は、図12の画素11
    26及び1130についての「ばらつき」値を計算する。 ここでも又、この値は、ゼロである〔0=(84−
    84) +(84−84) +(84−84) 〕。 その結果、図4のブロック430は制御をブロック455
    まで移行させ、このブロック455は、「ランレングス」変数を5まで増分させる。 これに続いて、ブロック455は制御をブロック420まで移行させる。 ブロック420は、ライン内に残された未圧縮画素の数(5)
    に「ランレングス」変数(5)を加えたものが「ランレングス最小値」(4)よりも大きいことを決定し、その結果、ブロック420は、制御をブロック425まで移行させる。 ブロック425の方は、図12の画素112
    6及び1131についての「ばらつき値」を計算する。
    しかしながら今回は、計算された「ばらつき値」は、1
    0,443〔10,443=(143−84) +(1
    43−84) +(143−84) 〕である。 この値は、125という新しいフレーム内許容差よりもはるかに大きいことから、図4のブロック430は制御をブロック435まで移送する。 ブロック435は「ランレングス」変数の絶対値を検査する。 この場合、「ランレングス」変数の値(5)は、ランレングス最小値」よりも大きい。 従って、ブロック453は制御をブロック43
    7へ移送する。 ブロック437は、ランレングスコード化として、図12の画素1126、1127、112
    8、1129及び1130をコード化する。 ブロック1
    230のバイト群1231は、画素1126、112
    7、1128、1129及び1130のランレングスコード化表示である。 (ブロック1221は、図14の方法を用いてコード化される…図9の方法はターゲット範囲内で前に圧縮されており、従ってもはや使用されない)。 前述のとおり、この群の最初のバイト(18)はランレングスの絶対値に正比例する:すなわち、ランレングスに対する実際の絶対値は、このバイトから14を減算することによって得られる。 図12のバイト群12
    21の第2のバイト41は、画素1126、1127、
    1128、1129及び1130に対する色指数である。 図10参照のこと。 (カラー参照用テーブルは、
    (84、84、84)というRGBカラー値についての色指数として41を示している)。 図4のブロック43
    7は、ひとたびランレングスをコード化すると、制御をブロック428まで移送する。 ブロック438は、
    (1)「ランレングス」変数をゼロに設定し、(2)制御をブロック440まで移送する。 ブロック440は、
    圧縮を受ける必要のある図12のブロック1125の次の画素すなわち画素1131を指すよう、「現行フレーム画素ポインタ」の内容を更新する。 同様にして、図4
    のブロック445は、図12のブロック1100の相応する画素すなわち画素1106を指すよう「先行フレーム画素ポインタ」の内容を更新する。 その後、ブロック445は制御を図3のブロック320まで移送する。 ブロック320は、デルタオフセットをゼロにリセットし、ブロック330へと制御を移行させる。 ブロック3
    30は、図12のブロック1100内の画素1106及び図12のブロック1125内の画素1106を、有効なフレーム間画素対として認識する。 その結果、ブロック340は、この対について1875という「ばらつき値」を計算する〔1,875=(143−168)
    (143−168) +(143−168) 〕。 しかしながら、この「ばらつき値」はこのとき1000という新しい「フレーム間許容差」よりも大きくなる。 その結果、ブロック350は制御をブロック360へと移行させる。 ブロック360の方は、両方のデルタオフセットがゼロに等しいことを決定し、制御を図4のブロック407まで移行させる。 ブロック407は、ひとたび制御を手中にすると、「ランレングス」変数を1に初期設定し、制御をブロック410に移行させる。 前述のとおり、この例は、フレーム間とフレーム内の圧縮の混合が有効であることを仮定している。 従って図4のブロック410は制御をブロック420に移送する。 ブロック4
    20は、ライン内に残っている未圧縮画素の数(5)に「ランレングス」変数の値(1)を加えたものが「ランレングス最小値」(4)よりも大きいことを決定する。
    その結果、ブロック420は制御をブロック425に移行させ、ブロック425は、図12の画素1131及び1132((1)「現行フレーム画素ポインタ」の内容及び(2)「現行フレーム画素ポインタ」の内容に「ランレングス」変数を加えたものによって参照指示されている画素)のカラー属性に基づき「ばらつき値」を計算する。 この場合、画素の「ばらつき値」は、300〔3
    00=(153−143) +(153−143)
    (153−143) 〕である。 125という新しい「フレーム内許容差」よりも大きい「ばらつき値」のため、図4のブロック430は、制御をブロック435に移行させる。 ブロック435は、「ランレングス」変数の絶対値(1)が「ランレングス最小値」(4)よりも小さいことを決定し、制御をブロック436へ移送する。 ブロック436は、絶対モードで画素1131、1
    132及び1133をコード化する。 (前述のとおり、
    絶対モードコード化は、3つの画素の最小値をコード化する)。 図14の方法を用いたこれらの画素の絶対コード化は、図12のブロック1230においてバイト群1
    232により表示されている。 この群の最初の2つの(00及び03)バイトは、絶対的にコード化された画素として次に続く3つのバイト49、50及び50を識別する:(49)及び(50)は、それぞれ(143、
    143、143)及び(153、153、153)のR
    GB値についての色指数である。 図10(カラー参照用テーブル)を参照のこと。 図4のブロック436は、図11の画素1131、1132及び1133をひとたびコード化すると、ブロック438まで制御を移行させる。 ブロック438は、「ランレングス」変数をゼロに設定し、制御をブロック440に移行させる(原文 抜け)。 ブロック440は、検査を受ける必要のある図1
    2のブロック1125の次の画素すなわち画素1134
    を指すように「現行フレーム画素ポインタ」の内容を更新する。 同様にして、図4のブロック445は、図12
    のブロック1100の相応する画素すなわち画素110
    9を指すように先行フレーム画素ポインタ」の内容を更新する。 図4のブロック445は、「先行フレーム画素ポインタ」をひとたび更新すると、制御を図3のブロック320まで移送する。 ブロック320は、デルタオフセットをゼロにリセットし、制御をブロック330まで移行させる。 ブロック330は、図12のブロック11
    00内の画素1109及び図12のブロック1125内の1134を有効なフレーム間画素対として認識する。
    その結果、図3内のブロック340は、この対について1475という「ばらつき値」を計算する〔1,475
    =(153−168) +(143−168) +(1
    43=168) 〕。 しかしながら、ここでも、この「ばらつき値」はこのとき1000という新しい「フレーム間許容差」よりも大きくなる。 その結果、ブロック350は制御をブロック360へと移行させる。 ブロック360の方は、両方のデルタオフセットがゼロに等しいことを決定し、図4のブロック407に制御を移行させる。 ブロック407は、ひとたび制御を手中にすると、「ランレングス」変数を1に初期設定し、制御をブロック410へと移行させる。 上述のように、この例では、フレーム間及びフレーム内の圧縮の混合が有効であることが仮定されている:かくして、図4のブロック4
    10は、制御をブロック420へと移送させる。 しかしながらこの時点で、ブロック420は、ライン内に残された未圧縮画素の数(2)に「ランレングス」変数の値(1)を加えたものが「ランレングス最小値」(4)よりも小さいことを決定する。 その結果、ブロック420
    はブロック465に制御を移送する。 ブロック465
    は、「ランレングス」変数の絶対値を評価し、その値が1であることを決定した時点で、制御をブロック469
    へと移送する。 ブロック469は、ブロック1230の絶対コード化された群1232と組合わせることによって、図12のブロック1125内の画素1134及び1
    135をコード化する。 画素1131、1132及び1
    133と組合わさった状態での(これらの画素はブロック1230のバイト群1232として以前にコード化されている)画素1133及び1134のバイト群は、図12のブロック1240内でバイト群1242により表示されている。 この群の最初の2つのバイト(00及び05)は、絶対的にコード化された画素として次に続く5つのバイト(49、50、50、49及び50)を識別する:(49)及び(50)は、それぞれ(143、
    143、143)及び(153、153、153)のR
    GB値に対する色指数である。 図10(カラー参照用テーブル)を参照のこと。 図4のブロック469が図12
    のブロック1240内の1242のバイト群を作り出した後、図4のブロック469は、ビットマップの終りのエスケープコート(ブロック1240内のバイト群12
    43)をコード化する。 ビットマップの終りのコード化は、14により直接的に説明されている。 図4の1つのブロック469はこの最後のバイト群をコード化し、ルーチンは制御を図3のブロック300へと移行させる。
    図12のブロック1125の圧縮が完全であることから、図3のブロック300は制御をブロック305に移行させる。 その後、ブロック305は制御を図2のブロック260へと戻す。 この時点からブロック260は制御を図1のブロック120へと戻す。 ブロック120
    は、6〜11バイトのターゲット範囲に関する圧縮されたデータのサイズ(図12のブロック1240)を検査する。 このパスで、図14のコード化方法は11バイト(すなわちターゲット範囲の最高限度)までデータを圧縮することができた。 かくして、図14のコード化方法は、ターゲット範囲内で図12のブロック1240のデータを圧縮した。 その上、図14のコード化方法は、図9のコード化方法よりもはるかに詳細をコード化した。
    図12のブロック1210を図12のブロック1240
    と比較されたい。 図1のブロック120は図12のブロック1240をターゲット範囲内にあるものとして認識することから、図1のブロック120はブロック105
    へと移行する。 ブロック105は、全てのルーチンが全ての生ビデオデータを圧縮したことを認識する。 その結果、ブロック105は、制御をブロック180まで移送させる。 ブロック180は、図1の圧縮方法を呼出したアプリケーションまで戻る。 この時点で、両方のデータフレームがターゲット範囲内で圧縮されている状態で、
    圧縮例は完成する。 圧縮解除例 一例として、図11及び12において圧縮されているビデオデータのフレームのための圧縮解除プロセスが図1
    3に示されている。 この例について以下で説明するが、
    読者のために、この例の以下のような概観が提供されている。 まず第1に、この例は、図9の方法を用いてコード化されたデータの圧縮解除を例示する(図13のブロック160、1310、1210及び1320)。 第2
    に、この例は、図14の方法を用いてコード化されたデータの圧縮解除を例示する(図13のブロック119
    0、1340、1240及び1360)。 これらの方法の両方について、圧縮解除プロセスは、図9の「圧縮解除方法」ルーチン及び図8の「圧縮解除フレーム」ルーチンを追跡している。 その上、圧縮例の場合と同様に、
    圧縮解除例は図10のカラーテーブルを使用し続ける。
    まず第1に、この例はフレームnの圧縮されたデータを圧縮解除する。 第2にフレームnのデータがひとたび圧縮解除された時点で、フレームn+1のデータは圧縮解除され、フレームnの上部に直接書き込まれてフレームn+1の圧縮解除されたバージョンを生成する。 図9のコード化されたデータの圧縮解除に関しては、プロセスは図7の「圧縮解除方法」ルーチンで始まる。 ブロック700で始まって、ルーチンはビデオムービーの圧縮されたデータを受諾する。 その後、ブロック710が、圧縮解除を必要としているフレームが2つあることを決定し、制御をブロック720まで移行させる。 ブロック7
    20の方は、第1のフレーム、図13のブロック116
    0を検索する。 その後、図7のブロック730は図8の「圧縮解除フレーム」ルーチンを呼出す。 図8のブロック810は、圧縮ビデオデータからの第1のバイト群すなわち図13のブロック1160内のバイト群1161
    を検索する。 図8のブロック810がこのバイト群をひとたび検査すると、ブロック815、820、825、
    830及び880が、図13のバイト群1161の性質を決定するべくデータについて一連のテストを行なう。
    この場合、図8のブロック830は、ランレングスコード化として図13のバイト群1161を認識する。 その後、図8のブロック830は、制御をブロック855まで移送させる。 図10のカラー参照用テーブルを用いて、ランレングスの色指数(41)がRGB値(25
    5、0、0)を表わしていることを決定する。 従って、
    図8のブロック855は、図13のブロック1310内の画素1301をペイントする。 (ブロック1310
    は、フレームnの圧縮解除バージョンを表わす)。 次に、図8のブロック860は、ルーチンが図8のブロック865まで制御を移行させる前に、ブロック1160
    内のバイト群1161の第1のバイトによりもともと表示されていたランレングスの残りの絶対値を減分させる。 この場合、ブロック865は、ブロック860がランレングスの残りの絶対値を4から3へ減分させたことを決定する。 その結果、ブロック865はブロック85
    5まで制御を戻すことになる。 この要領で、ブロック8
    55、860及び865により形成されたループは、図13のブロック1310内の画素1301−1304をペイントする。 図8のブロック855、860及び86
    5によって形成されたループがひとたび図13の画素1
    301〜1304をペイントすると、図8のブロック8
    65は制御をブロック810まで戻す。 ブロック810
    の方は、圧縮ビデオデータから次のバイト群すなわち図13のブロック1160内のバイト群1162を検索する。 ここでも又図8のブロック830はこのバイト群をランレングスコード化として認識する。 その結果、ブロック855、860及び865により形成されたループは、図3のブロック1300内の画素1305、130
    5、1307、1308、1309及び1310をペイントする。 このループがひとたびこれらの画素すべてをペイントした時点で、図8のブロック865は制御をブロック810に戻す。 ここでも又、ブロック810は、
    圧縮ビデオデータからの次のバイト群すなわち図13のブロック1160内のバイト群1163を検索する。 この場合、図8のブロック815は、ビットマップの終りのコード化として図13のバイト群1163を認識し、
    図8のブロック840まで制御を移送する。 結果として、ブロック840は図7のブロック740に制御を戻すことになる。 ブロック740は、新たに圧縮解除されたフレーム(図13のブロック1310)を検査して、
    それが分割フレームの上半分のみであるか否か決定する。 この場合、図13のブロック1310は分割フレームの上半分ではない。 その結果、図7のブロック740
    はブロック750まで制御を移送させる。 ブロック75
    0の方は、例えばビデオモニター上にフレームを表示する。 ブロック750は、ひとたびフレームを表示すると、制御をブロック710まで移送させる。 圧縮解除プロセスは、ブロック710がフレームn+1すなわち図13のブロック1210が圧縮解除を必要としていることを決定した時点で、続行する。 その結果、ブロック7
    20は、(1)図13のブロック1210を検索し、
    (2)図7のブロック730に制御を移送する。 その後、ブロック730が図8の「圧縮解除フレーム」ルーチンを呼出す。 図8のルーチンは、ブロック1310
    (フレームn)の上部で直接図13のブロック1210
    を圧縮解除する。 この要領で、このルーチンはブロック1320(フレームn+1)を生成する。 フレームn+
    1の実際の圧縮解除は、図8のブロック810が図13
    のブロック1210からのバイト群1211を検索した時点で開始する。 図8のブロック830の方は、(5)
    という絶対値及び41という色指数をもつランレングスコード化として図13のバイト群1211を認識する。
    図10のカラーテーブルを用いて、ルーチンは、(4
    1)という色指数が(84、84、84)というRGB
    値を説明していることを決定する。 従って、図8のブロック855、860及び865は、ブロック1320内の次に利用可能な5つの画素すなわち画素1321、1
    322、1323、1324及び1325をペイントする。 ループがこれらの画素をひとたびペイントすると、
    図8のブロック865は制御をブロック810まで戻す。 その後、ブロック810は圧縮ビデオデータから次のバイト群すなわち図13のブロック1210内のバイト群を検索する。 従って、図8のブロック825はデルタコード化として図13のバイト群1212を認識する。 その結果、ブロック825は制御をブロック850
    に移送する。 ブロック850は水平及び垂直データオフセットの絶対値を検査する。 この場合、水平デルタオフセットは5という絶対値を有し、垂直デルタオフセットはゼロという絶対値を有する。 その結果、ルーチンはブラシを図13のブロック1300内で5画素分だけ右へつまり画素1310まで移動させる。 図8のブロック8
    45がひとたびブラシを移動させたならば、ルーチンは制御をブロック810まで戻す。 さらにもう一度ブロック810は、圧縮ビデオデータからの次のバイト群すなわち図13のブロック1210内のバイト群1213を検索する。 図8のブロック815は、図13のバイト群1213をビデオマップの終りのコード化として解釈し、制御を図8のブロック840まで移送する。 ブロック840の方は制御を図7のブロック740まで戻す。
    ブロック740は、図13のブロック1320が分割フレームの上半分のみではないことを決定し、結果としてブロック750まで制御を移送する。 ブロック750
    は、図13のブロック1320を表示、図7のブロック710まで制御を移送する。 この時点で、ルーチンはブロック710を介して、それがムービーの全フレームを圧縮解除したことを発見し、制御をブロック760まで移送する。 ブロック760は、図7の圧縮解除ルーチンを呼出したアプリケーションまで戻る。 この時点で、図9の方法を用いたフレームnとフレームn+1のコード化されたバージョンが圧縮解除され表示されている。 次に、この例は、図14の方法を用いてコード化されたデータのための圧縮解除プロセスを例示する。 ここでも又、プロセスは図7のブロック700で始まる。 ブロック700は圧縮ムービーデータすなわち図13のブロック1190(フレームn)及び1240(フレームn+
    1)を受諾する。 その後ブロック710は、フレームn
    が圧縮解除を必要としていることを決定し、制御をブロック720まで移送する。 ブロック720の方は、図1
    3のブロック1190を検索し、図7のブロック730
    に制御を移行させる。 ブロック730は図8の「圧縮解除されたフレーム」ルーチンを呼出す。 「フレーム圧縮解除」ルーチンはブロック810でその圧縮解除を開始する。 ブロック810は、図13のブロック1190内のバイト群1191を検索する。 図8のブロック830
    の方は、(4)という絶対値及び(43)という色指数をもつランレングスコード化としてこのバイト群を認識する(ランレングスコード化の絶対値は、第1のバイトの値から14を減算することつまり18−14=4によって得られる)。 図10のカラー参照用テーブルを参照することによって、ブロック855、860及び865
    により形成されたループは、図14のブロック1340
    内の画素1341、1342、1343及び1344をペイントする。 このルーチンがこれらの画素をひとたびペイントしたならば、図8のブロック865は制御をブロック810まで戻す。 ブロック810の方は、圧縮されたビデオデータから次のバイト群すなわち図13のブロック1190内のバイト群1192を検索する。 ここで、もう1度、ブロック830は、ランレングスコード化としてこのバイト群を認識し、制御をブロック855
    へと移行させる。 図10のカラー参照用テーブルを用いて、図8のブロック855は、フレームnの圧縮解除されたバージョン内の次に利用可能な画素すなわち図13
    のブロック1340内の画素1345を着色する。 その後ブロック860は、ランレングスコード化の最初のバイトの値を減分することによって、ランレングスの残りの絶対値を減分する。 ブロック865の方は、ナル値に対するランレングスの残りの絶対値を検査する。 この要領で、ブロック855、860及び865により形成されたループは図13のブロック1340内の画素134
    5、1346、1347、1348、1349及び13
    50をペイントする。 これらの画素全てがひとたひペイントされると、ブロック865は制御をブロック810
    まで移送する。 この時点で、ブロック810は圧縮ビデオデータからの次のバイト群すなわち図13のブロック1190内のバイト群1193を検索する。 この場合、
    ブロック815はビットマップの終りのコード化としてバイト群を認識し、制御をブロック840に移送する。
    ブロック840の方は制御を図7のブロック740まで戻す。 ブロック740は、図13のブロック1340が分割フレームの上半分でないことを決定し、その後制御をブロック750まで移送する。 ブロック750は、
    (1)フレームを表示し、(2)制御をブロック710
    まで戻す。 この時点で、ブロック710は、ルーチンがフレームn+1(図13のブロック1240)を圧縮解除しなかったことを決定する。 その結果図7のブロック710はブロック720まで制御を移送する。 ブロック720の方は、(1)図13のブロック1240(フレームn+1)を検索し、(2)制御を図7のブロック7
    30まで移送する。 その後、ブロック730は図8の「フレーム圧縮解除」ルーチンを呼出す。 フレームn+
    1の圧縮解除は、ブロック810が図13のブロック1
    240内でバイト群1221を検索するときに開始する。 その後、図8のブロック830は、(5)という絶対値及び(4)という色指数をもつランレングスコード化としてこのバイト群を認識する。 図10のカラー参照用テーブルを参照すると、図8のブロック855はこの指数をRGB値(84、84、84)を表わすものとして認識する。 その結果、図8のブロック855、860
    及び865は、図13のブロック1350内で画素13
    61、1362、1363、1364及び1365をペイントする。 このループがひとたびこれらの画素をペイントすると、図8のブロック865は制御をブロック8
    10に戻す。 この時点で、ブロック810は、圧縮ビデオデータから次のバイト群すなわち図13のブロック1
    240内のバイト群1242を検索する。 ブロック88
    0の方はこのバイト群を絶対モードコード化として認識し、制御をブロック885に移送する。 ブロック885
    は、最初の絶対コード化された画素の色指数すなわち4
    9を検索する。 この時点から、ブロック885は、図1
    0の色指数テーブルを用いて画素のRGB値すなわち(143、143、143)を決定する。 その後、図8
    のブロック885は、次の利用可能な画素すなわち図1
    3のブロック1360内の画素1366を着色する。 次に、ブロック890は、ペイントすべき絶対コード化された画素の残数を減分する。 この場合、ブロック890
    は、図13のバイト群1242内の第2のバイトを減分することによってこのタスクを達成する。 (第2のバイト、05、は絶対コード化された画素の数を表わす)。
    図8のブロック890がひとたびこのバイトを減分すると、ブロック895の方は、ブロック885、890及び895によって形成されたループが絶対コード化された全ての画素をペイントしたか否かを決定するため、第2のバイトの残りの値を検査する。 この要領で、ループは、図13のブロック1360の画素1366、136
    7、1368、1369及び1370をペイントする。
    その後、ブロック895は制御をブロック810まで戻す。 この時点で、ブロック810は、圧縮ビデオデータからの次のバイト群すなわち図13のブロック1240
    内のバイト群1243を検索する。 図8のブロック81
    5はこのバイト群をビットマップの終りのコード化として認識し、制御をブロック840に移送する。 ブロック840の方は図7のブロック740に制御を戻す。 ブロック740は、図13のブロック1360が分割フレームの上半分でなかったことを決定し、制御をブロック7
    50に移送する。 その後、ブロック750はフレームを表示し制御をブロック710に移送する。 この時点で、
    ブロック710は、ルーチンがムービーの全てのフレームを圧縮解除したことを認識する。 その結果、ブロック710は制御をブロック760まで移送する。 ブロック760は、圧縮解除方法を呼出したアプリケーションプログラムまで戻る。 この時点で、この方法は、図14の方法を用いて圧縮されたフレームn及びn+1を表わすデータを圧縮解除した。 図14のコード化方法の有利性は、図13のブロック1320(図9の方法を用いて圧縮、圧縮解除されたフレームn+1)に比べて、図13
    のブロック1360(図14の方法を用いて圧縮、圧縮解除されたフレームn+1)のデイテールが強化されているということによって明示されている。

    【図面の簡単な説明】

    【図1】圧縮ルーチンのフローチャートである。

    【図2】図1の圧縮フレームルーチンのフローチャートである。

    【図3】図のフレーム間及びフレーム内圧縮ルーチンのフローチャートである。

    【図4】図3に続くフローチャートである。

    【図5】図2のフレーム内圧縮ルーチンのフローチャートである。

    【図6】図1の分割フレームルーチンのフローチャートである。

    【図7】圧縮解除のフローチャートである。

    【図8】図7の従来例で利用可能なルーチンである、圧縮解除フレームルーチンのフローチャートである。

    【図9】本発明と共に使用される従来技術の符号化法を示すチャートである。

    【図10】本発明と共に使用される色参照用テーブルである。

    【図11】図5のフレーム内圧縮ルーチンを使用した圧縮データの生成を示す。

    【図12】図3及び図4のフレーム間圧縮ルーチンを使用した圧縮データの生成をしめす。

    【図13】図8の圧縮解除フレームルーチンを使用したフレーム内圧縮データ及びフレーム間圧縮データの両方の圧縮解除を示す。

    【図14】本発明と共に使用される新規の符号化法を示すチャートである。

    フロントページの続き (72)発明者 エリック レドゥー アメリカ合衆国 ワシントン州 98052 レッドモンド 1 ワンハンドレッドアン ドセヴンティフィフス アベニュー ノー スイースト 3841 (72)発明者 ディヴィッド エム メイムーデス アメリカ合衆国 ワシントン州 98112 シアトル イースト ヘレン ストリート 2614 (72)発明者 ダニエル ジェイ ミラー アメリカ合衆国 ワシントン州 98052 レッドモンド ノースイースト シックス ティフィフス コート 14607

    高效检索全球专利

    专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

    我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

    申请试用

    分析报告

    专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

    申请试用

    QQ群二维码
    意见反馈