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

IWMSyncReader

COM
IID9397f121-7705-4dc9-b049-98b698188414継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

IWMSyncReader インターフェースは、同期呼び出しを使用して ASF ファイルを読み取る機能を提供します。

メソッド 21

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

vtbl 3 HRESULT Open(LPWSTR pwszFilename)

Open メソッドは、読み取り用にファイルを開きます。IWMReader::Open とは異なり、このメソッドは同期呼び出しです。

pwszFilenameLPWSTRin開くファイル名を格納したワイド文字の null 終端文字列へのポインター。ASF ファイル拡張子を持つ有効なファイル名、または MP3 ファイル名でなければなりません。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

解説(Remarks)

同期リーダーはストリーミングメディアをサポートしません。pwszFilename に URL を渡すとエラーになります。

vtbl 4 HRESULT Close()

Close メソッドは、同期リーダーからファイルを削除します。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

vtbl 5 HRESULT SetRange(ULONGLONG cnsStartTime, LONGLONG cnsDuration)

SetRange メソッドを使用すると、同期リーダーによる再生の開始時刻と継続時間を指定できます。

cnsStartTimeULONGLONGin再生を開始するファイル内のオフセット。この値は 100 ナノ秒単位で表されます。
cnsDurationLONGLONGin継続時間(100 ナノ秒単位)。ファイルの末尾まで再生を続けるにはゼロを指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
cnsDuration パラメーターが負の値です。
E_OUTOFMEMORY
メソッドが内部オブジェクト用のメモリを割り当てられませんでした。
E_UNEXPECTED
同期リーダーにファイルが読み込まれていません。

解説(Remarks)

このメソッドはファイル全体に対する範囲のみを指定します。個々のストリームに対して範囲を指定することはできません。

SetRange は、ファイルが読み込まれた後であればいつでも呼び出すことができます。

指定した開始時刻は、最初に受信するサンプルのプレゼンテーション時刻とは限りません。同期リーダーは、指定した時刻の前にあるキーフレームから始めて動画サンプルを配信します。

vtbl 6 HRESULT SetRangeByFrame(WORD wStreamNum, ULONGLONG qwFrameNumber, LONGLONG cFramesToRead)

SetRangeByFrame メソッドは、開始する動画フレーム番号と読み取るフレーム数で指定されたファイルの一部を読み取るように同期リーダーを構成します。

wStreamNumWORDinストリーム番号。
qwFrameNumberULONGLONGin再生を開始するフレーム番号。ファイル内の最初のフレームは 1 です。
cFramesToReadLONGLONGin読み取るフレーム数。ファイルの末尾まで再生を続けるには 0 を渡します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
cFramesToRead に負の数が含まれています。

解説(Remarks)

呼び出しが成功すると、選択したフレームのプレゼンテーション時刻に基づいて、すべてのストリームが同じ位置に同期されます。その後の GetNextSample の呼び出しでは、SetRangeByFrame の呼び出しで指定したストリームだけでなく、アクティブなすべてのストリームのサンプルが取得されます。フレーム単位で単一の動画ストリームのサンプルのみを受信したい場合は、GetNextSample を呼び出す前に SetStreamsSelected を呼び出して目的のストリーム番号を渡す必要があります。

SetRangeByFrame を使用するには、同期リーダー内のファイルがフレーム番号でインデックス付けされている必要があります。IWMIndexer2::Configure を呼び出すことで、フレーム番号でインデックス付けするようにインデクサーオブジェクトを構成できます。次に IWMIndexer::StartIndexing を呼び出して、新しい設定でファイルにインデックスを付けます。

開始フレーム番号を使用して圧縮サンプル配信の範囲を設定すると、同期リーダーは指定したフレームの前にある最初のキーフレームからサンプルの配信を開始します。フレームのプレゼンテーション時刻を特定したい場合は、IWMSyncReader2::SetRangeByFrameEx を使用してください。

負の数を渡すとエラーになります。

SetRangeByFrame は、同期リーダーにファイルが読み込まれた後であればいつでも呼び出すことができます。

vtbl 7 HRESULT GetNextSample(WORD wStreamNum, INSSBuffer** ppSample, ULONGLONG* pcnsSampleTime, ULONGLONG* pcnsDuration, DWORD* pdwFlags, DWORD* pdwOutputNum, WORD* pwStreamNum)

GetNextSample メソッドは、ファイルから次のサンプルを取得します。

wStreamNumWORDinサンプルを取得したいストリームの番号を格納した WORD。ゼロを渡すと、ストリーム番号に関係なくファイル内の次のサンプルが返されます。
ppSampleINSSBuffer**outサンプルを受け取るバッファーへのポインター。サンプルを取得せずにサンプル時刻を取得するには NULL を設定します。NULL を設定する場合は、pcnsDurationpdwFlags も両方とも NULL に設定する必要があります。
pcnsSampleTimeULONGLONG*outサンプル時刻を 100 ナノ秒単位で受け取る QWORD 変数へのポインター。
pcnsDurationULONGLONG*outサンプルの継続時間を 100 ナノ秒単位で受け取る QWORD 変数へのポインター。
pdwFlagsDWORD*out

次のフラグのうち 1 つ以上を格納した DWORD へのポインター。

フラグ 説明
フラグなし 他のフラグの条件がいずれも当てはまりません。たとえば、デルタフレームには、ほとんどの場合フラグが設定されません。
WM_SF_CLEANPOINT サンプルの展開に他のサンプルを必要としないことを示します。すべての音声サンプルと、キーフレームであるすべての動画サンプルがクリーンポイントです。
WM_SF_DISCONTINUITY データストリームにギャップがあることを示します。これはシーク、ネットワーク損失、またはその他の理由による可能性があります。これはコーデックやレンダラーなどのアプリケーションにとって有用な追加情報となります。このフラグは、ギャップに続く最初のデータに設定されます。
WM_SF_DATALOSS 前のサンプルと、このフラグが設定されたサンプルとの間で一部のデータが失われました。
pdwOutputNumDWORD*out出力番号を受け取る DWORD へのポインター。
pwStreamNumWORD*outストリーム番号を受け取る WORD へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
NS_E_NO_MORE_SAMPLES
ファイル内のすべてのサンプルが読み取られました。
E_UNEXPECTED
メソッド内の呼び出しで問題が発生しました。
E_INVALIDARG
wStreamNum に有効でないストリーム番号が指定されています。

または

pcnsSampleTimeNULL です。

または

ppSamplepcnsDurationpdwFlags のいずれかが NULL ですが、他のいずれか一方または両方が NULL ではありません。

または

wStreamNum が 0 で、pdwOutputNumpwStreamNum の両方が NULL です。

NS_E_INVALID_REQUEST
同期リーダーで読み取り可能な状態で開かれているファイルがありません。

または

wStreamNum にオフになっている(読み取り対象として選択されていない)ストリーム番号が指定されています。

解説(Remarks)

このメソッドは、圧縮サンプルと非圧縮サンプルの両方を配信します。どちらになるかは、ファイル内のストリームに対して SetReadStreamSamples を呼び出したかどうかによります。これは、同期リーダーを使用してサンプルを取得する唯一のメソッドです。

ファイルの先頭以外の任意の位置からサンプルの受信を開始するには、まず再生の範囲を指定する必要があります。プレゼンテーション時刻に基づいて再生範囲を指定するには、SetRange メソッドを使用します。フレーム番号を使用して範囲を設定するには、SetRangeByFrame メソッドを使用します。ファイル内のすべてのサンプル(範囲を指定した場合はその範囲内のすべてのサンプル)を受信し終えると、次の GetNextSample の呼び出しで NS_E_NO_MORE_SAMPLES が返されます。

出力設定が指定されていない場合、タイムラインはプレゼンテーション時刻です。ストリームを早期に配信させるには、SetOutputSetting を使用します。

GetNextSample は次の 3 つの方法のいずれかで呼び出すことができます。

また、圧縮データを読み取る際に、GetNextSample を使用して動画フレームの正確な時刻を取得することもできます。詳細については、「To Retrieve Accurate Presentation Times for Compressed Samples by Frame」を参照してください。
このメソッドから正しいサンプルの継続時間を取得するには、ストリームの出力を構成する必要があります。SetOutputSetting メソッドを呼び出して g_wszVideoSampleDurations 設定を TRUE に設定してください。その後の GetNextSample の呼び出しでは、正しいサンプルの継続時間が返されます。
vtbl 8 HRESULT SetStreamsSelected(WORD cStreamCount, WORD* pwStreamNumbers, WMT_STREAM_SELECTION* pSelections)

SetStreamsSelected メソッドは、ストリームのリストから配信するサンプルを構成します。各ストリームは、すべてのサンプルを配信する、サンプルを配信しない、またはクリーンポイントサンプルのみを配信するように設定できます。

cStreamCountWORDinpwStreamNumbers に列挙されているストリームの数。
pwStreamNumbersWORD*inストリーム番号を格納した WORD 値の配列へのポインター。
pSelectionsWMT_STREAM_SELECTION*inWMT_STREAM_SELECTION 列挙値の配列へのポインター。これらの値は pwStreamNumbers に列挙されているストリーム番号に対応します。各値は、該当するストリームに対して配信するサンプルを指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pwStreamNumbers または pSelectionsNULL です。

または

cStreamCount がゼロです。

NS_E_INVALID_REQUEST
同期リーダーにファイルが読み込まれていません。
E_OUTOFMEMORY
メソッドが内部オブジェクト用のメモリを割り当てられませんでした。

解説(Remarks)

SetStreamsSelects は、同期リーダーにファイルが読み込まれた後であればいつでも呼び出すことができます。再生中も必要に応じて呼び出しを続けることができます。

このメソッドは IWMReaderAdvanced::SetStreamsSelected と同一ですが、同期リーダーではストリームの選択が常に手動である点が異なります。また、IWMSyncReader::GetNextSample にはストリーム番号の出力が含まれているため、相互排他的なストリームを好きなだけ選択して、それらのサンプルを受信できます。

vtbl 9 HRESULT GetStreamSelected(WORD wStreamNum, WMT_STREAM_SELECTION* pSelection)

GetStreamSelected メソッドは、特定のストリームが現在選択されているかどうかを示すフラグを取得します。

wStreamNumWORDinストリーム番号を格納した WORD
pSelectionWMT_STREAM_SELECTION*out出力時に WMT_STREAM_SELECTION 列挙型のメンバーを 1 つ受け取る変数へのポインター。この値は、指定したストリームの選択状態を示します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_UNEXPECTED
原因不明の理由でメソッドが失敗しました。
E_INVALIDARG
pSelection パラメーターが NULL であるか、ストリーム番号が無効です。
NS_E_INVALID_REQUEST
同期リーダーで開かれているファイルがありません。

解説(Remarks)

このメソッドは IWMReaderAdvanced::GetStreamSelected と同一です。

vtbl 10 HRESULT SetReadStreamSamples(WORD wStreamNum, BOOL fCompressed)

SetReadStreamSamples メソッドは、ストリームのサンプルを圧縮した状態で配信するか、非圧縮の状態で配信するかを指定します。

wStreamNumWORDinストリーム番号を格納した WORD
fCompressedBOOLinサンプルを圧縮する場合は True となるブール値。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_UNEXPECTED
同期リーダーで開かれているファイルがありません。
NS_E_PROTECTED_CONTENT
ストリームが保護されており、圧縮サンプルを配信するように構成されていません。
E_INVALIDARG
wStreamNum に無効なストリーム番号が指定されています。

解説(Remarks)

SetReadStreamSamples は、同期リーダーにファイルが読み込まれた後であればいつでも呼び出すことができます。再生中も必要に応じて呼び出しを続けることができます。

vtbl 11 HRESULT GetReadStreamSamples(WORD wStreamNum, BOOL* pfCompressed)

GetReadStreamSamples メソッドは、ストリームが圧縮サンプルを配信するように構成されているかどうかを確認します。

wStreamNumWORDinストリーム番号を格納した WORD
pfCompressedBOOL*out指定したストリームの圧縮配信の状態を受け取るフラグへのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pfCompressedNULL です。

または

wStreamNum に無効なストリーム番号が指定されています。

E_UNEXPECTED
同期リーダーで開かれているファイルがありません。

解説(Remarks)

ストリームが圧縮サンプルを配信するように構成するには、IWMSyncReader::SetReadStreamSamples を呼び出します。

vtbl 12 HRESULT GetOutputSetting(DWORD dwOutputNum, LPWSTR pszName, WMT_ATTR_DATATYPE* pType, BYTE* pValue, WORD* pcbLength)

GetOutputSetting メソッドは、特定の出力の設定を名前で取得します。

dwOutputNumDWORDin出力番号を格納した DWORD
pszNameLPWSTRin値を取得したい設定の名前を格納したワイド文字の null 終端文字列へのポインター。設定名を表すグローバル定数の一覧については、Output Settings を参照してください。
pTypeWMT_ATTR_DATATYPE*outWMT_ATTR_DATATYPE 列挙型の値を 1 つ受け取る変数へのポインター。受け取った値は、pValue 内のデータの型を示します。
pValueBYTE*out値を格納するバイトバッファーへのポインター。必要なバッファーの長さを取得するには NULL を渡します。
pcbLengthWORD*inout入力時は pValue の長さを格納した変数へのポインター。出力時は、pValue で使用されたバイト数がこの変数に格納されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
dwOutputNum に無効な出力番号が指定されています。

または

pszNamepTypepcbLength のいずれかが NULL です。

または

pszName に無効な設定名が指定されています。

E_UNEXPECTED
同期リーダーで開かれているファイルがありません。
ASF_E_BUFFERTOOSMALL
pcbLength として渡されたバッファーサイズが、設定値を格納するのに十分な大きさではありません。
NS_E_INVALID_REQUEST
pszName にサポートされていない設定が指定されています。

解説(Remarks)

取得したい設定ごとに GetOutputSetting を 2 回呼び出す必要があります。1 回目の呼び出しでは、pValueNULL を渡します。戻り時に、指定した設定の値を保持するために必要なバッファーサイズが pcbLength に設定されます。その後、必要な量のメモリをバッファーに割り当て、2 回目の呼び出しでそのポインターを pValue として渡すことができます。

データを格納するのに十分な大きさでないバッファーを pValue として渡すと、エラーコード ASF_E_BUFFERTOOSMALL が返されます。このエラーコードを返す際も、メソッドは pcbLength の値を正しい値のサイズに設定します。

vtbl 13 HRESULT SetOutputSetting(DWORD dwOutputNum, LPWSTR pszName, WMT_ATTR_DATATYPE Type, BYTE* pValue, WORD cbLength)

SetOutputSetting メソッドは、特定の出力に対して名前付きの設定を指定します。

dwOutputNumDWORDin出力番号を格納した DWORD
pszNameLPWSTRin設定の名前を格納した null 終端文字列へのポインター。設定名を表すグローバル定数の一覧については、Output Settings を参照してください。
TypeWMT_ATTR_DATATYPEinWMT_ATTR_DATATYPE 列挙型のメンバー。この値は、pValue のバッファー内のデータの型を示します。
pValueBYTE*in設定の値を格納するバイト配列へのポインター。このバッファーに格納されるデータの型は Type で指定されます。
cbLengthWORDinpValue のサイズ(バイト単位)。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pszName または pValueNULL です。

または

dwOutputNum に無効な出力番号が指定されています。

E_UNEXPECTED
同期リーダーで開かれているファイルがありません。
NS_E_INVALID_REQUEST
pszName にサポートされていない設定が指定されています。
vtbl 14 HRESULT GetOutputCount(DWORD* pcOutputs)

GetOutputCount メソッドは、同期リーダーで開かれているファイルに存在する出力の数を取得します。

pcOutputsDWORD*outファイル内の出力の数を受け取る DWORD へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_POINTER
pcOutputs パラメーターが NULL です。
E_UNEXPECTED
原因不明の理由でメソッドが失敗しました。

解説(Remarks)

出力を列挙するには、GetOutputCount を呼び出して出力の数を取得し、次に GetOutputProps を呼び出します。

vtbl 15 HRESULT GetOutputProps(DWORD dwOutputNum, IWMOutputMediaProps** ppOutput)

GetOutputProps メソッドは、非圧縮出力ストリームの現在のプロパティを取得します。

dwOutputNumDWORDin出力番号を格納した DWORD
ppOutputIWMOutputMediaProps**outIWMOutputMediaProps インターフェースへのポインターへのポインター。このオブジェクトは、このメソッドの呼び出しが成功すると作成されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_POINTER
ppOutput パラメーターが NULL であるか、dwOutputNum パラメーターが出力の数以上です。出力番号はゼロから始まります。
E_UNEXPECTED
原因不明の理由でメソッドが失敗しました。

解説(Remarks)

GetOutputProps の呼び出しで取得したオブジェクトを操作しても、アプリケーションが SetOutputProps も呼び出さない限り、出力メディアストリームには影響しません。

vtbl 16 HRESULT SetOutputProps(DWORD dwOutputNum, IWMOutputMediaProps* pOutput)

SetOutputProps メソッドは、非圧縮出力ストリームのメディアプロパティを指定します。

dwOutputNumDWORDin出力番号を格納した DWORD
pOutputIWMOutputMediaProps*inIWMOutputMediaProps インターフェースへのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
dwOutputNum パラメーターが出力の数以上です。出力番号はゼロから始まります。
E_UNEXPECTED
原因不明の理由でメソッドが失敗しました。

解説(Remarks)

GetOutputProps の呼び出しで取得したオブジェクトを操作しても、アプリケーションが SetOutputProps も呼び出さない限り、出力メディアストリームには影響しません。

DirectX VA フォーマットは GetOutputFormat から返される場合がありますが、これらを SetOutputProps に渡すと、DirectX VA フォーマットはこの方法で指定できないため、そのメソッドは失敗します。したがって、コードでは SetOutputProps に渡す前にフォーマットを調べるか、あるいは GetOutputFormat から列挙される次のフォーマットを試すことで、そのメソッドが失敗する場合に対処する必要があります。DirectX VA フォーマットを識別する方法を示すサンプルコードについては、Enabling DirectX Video Acceleration を参照してください。

SetOutputProps は、同期リーダーにファイルが読み込まれた後であればいつでも呼び出すことができます。再生中も必要に応じて呼び出しを続けることができます。

このメソッドで設定した新しい出力プロパティは、次の GetNextSample の呼び出しで有効になります。

vtbl 17 HRESULT GetOutputFormatCount(DWORD dwOutputNum, DWORD* pcFormats)

GetOutputFormatCount メソッドは、同期リーダー上のこの出力がサポートするすべての可能なフォーマットの種類を判別するために使用します。

dwOutputNumDWORDinサポートされているフォーマットの数を判別したい出力の番号を格納した DWORD
pcFormatsDWORD*outサポートされているフォーマットの数を受け取る DWORD へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_POINTER
pcFormatsNULL です。
E_UNEXPECTED
同期リーダーにファイルが読み込まれていません。
vtbl 18 HRESULT GetOutputFormat(DWORD dwOutputNum, DWORD dwFormatNum, IWMOutputMediaProps** ppProps)

GetOutputFormat メソッドは、指定した出力メディアストリームがサポートするフォーマットを取得します。

dwOutputNumDWORDin出力番号を格納した DWORD
dwFormatNumDWORDinフォーマット番号を格納した DWORD
ppPropsIWMOutputMediaProps**outIWMOutputMediaProps インターフェースへのポインターへのポインター。このオブジェクトは、このメソッドの呼び出しが成功すると作成されます。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_POINTER
ppPropsNULL です。
E_UNEXPECTED
同期リーダーで開かれているファイルがありません。

解説(Remarks)

出力メディアストリームがサポートするフォーマットを列挙するには、GetOutputFormatCount を呼び出してフォーマットの数を取得し、次に GetOutputFormat を続けて呼び出してフォーマットを取得します。

vtbl 19 HRESULT GetOutputNumberForStream(WORD wStreamNum, DWORD* pdwOutputNum)

GetOutputNumberForStream メソッドは、指定したストリームに対応する出力番号を取得します。

wStreamNumWORDin対応する出力番号を取得したいストリームの番号を格納した WORD
pdwOutputNumDWORD*outwStreamNum で指定したストリーム番号に対応する出力番号を受け取る DWORD へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
NS_E_INVALID_REQUEST
wStreamNum に無効なストリーム番号が指定されています。

解説(Remarks)

複数ビットレートのファイルの場合のように、1 つの出力に複数のストリームが含まれることがあります。

vtbl 20 HRESULT GetStreamNumberForOutput(DWORD dwOutputNum, WORD* pwStreamNum)

GetStreamNumberForOutput メソッドは、指定した出力に対応するストリーム番号を取得します。

dwOutputNumDWORDinストリーム番号を取得したい出力の番号を指定する DWORD 値。
pwStreamNumWORD*outdwOutput で指定した出力に対応するストリーム番号を受け取る WORD 値へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
NS_E_INVALID_REQUEST
dwOutput に無効な出力番号が指定されています。

解説(Remarks)

相互排他に相当する出力の場合、アクティブなストリーム番号のみが取得されます。そのような出力に関連付けられたすべてのストリーム番号を取得する必要がある場合は、ファイルのプロファイル情報にアクセスする必要があります。

vtbl 21 HRESULT GetMaxOutputSampleSize(DWORD dwOutput, DWORD* pcbMax)

GetMaxOutputSampleSize メソッドは、同期リーダーで開かれているファイルの指定した出力の最大サンプルサイズを取得します。

dwOutputDWORDin最大サンプルサイズを取得したい出力の番号を格納した DWORD
pcbMaxDWORD*outdwOutput で指定した出力の最大サンプルサイズ(バイト単位)を受け取る DWORD 値へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pcbMaxNULL です。

または

dwOutput に無効な出力番号が指定されています。

ASF_E_INVALIDSTATE
同期リーダーで開かれているファイルがありません。
NS_E_NOT_CONFIGURED
指定した出力は現在、再生用に構成されていません。
E_UNEXPECTED
同期リーダーが内部オブジェクトの初期化に失敗しました。

解説(Remarks)

複数ビットレートストリーミングなどの一部のシナリオでは、出力に複数のストリームが含まれます。返されるサイズは、指定した出力に関連付けられたすべてのストリームの最大サンプルサイズです。

特定のストリームの最大サンプルサイズは、IWMSyncReader::GetMaxStreamSampleSize を使用して取得できます。

vtbl 22 HRESULT GetMaxStreamSampleSize(WORD wStream, DWORD* pcbMax)

GetMaxStreamSampleSize メソッドは、同期リーダーで開かれているファイル内の指定したストリームの最大サンプルサイズを取得します。

wStreamWORDin最大サンプルサイズを取得したいストリームの番号を格納した WORD
pcbMaxDWORD*outwStream で指定したストリームの最大サンプルサイズ(バイト単位)を受け取る DWORD 値へのポインター。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表の値が含まれますが、これらに限定されません。

リターンコード 説明
S_OK
メソッドが成功しました。
E_INVALIDARG
pcbMaxNULL です。

または

wStream に無効なストリーム番号が指定されています。

ASF_E_INVALIDSTATE
同期リーダーで開かれているファイルがありません。

解説(Remarks)

このメソッドは、個々のストリームの最大サンプルサイズを取得します。そのストリームは、1 つの出力に含まれる複数のストリームのうちの 1 つである場合があります。出力番号を使用している場合は、IWMSyncReader::GetMaxOutputSampleSize を使用して出力全体の最大サンプルサイズを取得してください。

vtbl 23 HRESULT OpenStream(IStream* pStream)

OpenStream メソッドは、読み取り用にストリームを開きます。

pStreamIStream*inIStream インターフェースへのポインター。

戻り値

メソッドが成功した場合は S_OK を返します。失敗した場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IWMSyncReader "{9397F121-7705-4DC9-B049-98B698188414}"
#usecom global IWMSyncReader IID_IWMSyncReader "{}"
#comfunc global IWMSyncReader_Open                      3 wstr
#comfunc global IWMSyncReader_Close                     4
#comfunc global IWMSyncReader_SetRange                  5 int64,int64
#comfunc global IWMSyncReader_SetRangeByFrame           6 int,int64,int64
#comfunc global IWMSyncReader_GetNextSample             7 int,sptr,var,var,var,var,var
#comfunc global IWMSyncReader_SetStreamsSelected        8 int,var,var
#comfunc global IWMSyncReader_GetStreamSelected         9 int,var
#comfunc global IWMSyncReader_SetReadStreamSamples      10 int,int
#comfunc global IWMSyncReader_GetReadStreamSamples      11 int,var
#comfunc global IWMSyncReader_GetOutputSetting          12 int,wstr,var,var,var
#comfunc global IWMSyncReader_SetOutputSetting          13 int,wstr,int,var,int
#comfunc global IWMSyncReader_GetOutputCount            14 var
#comfunc global IWMSyncReader_GetOutputProps            15 int,sptr
#comfunc global IWMSyncReader_SetOutputProps            16 int,sptr
#comfunc global IWMSyncReader_GetOutputFormatCount      17 int,var
#comfunc global IWMSyncReader_GetOutputFormat           18 int,int,sptr
#comfunc global IWMSyncReader_GetOutputNumberForStream  19 int,var
#comfunc global IWMSyncReader_GetStreamNumberForOutput  20 int,var
#comfunc global IWMSyncReader_GetMaxOutputSampleSize    21 int,var
#comfunc global IWMSyncReader_GetMaxStreamSampleSize    22 int,var
#comfunc global IWMSyncReader_OpenStream                23 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。