次の方法で共有


IAMTimecodeReader インターフェイス

IAMTimecodeReader インターフェイスは、アプリケーションが外部デバイスからの SMPTE または MIDI タイムコードを読み込むことを可能にする。MSDVMSTape ドライバは、外部 DV または MPEG-2 カムコーダからタイムコードを読み込むためのこのインターフェイスをサポートする。

ハードウェアの要件

ハードウェアの要件については、「IAMExtTransport インターフェイス」を参照すること。

IAMTimecodeReader インターフェイスは、IUnknown から継承されるメソッドに加え、以下のメソッドを公開する。

メソッド 説明
GetTCRMode タイムコード リーダーのプロパティを取得する。
SetTCRMode タイムコード リーダーのプロパティを設定する。
put_VITCLine タイムコード リーダーがタイムコードを読み取るときに使う VITC ラインを指定する。
get_VITCLine タイムコード リーダーがタイムコードを読み取るときに使う VITC ラインを取得する。
GetTimecode 最新のタイムコード、ユーザービット、ストリーム内で有効なフラグ値を取得する。

注意

Windows Driver Model (WDM) では、WDM ビデオ キャプチャ フィルタWDMVideoCaptureFilter は、WDM ドライバが PROPSETIC_TIMECODE_READER プロパティ セットをサポートするのであれば、このインターフェイスを自動的に公開する。

SMPTE タイムコードはフレーム アドレシング システムで、ビデオ ソースとオーディオ ソースを識別し、自動トラック同期を実現して、さらにソース マテリアルに関する付加データのコンテナとしての役割を果たす。SMPTE タイムコードの一番の目的は、ビデオとオーディオ用の、マシンで読み取り可能なアドレスを提供することである。これは hh:mm:ss:ff (時間、分、秒、フレーム) フォーマットで表示され、ANSI/SMPTE 12-1986 で定義されている。

通常、アプリケーションがタイムコードを保存するには 2 とおりの方法がある。キャプチャ ファイルに対して、追加のストリームとして書き込む方法と、拡張 AVI ファイル インデックスに格納される不連続性テーブルとして書き込む方法である。タイムコードは、キャプチャや再生をトリガする場合、または最終結果に至るまでのソース マテリアルの編集方法を記述する EDL (Edit Decision List) を作成する場合に、一般的に使われる。

タイムコードをキャプチャする場合は、これを、自身のメディア タイプを持つ個別のストリームとして扱う。マルチプレクサ フィルタを作成することによって、適切なファイルがこれを使える。ただし、テープからタイムコードを読み取る場合は、しばしばエラーが発生する。これは、テープのデータが抜けていたり、テープに関するその他の機械的な問題が原因である。このような場合、タイムコード ソース フィルタは単純にサンプルを破棄し、次の有効なサンプルに不連続性のプロパティのマークを付ける。

タイムコードを使って、タイムコード付き ("ストライプ") ビデオテープからのキャプチャまたは再生をトリガする場合は、次の順序で操作を行う。

  1. キャプチャ グラフを作成し、目的の AVI ファイルを開き、必要に応じてディスク領域を事前に割り当てる。キャプチャするマテリアルを既存の AVI ファイルに追加する場合は、書き込む前にファイルの終端をシークする。キャプチャ グラフはこの位置でポーズする。
  2. VCR のキャプチャ開始点を検索し、タイムコードを記録する。この値は手動でプログラムに入力することも、アプリケーションが自動的に読み取ることもできる。自動読み取りの場合は、グラフが実行していることが求められる。しかし、ファイル マルチプレクサの入力ピン上のストリーム制御インターフェイスが、受信サンプルを破棄することによってキャプチャを効率的に制御している。
  3. VCR をプリロール位置まで頭出しする。これは通常、ターゲット点の 5 秒前である。
  4. VCR とグラフを開始する。トリガ点、またはトリガ点からファイル ライタのプリロールを引いた時点に達すると、ストリーム制御インターフェイスはファイル マルチプレクサを解放し、ファイル ライタへのメディア サンプルのストリーミングを開始する。
  5. キャプチャ処理は手動で停止することも、ストリーム制御インターフェイスで時間幅のプロパティを設定することによって停止することもできる。

プリロール時とキャプチャ処理時の両方について、不連続なタイムコードを考慮する必要がある。タイムコードは一般的に、プリロールとキャプチャの開始点以降、連続的、かつ単調増加していくことが望まれる。この状態であれば、IMediaSeeking::ConvertTimeFormat メソッドによる、必ずしも明確ではない相対的なストリーム タイムを計算しなくて済む。また、タイムコードが、キャプチャをトリガする唯一の制御信号である必要もない。Intercast やクローズド キャプション データ (XDS) などのように、垂直同期間隔に格納されるタイム スタンプ付きデータを使って、ビデオ データとオーディオ データのディスクへのストリーミングを開始できる。

フィルタ開発者 : 外部デバイスが SMPTE/MIDI タイムコード情報を読み取る方法を指定する場合は、外部デバイス フィルタにおいてこのインターフェイスを実装する。

フィルタ上で IMediaSeeking インターフェイスを公開することによって、アプリケーションはその IMediaSeeking::ConvertTimeFormat メソッドを使って、タイムコードを Microsoft® DirectShow® 基準タイムに変換できる。

外部デバイスは、タイムコードを読み取り、そのコントロール インターフェイスを介してこれをコンピュータに送信できる必要がある。外部デバイスがこの機能を備えていない場合は、コンピュータにタイムコード リーダー カードを装着するか、キャプチャされたビデオ フレーム内の VITC (Vertical Interval Timecode)、またはオーディオ信号としてキャプチャされた LTC (Linear Timecode) を、DirectShow タイムコード サンプルに変換するソフトウェア デコーダを作成する必要がある。