带有 NV12 子类型的 IBasicVideoEffect

IBasicVideoEffect with NV12 Subtype

我正在编写 UWP 应用程序,让用户有机会在某些相机接收的视频流上添加视频效果。 我使用 C# MediaFrameReader 在 C++/CX OpenCV 中发送 SoftwareBitmap 来添加效果。 之后我注意到 C# 有 IBasicVideoEffect 接口,可以直接向 CaptureElement 添加效果。 (https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/custom-video-effects)

但根据 MSDN,IBasicVideEffect 实现仅适用于 ARGB32 子类型。 不幸的是,我的相机只有 NV12 子类型。有没有办法把context.OutputFrame.SoftwareBitmap转换成ARGB32格式然后显示在屏幕上而不用再转换回NV12?

我创建了解决方案。提供的文章说有实现视频效果的方法。第二个是 Win2D.uwp 和 IDirect3DDevice。这对我有用,无需从 NV12 进行任何转换。 此外,正如 MSDN 所说,我已经通过使用 GPU 资源达到了性能。

我的代码示例:

public async Task<bool> TryStartAsync()
    if (Ready == false)
    {
        return false;
    }
    if (_effectDefinition is null)
    {
        _effectDefinition = new VideoEffectDefinition(
            typeof(VideoEffectProcessor).FullName
        );
    }
    var effect = await Capture.AddVideoEffectAsync(
        _effectDefinition, 
        MediaStreamType.VideoPreview
    );
    effect.SetProperties(Settings);

    Destination.Source = Capture;
    await Capture.StartPreviewAsync();
    InProcess = true;
    return true;
}