【问题标题】:How to convert yuv444 to yuyv422 using arm NEON?如何使用 arm NEON 将 yuv444 转换为 yuyv422?
【发布时间】:2015-01-27 08:46:50
【问题描述】:

我想将颜色模式从yuv444 转换为yuyv422。 目前,我正在使用c 来转换速度较慢的。 有谁知道如何使用 arm NEON 转换颜色模式? 下面是我使用c的代码:

{

    unsigned int i, j;
    unsigned int y1, y2, cb, cr, i_rows;
    const unsigned char *p;

    p = src;
    for (i = 0; i < height; i++) {
        i_rows = i*2*width;
        for (j = 0; j < 2*width; j += 4) {
            y1 = p[0];
            cb = (p[1] + p[4] + 1) >> 1;
            y2 = p[3];
            cr = (p[2] + p[5] + 1) >> 1;
            *(dst + i_rows + j  ) = y1;
            *(dst + i_rows + j+1) = cb;
            *(dst + i_rows + j+2) = y2;
            *(dst + i_rows + j+3) = cr;
            p += 6;
        }
    }
}

【问题讨论】:

  • 您可能需要自己尝试实现它,如果遇到任何问题,您可能会遇到具体问题。
  • 看起来它应该可以相当简单地向量化(元素之间没有讨厌的依赖关系),尽管 6 字节的长度意味着您可能希望在一次以保持加载/存储对齐,最后需要进行一些非矢量化清理。 NEON programmer's guide 可能是一个不错的起点。
  • 我想看看 OpenCV 是否对此进行了优化。

标签: arm simd neon yuv


【解决方案1】:

试试这个:

vld3.8      {d16, d18, d20}, [pSrc]!
vld3.8      {d17, d19, d21}, [pSrc]!

vtrn.8      q9, q10

vrhadd.u8   q9, q10, q9

vst2.8      {q8, q9}, [pDst]!

以上是我放在主循环中的内容。剩下的就看你自己了。

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 2013-05-08
    • 2018-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多