次の方法で共有


MediaFrameReader.TryAcquireLatestFrame メソッド

定義

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) を呼び出す必要があります。

重要

MediaFrameReferenceVideoMediaFrame プロパティによって提供される SoftwareBitmap オブジェクトまたは Direct3DSurface オブジェクトにアクセスすると、これらのオブジェクトへの厳密な参照が作成されます。つまり、含まれている MediaFrameReferenceDispose を呼び出しても破棄されません。 これは、MediaFrameReference.VideoMediaFrame プロパティから取得した VideoFrame オブジェクトによって提供される SoftwareBitmap オブジェクトまたは Direct3DSurface オブジェクトにも適用されます。 それらのオブジェクトを即座に破棄するには、SoftwareBitmap または Direct3DSurfaceDispose メソッドを明示的に直接呼び出す必要があります。 そうしない場合、最終的にはガーベジ コレクターによってこれらのオブジェクトのメモリが解放されますが、それがいつになるかは不明であり、割り当てられたビットマップやサーフェスの数がシステムによって許容される最大数を上回った場合、新しいフレームのフローが停止します。

適用対象