libx265运动补偿和CU遍历

时间:2016-06-16 22:44:37

标签: ffmpeg video-processing motion-detection h.265 libx265

我正在尝试使用H.265运动补偿和搜索(HEVC-libx265实现从这里:https://bitbucket.org/multicoreware/x265/downloads)。我需要略微扩展边缘扩展搜索,并用最左边的像素填充宏块,就像我的样本视频像圆柱体一样(最右边连接到最左边)。

我需要做的基本上是这样的:

enter image description here

这样做的一种方法是修改边缘扩展区域(已在代码中,在frameFilter.cpp中),并对最右边的区域进行修改,并填充最左边像素的块的部分。我在这里确定了一段显然对此负责的代码。有人可以帮我实现这个功能吗?

if ((col == 0) | (col == m_frameFilter->m_numCols - 1))
    {
        // TODO: improve by process on Left or Right only
        primitives.extendRowBorder(reconPic->getLumaAddr(m_rowAddr), stride, reconPic->m_picWidth, realH, reconPic->m_lumaMarginX);

        if (m_frameFilter->m_param->internalCsp != X265_CSP_I400)
        {
            primitives.extendRowBorder(reconPic->getCbAddr(m_rowAddr), strideC, reconPic->m_picWidth >> hChromaShift, realH >> vChromaShift, reconPic->m_chromaMarginX);
            primitives.extendRowBorder(reconPic->getCrAddr(m_rowAddr), strideC, reconPic->m_picWidth >> hChromaShift, realH >> vChromaShift, reconPic->m_chromaMarginX);
        }
    }

    // Extra Left and Right border on first and last CU
    if ((col == 0) | (col == m_frameFilter->m_numCols - 1))
    {
        copySizeY += lumaMarginX;
        copySizeC += chromaMarginX;
    }

    // First column need extension left padding area and first CU
    if (col == 0)
    {
        pixY -= lumaMarginX;
        pixU -= chromaMarginX;
        pixV -= chromaMarginX;
    }

0 个答案:

没有答案