我正在尝试使用 H.265 运动补偿和搜索(此处的 HEVC-libx265 实现:https ://bitbucket.org/multicoreware/x265/downloads )。我需要稍微扩展边缘扩展搜索,并用最左边的像素填充宏块,就好像我的示例视频像圆柱体一样(最右边连接到最左边)。
我需要做的基本上是这样的:
一种方法是修改边缘扩展区域(已经在代码中,在 中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;
}