我试图将在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);
}
由于设备不同而产生错误。我也尝试将一个设备设置为两个UIElements,但它没有帮助。
如何处理这种情况?
答案 0 :(得分:1)
您可以使用CanvasBitmap.CopyPixelsFromBitmap将图像数据从一个CanvasDevice的位图复制到使用其他设备的第二个位图。这将起作用,但我希望在不同设备之间进行复制会相当昂贵。
更有效的方法是更改您的设计,以避免将视频绘制到CanvasControl。在IBasicVideoEffect实现中进行所有视频处理,因此可以使用自己的XAML视频元素直接显示输出视频,而CanvasControl覆盖其他非视频内容 - 然后每个都可以使用自己独立的设备而无需复制。