带有 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;
}
我正在编写 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;
}