WinRT IBasicVideoEffect で作成したビデオを Win2d CanvasControl に描画しようとしています。
Win2d ビデオ効果の例は、IBasicVideoEffect インターフェイスを WinRT コンポーネントとして実装する上で構築されています。メソッド 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 で描画した後、_mediaElementCanvasRenderTarget を取得しています。
private void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(_mediaElementCanvasRenderTarget);
}
デバイスが異なるため、エラーが発生します。また、1 つのデバイスを両方の UIElements に設定しようとしましたが、役に立ちませんでした。
この状況にどう対処するか?