Win32 API 日本語リファレンス
ホームMedia.DirectShow › IAMAsyncReaderTimestampScaling

IAMAsyncReaderTimestampScaling

COM
IIDcf7b26fc-9a00-485b-8147-3e789d5e8f67継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

プルモードのソースフィルターがより大きなファイルサイズをサポートできるようにします。

解説(Remarks)

プルモデルでは、パーサーフィルターが IAsyncReader::Request を呼び出して、ソースフィルターにデータを要求します。このメソッドの入力はメディアサンプルです。サンプルのタイムスタンプは、ストリーム内で読み取る位置をバイトオフセットとして指定します。

既定では、タイムスタンプは次の式を使用します。Time = バイトオフセット × 10000000。このスケーリング係数により、実効ファイルサイズは約 860 GB に制限されます。より大きなファイルサイズをサポートするには、SetTimestampMode を値 TRUE で呼び出します。この呼び出しによりスケーリング係数が 1 に設定されるため、式は次のようになります。Time = バイトオフセット。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 HRESULT GetTimestampMode(BOOL* pfRaw)

フィルターのタイムスタンプモードを取得します。

pfRawBOOL*out

ブール値を受け取ります。

Value Meaning
TRUE
タイムスタンプはバイト単位です。
FALSE
タイムスタンプはバイト × 10000000 単位です。バイト単位のオフセットを求めるには、サンプル時間を 10000000 で除算します。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

vtbl 4 HRESULT SetTimestampMode(BOOL fRaw)

フィルターのタイムスタンプモードを設定します。

fRawBOOLin

ソースフィルターのタイムスタンプの単位を指定します。

Value Meaning
TRUE
タイムスタンプはバイト単位です。
FALSE
タイムスタンプはバイト × 10000000 単位です。バイト単位のオフセットを求めるには、サンプル時間を 10000000 で除算します。

既定値は FALSE です。

戻り値

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

大きなファイル(850 GB を超えるもの)をサポートするには、下流のパーサーフィルターがこのメソッドを値 TRUE で呼び出すことができます。下位互換性のため、既定の設定は FALSE です。このメソッドはピンが接続されるときに呼び出します。

アプリケーションはこのメソッドを呼び出すべきではありません。呼び出すと、パーサーフィルターがタイムスタンプを誤って解釈する原因となります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IAMAsyncReaderTimestampScaling "{CF7B26FC-9A00-485B-8147-3E789D5E8F67}"
#usecom global IAMAsyncReaderTimestampScaling IID_IAMAsyncReaderTimestampScaling "{}"
#comfunc global IAMAsyncReaderTimestampScaling_GetTimestampMode  3 var
#comfunc global IAMAsyncReaderTimestampScaling_SetTimestampMode  4 int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。