MediaFrameReader.TryAcquireLatestFrame メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
MediaFrameSource から最新のフレームを表す MediaFrameReference オブジェクトを取得しようとします。
public:
virtual MediaFrameReference ^ TryAcquireLatestFrame() = TryAcquireLatestFrame;
MediaFrameReference TryAcquireLatestFrame();
public MediaFrameReference TryAcquireLatestFrame();
function tryAcquireLatestFrame()
Public Function TryAcquireLatestFrame () As MediaFrameReference
戻り値
メディア フレーム ソースからの最新のフレームを表す MediaFrameReference 。
注釈
このメソッドは常に成功するとは限りません。 メソッドが失敗した場合、返される MediaFrameReference は null になるため、返されたオブジェクトが null かどうかを常にテストしてから使用する必要があります。 このメソッドは、新しいフレームを手動でポーリングするのではなく、 MediaFrameReader.FrameArrived イベントのハンドラー内から呼び出す必要があります。
各 MediaFrameReader は、TryAcquireLatestFrame から取得された MediaFrameReference オブジェクトの循環バッファーを保持します。 バッファー内のすべての MediaFrameReference オブジェクトを使用すると、 TryAcquireLatestFrame を呼び出すと、システムは最も古いバッファー オブジェクトで Close (または C# では Dispose ) を呼び出して再利用します。 オブジェクトが破棄されると、それを使用してフレーム データにアクセスできなくなります。 このため、 MediaFrameReference オブジェクトは、実際にフレームを処理する必要があるよりも長く格納しないでください。 アプリのシナリオでデータへの参照を長く保持する必要がある場合は、提供されている API のいずれかを使用して基になるデータを取得する必要があります。 具体的な内容は次のとおりです。
これらの API が使用されなくなったときに、これらの API によって返されるオブジェクトに対して Close (または Dispose) を呼び出す必要があります。
重要
MediaFrameReference の VideoMediaFrame プロパティによって提供される SoftwareBitmap オブジェクトまたは Direct3DSurface オブジェクトにアクセスすると、これらのオブジェクトへの厳密な参照が作成されます。つまり、含まれている MediaFrameReference で Dispose を呼び出しても破棄されません。 これは、MediaFrameReference.VideoMediaFrame プロパティから取得した VideoFrame オブジェクトによって提供される SoftwareBitmap オブジェクトまたは Direct3DSurface オブジェクトにも適用されます。 それらのオブジェクトを即座に破棄するには、SoftwareBitmap または Direct3DSurface の Dispose メソッドを明示的に直接呼び出す必要があります。 そうしない場合、最終的にはガーベジ コレクターによってこれらのオブジェクトのメモリが解放されますが、それがいつになるかは不明であり、割り当てられたビットマップやサーフェスの数がシステムによって許容される最大数を上回った場合、新しいフレームのフローが停止します。