IAMAsyncReaderTimestampScaling
COM公式ドキュメント
プルモードのソースフィルターがより大きなファイルサイズをサポートできるようにします。
解説(Remarks)
プルモデルでは、パーサーフィルターが IAsyncReader::Request を呼び出して、ソースフィルターにデータを要求します。このメソッドの入力はメディアサンプルです。サンプルのタイムスタンプは、ストリーム内で読み取る位置をバイトオフセットとして指定します。
既定では、タイムスタンプは次の式を使用します。Time = バイトオフセット × 10000000。このスケーリング係数により、実効ファイルサイズは約 860 GB に制限されます。より大きなファイルサイズをサポートするには、SetTimestampMode を値 TRUE で呼び出します。この呼び出しによりスケーリング係数が 1 に設定されるため、式は次のようになります。Time = バイトオフセット。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
フィルターのタイムスタンプモードを取得します。
| pfRaw | BOOL* | out | ブール値を受け取ります。
|
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
フィルターのタイムスタンプモードを設定します。
| fRaw | BOOL | in | ソースフィルターのタイムスタンプの単位を指定します。
既定値は FALSE です。 |
戻り値
このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。
解説(Remarks)
大きなファイル(850 GB を超えるもの)をサポートするには、下流のパーサーフィルターがこのメソッドを値 TRUE で呼び出すことができます。下位互換性のため、既定の設定は FALSE です。このメソッドはピンが接続されるときに呼び出します。
アプリケーションはこのメソッドを呼び出すべきではありません。呼び出すと、パーサーフィルターがタイムスタンプを誤って解釈する原因となります。
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 方式にも切替可。#define global IID_IAMAsyncReaderTimestampScaling "{CF7B26FC-9A00-485B-8147-3E789D5E8F67}" #usecom global IAMAsyncReaderTimestampScaling IID_IAMAsyncReaderTimestampScaling "{}" #comfunc global IAMAsyncReaderTimestampScaling_GetTimestampMode 3 sptr #comfunc global IAMAsyncReaderTimestampScaling_SetTimestampMode 4 int ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。