mywilson 2015-09-25 02:53 采纳率: 0%
浏览 2700

最新的 ffmpeg 2.8 其实连yuy2数据包都不能正确转换

说了你也不相信,我用 directx 采集到的数据是从web camera来的 yuy2 数据,我用自己写的转换程序可以成功转换正确的图像rgb24, yuy2 -> rgb24 -> I420 都可以,但是用ffmpeg的sws__scale 怎么也无法正确转换。

sws__scale 的解码过程如下

void scaleYUY2toI420(const void *pSrc, int widthSrc, int heightSrc,
    void *pDest, int widthDest, int heightDest, bool bQualityImportant/* = false*/)
{
    struct SwsContext *pctx;
    AVPicture picSrc = { 0 };
    AVPicture picDst = { 0 };
    enum AVPixelFormat fmtSrc = AV_PIX_FMT_YUYV422;
    enum AVPixelFormat fmtDst = AV_PIX_FMT_YUV420P;
    avpicture_fill(&picSrc, (uint8_t*)pSrc, fmtSrc, widthSrc, heightSrc);   //
    avpicture_fill(&picDst, (uint8_t*)pDest, fmtDst, widthDest, heightDest);
    pctx = sws_getContext(widthSrc, heightSrc, fmtSrc,
        widthDest, heightDest, fmtDst,
        bQualityImportant ? SWS_BICUBIC : SWS_POINT, NULL, NULL, NULL);
    if (pctx == NULL)
        return;
    sws_scale(pctx, picSrc.data, picSrc.linesize, 0, heightSrc, picDst.data, picDst.linesize);
    sws_freeContext(pctx);

}

问题在哪里始终不得要领,希望专家们不吝赐教。

为了验证问题,我用 ffmpeg 转换 rgb24 -> I420每问题,是不是ffmpeg不支持 yuy2 packed 包到 i420?但是我看它的像素格式定义, AV_PIX_FMT_YUYV422 排在最前面啊

  • 写回答

1条回答 默认 最新

  • mywilson 2015-09-26 15:24
    关注

    我今天又测试了一下,貌似是ffmpeg在转换的过程中丢失了图像细节。我的转换过程是

    CaptureDevice -> YUY2 -> RGB24 -> H264 encoder -> decoder -> I420 -> RGB24 -> display

    在第一个 RGB24 时没有问题,显示的第一章图片是正常的,但是第二张的指针是紫色的,明显的丢失了YUV信息了
    编码和解码器过滤后会损失一些细节的,但是不会让指针颜色变化这么大。
    我尝试了,在 16bpp 和 32bpp 下是正常的,只有在24bpp下才会如此

    看下图
    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 Python时间序列如何拟合疏系数模型
  • ¥15 求学软件的前人们指明方向🥺
  • ¥50 如何增强飞上天的树莓派的热点信号强度,以使得笔记本可以在地面实现远程桌面连接
  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services