java rgb转yuv_使用硬件在DeckLink上将YUV转换为RGB

我目前正通过DeckLink 4K Extreme上的HDMI输入从摄像机以59.94 FPS摄取HD1080p视频 .

我的目标是在WPF UI元素中复制传入的图像 . 为了实现这一点,我在C#WPF应用程序中使用DeckLink SDK .

在这个程序中,我实现了VideoInputFrameArrived回调 . 在这个回调中,我将每帧中的字节复制到WriteableBitmap中,我将其设置为Image的源 .

所有这些都可以正常工作,当我运行程序时,Image确实会在帧到达时实时更新 .

我的问题是,视频输入中唯一支持的两种Pixel格式是8BitYUV和10BitYUV,它们都不能在计算机显示器上本地显示 .

WriteableBitmap只能采用各种RGB,黑白和CMYK格式 .

这是我到目前为止所尝试的内容 .

我试图使用IDeckLinkVideoConversion :: ConvertFrame()转换每个帧

Problem :ConvertFrame()需要使用IDeckLinkOutput :: CreateVideoFrame()在DeckLink上呈现目标帧 . 正如我目前所理解的那样,DeckLink不能同时充当输入(捕获视频输入)和输出(渲染目标帧) .

我已将传入流设置为8BitYUV,并将每个帧复制到WriteableBitmap中,格式为BGR32 .

Problem :正如我前面提到的,这将显示一个图像,但颜色不正确,图片只是它需要的宽度的一半 .

原因是8BitYUV的输入流是16位/像素,而Bitmap需要32位/像素,因此Bitmap将每个输入的MacroPixel(4个字节)视为一个像素,而不是它实际上是2个像素 .

目前我使用像素着色器来修复颜色,使用RenderTransform将图像水平缩放2倍以“修复”宽高比 . 问题是,我有一半的原始分辨率 .

我不认为这是硬件限制,因为当我将另一台显示器连接到DeckLink上的HDMI输出时,输入的图像以完整的1080p显示完美的颜色 . 是否有可能在内存中的某个地方捕获该传出流?

TL;DR 将4:2:2 YUV(UYVY)实时转换为RGB或CMYK像素格式的最佳方法是什么? (1080p @ 59.94 FPS)

优选地,硬件解决方案,即DeckLink或GPU .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值