English
PROGRAMMER'S GUIDEストリームシステムライブラリ
戻る進む
ストリームシステムライブラリ

4.ストリームアクセスの概要


4.1 ストリームとストリームグループ

 (1)ストリーム
 同一サブヘッダ(FN、CN、SM、CI)をもち、基本的に同一処理されるセクタ群をストリームと呼びます。物理的に連続したセクタである必要はありません。

 (2)ストリームグループ
 音声と映像のように、複数のストリームをインタリーブさせて記録しておくことにより、関連したストリームを同期させてアクセスすることができます。このように関連するストリームの集合をストリームグループと呼びます。

4.2 ストリームの範囲

 ストリームの範囲は以下の2通りの方法で規定されます。

 (1)ファイルによるストリームオープン
 ファイル識別子を指定してストリームをオープンすることができます(STM_OpenFid)。この場合、ファイルの開始フレームアドレスから終了フレームアドレスまでがストリームの範囲となります。
 終了フレームアドレスは、実際には、開始フレームアドレスとファイルの総セクタ数から計算されます。インタリーブされているファイルの場合は、一定のインタリーブファクタで記録されている(固定インタリーブ)ものとして計算します。

 (2)フレームアドレス範囲を直接指定してストリームオープン
 利用者がストリームのフレームアドレス範囲を直接指定してストリームをオープンすることができます(STM_OpenFrange)。この場合は指定された範囲がそのままストリームの範囲となります。
 フレームアドレス範囲は先頭フレームアドレスと物理セクタ数を指定します。

4.3 ストリームアクセス手順

 ストリームのアクセスは以下の手順で行います。

図4.1 ストリームアクセス手順

 ストリームのアクセスイメージを以下に示します。

図4.2 ストリームアクセスの概要

 (a)再生開始
 ストリームグループに属するストリームの内、開始FADが最も前方にあるストリームAから再生を始めます。

 (b)シーク
 再生するストリームが無くなったら、次のストリーム(ストリームB)の開始位置にピックアップを移動し再生します。

 (c)ループ
 最終ストリーム(ストリームC)の再生を終えたら、ループ開始ストリーム(デフォルトは、最も前方のストリーム)の開始位置にピックアップを移動し再生します。このように、ループ開始ストリームにピックアップを移動する回数をループ回数と呼びます。

 (d)絞り、バッファ区画
 バッファ区画は、ストリームと1対1に割り当てます。
 ストリームキーの条件に適合したセクタデータは、バッファ区画に格納されます。条件に合わないセクタデータは、次の絞りに送られます。

 (e)データ転送
 サーバ関数が呼ばれると、各ストリームに設定された転送開始位置と現在の再生位置を比較し、転送開始位置に達しているストリームがあると、指定された転送領域に1回ずつデータ転送を試みます。
 転送途中で転送レジスタやDMAが使用中になった場合は、その時点でサーバ関数を終了し、次回はその続きのストリームからデータ転送を試みます。

 (f)ユーザ登録転送関数
 転送関数を登録することにより、圧縮データを展開するなど、データを処理しながら転送することができます。

 (g)ユーザ独自のバッファ管理
 転送領域や転送関数を設定しない場合は、アプリケーションプログラム自身によってCDバッファのデータを管理することができます。

 (h)転送ゲート
 転送ゲートの開閉によって、ストリームの流れを一時的に停止したり、再開したりできます。転送ゲートが閉じられている場合は、ストリームデータはCDバッファ内に蓄えられます。

4.4 分岐再生

 あるストリームを再生中に、次に再生すべきストリームがわかるような再生方法を分岐再生と呼びます。分岐再生は、ループストリームを先頭のストリームとし(STM_SetLoop)、ループ再生時の再読み込みをしない(STM_OpenFid, STM_OpenFrange)指定を行うことによって実現できます。

図4.3 分岐再生

 この場合も前方のストリームから順に読み込みますが、最終ストリームを読み込み終えると最も前方の、まだ読み込んでいないストリームを読み込み始めます。図4.3でAの読み込み中にB、Bの読み込み中にC、Cの読み込み中にDをオープンするとABCDの順に読み込むことができます。BとDのように再生範囲が重なっていてもBのデータが読み込まれることはありません。
 図4.3の場合、ストリームBからストリームCにピックアップが移動する間の時間が必要です。このような無駄な時間が極力発生しないようにするためには、ストリームの再生順はディスクの前方から後方となるように配置する必要があります。

4.5 常駐ストリーム

 比較的短いストリームを、繰り返し必要に応じて取り出すような場合は、常駐ストリームとしてオープンすることができます(STM_OpenResi)。常駐ストリームを利用することで、同一データを何度もCDから読み込むのではなく、あらかじめCDバッファに常駐させておくことができます。

 (1)常駐ストリームの読み込み
 常駐ストリームに指定されたファイルは、1回だけCDバッファに読み込まれます。ループ開始ストリームに戻ってアクセスを繰り返す場合には読み込まれません。したがって、ストリームのアクセスの初回に、常駐ストリームのファイルの範囲の手前から再生を開始しなければなりません。
 ストリームのアクセスの途中で常駐ストリームをオープンするような場合、再生位置が常駐ストリームの範囲を超えているとCDバッファに読み込まれないので、注意が必要です。

図4.4 常駐ストリームの読み込み

 (2)常駐ストリームの転送開始フレームアドレス
 いったん常駐ストリームとしてCDバッファに格納されてしまえば、任意のタイミングで転送が可能となります。このタイミングは常駐ストリームに対して転送開始フレームアドレスを設定することで行います(STM_SetTrFad)。
 通常のストリームのアクセスにしたがって再生位置が進み、設定された転送開始フレームアドレスを超えると、常駐していたストリームデータが転送されます。また、常駐ストリームの場合、ストリームデータはホスト領域に転送された後も、CDバッファから削除されません。

 (3)SIMMファイル、SCSIファイルの利用(デバッグ時)
 SIMMファイル、SCSIファイルの場合、常駐ストリームとしてのみ利用可能です。
 指定されたファイルがSIMMファイルかSCSIファイルの場合、CDバッファに常駐せずに、アクセス毎に読み込みを行います。

4.6 CD再生中に設定を追加・変更する場合の注意

 ストリームシステムでは、CD再生中にストリームキーなどの設定を動的に変更することができます。ただし、CDブロックに対して処理を依頼した後、設定内容が有効になるまでには一定の遅延が伴います。
 このため、以下の関数は目標位置より10セクタ以上手前で発行する必要があります。

図4.5 関数発行のタイミング

 (1)設定が有効となるまでに遅延を伴う関数
表4.2 遅延が伴う関数
機能
関数名
ファイル識別子によるストリームのオープン
STM_OpenFid
再生範囲によるストリームのオープン
STM_OpenFrange
常駐ストリームのオープン
STM_OpenResi
ストリームのクローズ
STM_Close
ストリームキーの設定
STM_SetKey
絞りとCDバッファ区画の接続
STM_ConnectCdbuf


戻る進む
PROGRAMMER'S GUIDEストリームシステムライブラリ
Copyright SEGA ENTERPRISES, LTD., 1997