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

IDirectDrawMediaStream

COM
IIDf4104fce-9a70-11d0-8fde-00c04fd9189d継承元IMediaStream自前メソッド開始 vtbl9

公式ドキュメント

メモ このインターフェイスは非推奨です。

メソッド 6

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

vtbl 9 HRESULT GetFormat(DDSURFACEDESC* pDDSDCurrent, IDirectDrawPalette** ppDirectDrawPalette, DDSURFACEDESC* pDDSDDesired, DWORD* pdwFlags)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のメディアストリームのフォーマットを取得し、オプションで希望するフォーマットも取得します。

pDDSDCurrentDDSURFACEDESC*out現在のメディアストリームのフォーマットを格納する DirectDraw サーフェイス記述へのポインター。
ppDirectDrawPaletteIDirectDrawPalette**outIDirectDrawPalette インターフェイスが存在する場合、そのインターフェイスへのポインターのアドレス。
pDDSDDesiredDDSURFACEDESC*out現在のメディアストリームの希望するフォーマットを格納する DirectDraw サーフェイス記述へのポインター。
pdwFlagsDWORD*out

DDSURFACEDESC 構造体に設定されるフラグへのポインター。関連するフラグは次のとおりです。

フラグ 説明
DDSD_CAPS 構造体のサーフェイス機能メンバーが有効であることを示します。
DDSD_HEIGHT 構造体の高さ (height) メンバーが有効であることを示します。
DDSD_PIXELFORMAT 構造体のピクセルフォーマット (pixel format) メンバーが有効であることを示します。
DDSD_WIDTH 構造体の幅 (width) メンバーが有効であることを示します。

戻り値

次のいずれかの値を返します。

リターンコード 説明
DDERR_INVALIDPARAMS
DirectDraw サーフェイスのパラメーターのいずれかが無効です。
E_POINTER
必須パラメーターのうち 1 つ以上が無効です。
S_OK
成功しました。

解説(Remarks)

このメソッドを呼び出した後は、現在のフォーマットに従うか、IDirectDrawMediaStream::SetFormat メソッドを呼び出してフォーマットの変更を試みることができます。

このメソッドのパラメーターはすべて省略可能です。取得したくない情報については、対応するパラメーターを NULL に設定します。

プログレッシブレンダリングを行うには、1 つのサンプルを作成し、そのサンプルをビデオの連続するフレームに対して繰り返し使用します。ビデオデコンプレッサーは、前のフレームへの部分的な更新を行うためにこの手法を使用します。

このメソッドを呼び出す前に、DDSURFACEDESC 構造体の dwSize メンバーを初期化する必要があります。

DDSD_CAPS フラグは、DDSCAPS 構造体に列挙されている値のいずれか、または DDSCAPS_DATAEXCHANGE を返します。DDSCAPS_DATAEXCHANGE は Ddrawex.h で DDSCAPS_SYSTEMMEMORY|DDSCAPS_VIDEOMEMORY として定義されています。

vtbl 10 HRESULT SetFormat(DDSURFACEDESC* pDDSurfaceDesc, IDirectDrawPalette* pDirectDrawPalette)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のメディアストリームのフォーマットを設定します。

pDDSurfaceDescDDSURFACEDESC*in新しいフォーマットを格納した DirectDraw サーフェイス記述へのポインター。
pDirectDrawPaletteIDirectDrawPalette*inIDirectDrawPalette インターフェイスへのポインターである省略可能なパラメーター。

戻り値

次のいずれかの値を返します。

リターンコード 説明
DDERR_INVALIDSURFACETYPE
指定されたフォーマットは現在のストリームと互換性がありません。
MS_E_SAMPLEALLOC
このストリームに対して 1 つ以上のストリームサンプルが既に割り当てられているため、フォーマットを変更できません。
S_OK
成功しました。

解説(Remarks)

ストリームに割り当て済みのサンプルがあり、そのサンプルフォーマットが指定されたフォーマットと一致しない場合、このメソッドは失敗します。指定されたフォーマットが現在のフォーマットと一致する場合、このメソッドは常に成功します。

vtbl 11 HRESULT GetDirectDraw(IDirectDraw** ppDirectDraw)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のメディアストリームが使用する DirectDraw オブジェクトへのポインターを取得します。

ppDirectDrawIDirectDraw**out現在のメディアストリームに関連付けられた DirectDraw オブジェクトを格納する IDirectDraw インターフェイスへのポインターのアドレス。

戻り値

成功した場合は S_OK を、パラメーターが無効な場合は E_POINTER を返します。

解説(Remarks)

ストリームをまだ初期化していない場合、取得されるポインターは NULL になり、メソッドは S_OK を返します。ストリームを初期化済みの場合、このメソッドは取得されるポインターの参照カウントをインクリメントします。

vtbl 12 HRESULT SetDirectDraw(IDirectDraw* pDirectDraw)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。現在のメディアストリームの DirectDraw オブジェクトを設定します。

pDirectDrawIDirectDraw*inメディアストリームの新しい DirectDraw オブジェクトを格納した IDirectDraw インターフェイスへのポインター。

戻り値

成功した場合は S_OK を、ポインターが無効な場合は E_POINTER を返します。

解説(Remarks)

現在のストリームに割り当て済みのサンプルがあり、その DirectDraw オブジェクトが指定されたものと異なる場合、このメソッドは失敗します。指定された DirectDraw オブジェクトがストリームの現在のオブジェクトと一致する場合は、常に成功します。

このストリームに割り当て済みのサンプルがない場合、pDirectDrawNULL に設定できます。これにより、ストリームは現在の DirectDraw オブジェクトへの参照を強制的に解放します。

vtbl 13 HRESULT CreateSample(IDirectDrawSurface* pSurface, RECT* pRect, DWORD dwFlags, IDirectDrawStreamSample** ppSample)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。指定された DirectDraw サーフェイスオブジェクトを使用してストリームサンプルを作成します。

pSurfaceIDirectDrawSurface*in既存の DirectDraw サーフェイスへのポインター。IDirectDrawSurface7 インターフェイスポインターから IDirectDrawSurface インターフェイスを取得するには、QueryInterface を使用します。
pRectRECT*in指定したサーフェイスで使用するクリッピング矩形へのポインター。サーフェイス全体を使用する場合は、このパラメーターを NULL に設定します。
dwFlagsDWORDin

各種フラグを指定します。次のフラグが定義されています。

説明
DDSFF_PROGRESSIVERENDER このフラグが設定されている場合、サンプルの更新はサーフェイス上で直接行われます。このフラグがない場合、デコーダーがデルタフレームを使用していると、内部で余分なコピーが行われます。このフラグを設定するとパフォーマンスが向上する可能性がありますが、ティアリングが発生する可能性もあります。
ppSampleIDirectDrawStreamSample**out新しく作成されるサンプルを指す IDirectDrawStreamSample インターフェイスへのポインターのアドレス。

戻り値

次のいずれかの値を返します。

リターンコード 説明
DDERR_INVALIDPIXELFORMAT
指定されたピクセルフォーマットはストリームフォーマットと互換性がありません。
DDERR_INVALIDRECT
指定されたクリッピング矩形が無効です。
DDERR_INVALIDSURFACETYPE
指定されたサーフェイスはストリームフォーマットと互換性がありません。
E_POINTER
必須パラメーターのうち 1 つ以上が無効です。
MS_E_SAMPLEALLOC
ストリームには既に割り当て済みのサンプルがあり、サーフェイスがサンプルフォーマットと一致しません。
S_OK
成功しました。

解説(Remarks)

このメソッドは現在のストリームからサンプルを作成し、そのサンプルをこのサーフェイスにアタッチします。

ストリームに割り当て済みのサーフェイスがなく、指定されたサーフェイスがストリームのフォーマットと一致しない場合、このメソッドはストリームに対して IDirectDrawMediaStream::SetFormat メソッドを呼び出し、両者を一致させます。

プログレッシブレンダリングを行うには、1 つのサンプルを作成し、そのサンプルをビデオの連続するフレームに対して繰り返し使用します。ビデオデコンプレッサーは、前のフレームへの部分的な更新を行うためにこの手法を使用します。

pRect パラメーターはストリームのフォーマットと一致している必要があります (IDirectDrawMediaStream::GetFormat を参照)。誤ったクリップ矩形が設定された場合やクリップ矩形が設定されておらず、サーフェイスサイズがムービーサイズと一致しない場合、ムービーが再生されないことがあります。プライマリサーフェイスを使用する場合は、ユーザーが表示設定を変更するとプライマリサーフェイスのサイズが変わる可能性があるため、クリッピング矩形を使用することをお勧めします。

vtbl 14 HRESULT GetTimePerFrame(LONGLONG* pFrameTime)

メモ このインターフェイスは非推奨です。新しいアプリケーションでは使用しないでください。ビデオストリームから 1 秒あたりの平均フレーム数を取得します。

pFrameTimeLONGLONG*out1 フレームあたりの平均時間を 100 ナノ秒単位で示す STREAM_TIME 値へのポインター。(Multimedia Streaming Data Types を参照してください。)

戻り値

成功した場合は S_OK を、ポインターが無効な場合は E_POINTER を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDirectDrawMediaStream "{F4104FCE-9A70-11D0-8FDE-00C04FD9189D}"
#usecom global IDirectDrawMediaStream IID_IDirectDrawMediaStream "{}"
#comfunc global IDirectDrawMediaStream_GetFormat        9 var,sptr,var,var
#comfunc global IDirectDrawMediaStream_SetFormat        10 var,sptr
#comfunc global IDirectDrawMediaStream_GetDirectDraw    11 sptr
#comfunc global IDirectDrawMediaStream_SetDirectDraw    12 sptr
#comfunc global IDirectDrawMediaStream_CreateSample     13 sptr,var,int,sptr
#comfunc global IDirectDrawMediaStream_GetTimePerFrame  14 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。