WinRT IBasicVideoEffectで作成したビデオをWin2d CanvasControlに描画しようとしています。UWP MediaElementとWin2d CanvasControlの間でリソースを共有するには?
Win2dビデオエフェクトの例は、WinRTコンポーネントとしてIBasicVideoEffectインターフェイスを実装したものです。 SetEncodingProperties(IBasicVideoEffect)メソッドとCanvasControl()メソッドから作成されたビットマップには異なるデバイスがあり、別のデバイスに描画することはできません。
public void ProcessFrame(ProcessVideoFrameContext context)
{
_mediaElementCanvasRenderTarget = CanvasRenderTarget.CreateFromDirect3D11Surface(canvasDevice, context.OutputFrame.Direct3DSurface);
}
public void SetEncodingProperties(VideoEncodingProperties encodingProperties, IDirect3DDevice device)
{
canvasDevice = CanvasDevice.CreateFromDirect3D11Device(device);
}
私はCanvasControl
private void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(_mediaElementCanvasRenderTarget);
}
上に描画した後、ここで私は、_mediaElementCanvasRenderTargetを取得していますが、異なるデバイスに起因するエラーを与えます。私は両方のUIElementsに1つのデバイスを設定しようとしましたが、それは助けにはなりませんでした。
このような状況をどのように処理しますか?
コピーは非常に高価です。私はそのような余裕がない。 –
IBasicVideoEffectの内部で処理を使用できないのは、MediaElement境界からフレームビットマップを使用する必要があるためです。 私はまた、カスタムデバイスとしてCanvasControlにMediaElementデバイスを設定しようとしましたが、それも高価に見えました。私は、私の両方の(統合されたディスクリートな)GPUとCPUが十分に読み込まれていることを知りました。それらをすべてコピーするプロセスのように見えます。 1つのGPUを搭載したPCは、CPUの過負荷がなくても高速に動作します。 –