Я пытаюсь привлечь видео, созданные в WinRT IBasicVideoEffect, к Win2d CanvasControl.Как обмениваться ресурсами между UWP MediaElement и 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);
}
Здесь я получаю _mediaElementCanvasRenderTarget, после того, как я рисую его на CanvasControl
private void canvasControl_Draw(CanvasControl sender, CanvasDrawEventArgs args)
{
args.DrawingSession.DrawImage(_mediaElementCanvasRenderTarget);
}
дает ошибку в связи с различными устройствами. Я также попытался установить одно устройство в UIElements, но это не помогло.
Как справиться с этой ситуацией?
Копирование очень дорого. Я не могу себе этого позволить. –
Причина, по которой я не могу использовать обработку внутри IBasicVideoEffect, заключается в том, что я должен использовать растровое изображение кадра из границ MediaElement. Я также попытался установить устройство MediaElement в CanvasControl как пользовательское устройство, но оказалось, что оно тоже дорого. Я обнаружил, что мои (интегрированные и дискретные) графические процессоры и процессор загружены достаточно. Похоже, что процесс копирования проходит через все их. ПК с одним графическим процессором работают быстрее без перегрузок ЦП. –