[x265] [PATCH 1 of 2] cleanup: hardcoded m_qtTempTComYuv[qtLayer].m_width to MAX_CU_SIZE
chen
chenm003 at 163.com
Wed Nov 13 04:58:16 CET 2013
在 2013-11-13 07:02:33,"Steve Borho" <steve at borho.org> 写道:
On Tue, Nov 12, 2013 at 2:17 AM, Min Chen <chenm003 at 163.com> wrote:
# HG changeset patch
# User Min Chen <chenm003 at 163.com>
# Date 1384244049 -28800
# Node ID 8c731f8c71ff6f42718a80934433a154417caeec
# Parent 1ca01c82609fbb173a665c31adf07c429806d4f1
cleanup: hardcoded m_qtTempTComYuv[qtLayer].m_width to MAX_CU_SIZE
neither of these apply cleanly
use fixed stride to reduce number of parameters
diff -r 1ca01c82609f -r 8c731f8c71ff source/Lib/TLibEncoder/TEncSearch.cpp
--- a/source/Lib/TLibEncoder/TEncSearch.cpp Mon Nov 11 15:46:00 2013 +0530
+++ b/source/Lib/TLibEncoder/TEncSearch.cpp Tue Nov 12 16:14:09 2013 +0800
@@ -436,7 +436,7 @@
TCoeff* coeff = m_qtTempCoeffY[qtLayer] + numCoeffPerInc * absPartIdx;
int16_t* reconQt = m_qtTempTComYuv[qtLayer].getLumaAddr(absPartIdx);
- uint32_t reconQtStride = m_qtTempTComYuv[qtLayer].m_width;
+ assert(m_qtTempTComYuv[qtLayer].m_width == MAX_CU_SIZE);
uint32_t zorder = cu->getZorderIdxInCU() + absPartIdx;
Pel* reconIPred = cu->getPic()->getPicYuvRec()->getLumaAddr(cu->getAddr(), zorder);
@@ -502,7 +502,7 @@
}
//===== reconstruction =====
- primitives.calcrecon[size](pred, residual, recon, reconQt, reconIPred, stride, reconQtStride, reconIPredStride);
+ primitives.calcrecon[size](pred, residual, recon, reconQt, reconIPred, stride, MAX_CU_SIZE, reconIPredStride);
//===== update distortion =====
outDist += primitives.sse_pp[part](fenc, stride, recon, stride);
@@ -548,7 +548,7 @@
uint32_t numCoeffPerInc = (cu->getSlice()->getSPS()->getMaxCUWidth() * cu->getSlice()->getSPS()->getMaxCUHeight() >> (cu->getSlice()->getSPS()->getMaxCUDepth() << 1)) >> 2;
TCoeff* coeff = (chromaId > 0 ? m_qtTempCoeffCr[qtlayer] : m_qtTempCoeffCb[qtlayer]) + numCoeffPerInc * absPartIdx;
int16_t* reconQt = (chromaId > 0 ? m_qtTempTComYuv[qtlayer].getCrAddr(absPartIdx) : m_qtTempTComYuv[qtlayer].getCbAddr(absPartIdx));
- uint32_t reconQtStride = m_qtTempTComYuv[qtlayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
uint32_t zorder = cu->getZorderIdxInCU() + absPartIdx;
Pel* reconIPred = (chromaId > 0 ? cu->getPic()->getPicYuvRec()->getCrAddr(cu->getAddr(), zorder) : cu->getPic()->getPicYuvRec()->getCbAddr(cu->getAddr(), zorder));
@@ -636,7 +636,7 @@
}
//===== reconstruction =====
- primitives.calcrecon[size](pred, residual, recon, reconQt, reconIPred, stride, reconQtStride, reconIPredStride);
+ primitives.calcrecon[size](pred, residual, recon, reconQt, reconIPred, stride, MAX_CU_SIZE / 2, reconIPredStride);
//===== update distortion =====
uint32_t dist = primitives.sse_pp[part](fenc, stride, recon, stride);
@@ -954,24 +954,24 @@
uint32_t qtLayer = cu->getSlice()->getSPS()->getQuadtreeTULog2MaxSize() - trSizeLog2;
uint32_t zorder = cu->getZorderIdxInCU() + absPartIdx;
int16_t* src = m_qtTempTComYuv[qtLayer].getLumaAddr(absPartIdx);
- uint32_t srcstride = m_qtTempTComYuv[qtLayer].m_width;
+ assert(m_qtTempTComYuv[qtLayer].m_width == MAX_CU_SIZE);
Pel* dst = cu->getPic()->getPicYuvRec()->getLumaAddr(cu->getAddr(), zorder);
uint32_t dststride = cu->getPic()->getPicYuvRec()->getStride();
- primitives.blockcpy_ps(width, height, dst, dststride, src, srcstride);
+ primitives.blockcpy_ps(width, height, dst, dststride, src, MAX_CU_SIZE);
if (!bLumaOnly)
{
width >>= 1;
height >>= 1;
src = m_qtTempTComYuv[qtLayer].getCbAddr(absPartIdx);
- srcstride = m_qtTempTComYuv[qtLayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtLayer].m_cwidth == MAX_CU_SIZE / 2);
dst = cu->getPic()->getPicYuvRec()->getCbAddr(cu->getAddr(), zorder);
dststride = cu->getPic()->getPicYuvRec()->getCStride();
- primitives.blockcpy_ps(width, height, dst, dststride, src, srcstride);
+ primitives.blockcpy_ps(width, height, dst, dststride, src, MAX_CU_SIZE / 2);
src = m_qtTempTComYuv[qtLayer].getCrAddr(absPartIdx);
dst = cu->getPic()->getPicYuvRec()->getCrAddr(cu->getAddr(), zorder);
- primitives.blockcpy_ps(width, height, dst, dststride, src, srcstride);
+ primitives.blockcpy_ps(width, height, dst, dststride, src, MAX_CU_SIZE / 2);
}
}
@@ -1134,10 +1134,10 @@
Pel* reconIPred = cu->getPic()->getPicYuvRec()->getLumaAddr(cu->getAddr(), zOrder);
uint32_t reconIPredStride = cu->getPic()->getPicYuvRec()->getStride();
int16_t* reconQt = m_qtTempTComYuv[qtlayer].getLumaAddr(absPartIdx);
- uint32_t reconQtStride = m_qtTempTComYuv[qtlayer].m_width;
+ assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
uint32_t width = cu->getWidth(0) >> trDepth;
uint32_t height = cu->getHeight(0) >> trDepth;
- primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, reconQtStride);
+ primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, MAX_CU_SIZE);
if (!bLumaOnly && !bSkipChroma)
{
@@ -1146,12 +1146,12 @@
reconIPred = cu->getPic()->getPicYuvRec()->getCbAddr(cu->getAddr(), zOrder);
reconIPredStride = cu->getPic()->getPicYuvRec()->getCStride();
reconQt = m_qtTempTComYuv[qtlayer].getCbAddr(absPartIdx);
- reconQtStride = m_qtTempTComYuv[qtlayer].m_cwidth;
- primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, reconQtStride);
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
+ primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, MAX_CU_SIZE / 2);
reconIPred = cu->getPic()->getPicYuvRec()->getCrAddr(cu->getAddr(), zOrder);
reconQt = m_qtTempTComYuv[qtlayer].getCrAddr(absPartIdx);
- primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, reconQtStride);
+ primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, MAX_CU_SIZE / 2);
}
}
@@ -1255,20 +1255,20 @@
uint32_t zorder = cu->getZorderIdxInCU() + absPartIdx;
uint32_t width = cu->getWidth(0) >> (trDepth + 1);
uint32_t height = cu->getHeight(0) >> (trDepth + 1);
- uint32_t reconQtStride = m_qtTempTComYuv[qtlayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
uint32_t reconIPredStride = cu->getPic()->getPicYuvRec()->getCStride();
if (stateU0V1Both2 == 0 || stateU0V1Both2 == 2)
{
Pel* reconIPred = cu->getPic()->getPicYuvRec()->getCbAddr(cu->getAddr(), zorder);
int16_t* reconQt = m_qtTempTComYuv[qtlayer].getCbAddr(absPartIdx);
- primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, reconQtStride);
+ primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, MAX_CU_SIZE / 2);
}
if (stateU0V1Both2 == 1 || stateU0V1Both2 == 2)
{
Pel* reconIPred = cu->getPic()->getPicYuvRec()->getCrAddr(cu->getAddr(), zorder);
int16_t* reconQt = m_qtTempTComYuv[qtlayer].getCrAddr(absPartIdx);
- primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, reconQtStride);
+ primitives.blockcpy_ps(width, height, reconIPred, reconIPredStride, reconQt, MAX_CU_SIZE / 2);
}
}
}
@@ -3182,10 +3182,10 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_LUMA];
assert(scalingListType < 6);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, m_qtTempTComYuv[qtlayer].m_width, coeffCurY, trWidth, trHeight, scalingListType, false, lastPosY); //this is for inter mode only
-
- const uint32_t nonZeroDistY = primitives.sse_ss[partSize](resiYuv->getLumaAddr(absTUPartIdx), resiYuv->m_width, m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx),
- m_qtTempTComYuv[qtlayer].m_width);
+ assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, MAX_CU_SIZE, coeffCurY, trWidth, trHeight, scalingListType, false, lastPosY); //this is for inter mode only
+
+ const uint32_t nonZeroDistY = primitives.sse_ss[partSize](resiYuv->getLumaAddr(absTUPartIdx), resiYuv->m_width, m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx), MAX_CU_SIZE);
if (cu->isLosslessCoded(0))
{
distY = nonZeroDistY;
@@ -3227,10 +3227,10 @@
if (!absSumY)
{
int16_t *ptr = m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx);
- const uint32_t stride = m_qtTempTComYuv[qtlayer].m_width;
+ assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
assert(trWidth == trHeight);
- primitives.blockfill_s[(int)g_convertToBit[trWidth]](ptr, stride, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidth]](ptr, MAX_CU_SIZE, 0);
}
uint32_t distU = 0;
@@ -3254,11 +3254,12 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_U];
assert(scalingListType < 6);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, pcResiCurrU, m_qtTempTComYuv[qtlayer].m_cwidth, coeffCurU, trWidthC, trHeightC, scalingListType, false, lastPosU);
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, pcResiCurrU, MAX_CU_SIZE / 2, coeffCurU, trWidthC, trHeightC, scalingListType, false, lastPosU);
uint32_t dist = primitives.sse_ss[partSizeC](resiYuv->getCbAddr(absTUPartIdxC), resiYuv->m_cwidth,
m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC),
- m_qtTempTComYuv[qtlayer].m_cwidth);
+ MAX_CU_SIZE / 2);
const uint32_t nonZeroDistU = m_rdCost->scaleChromaDistCb(dist);
if (cu->isLosslessCoded(0))
@@ -3301,10 +3302,10 @@
if (!absSumU)
{
int16_t *ptr = m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC);
- const uint32_t stride = m_qtTempTComYuv[qtlayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
assert(trWidthC == trHeightC);
- primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, stride, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, MAX_CU_SIZE / 2, 0);
}
distV = m_rdCost->scaleChromaDistCr(primitives.sse_sp[partSizeC](resiYuv->getCrAddr(absTUPartIdxC), resiYuv->m_cwidth, m_tempPel, trWidthC));
@@ -3320,11 +3321,12 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_V];
assert(scalingListType < 6);
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, m_qtTempTComYuv[qtlayer].m_cwidth, coeffCurV, trWidthC, trHeightC, scalingListType, false, lastPosV);
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, MAX_CU_SIZE / 2, coeffCurV, trWidthC, trHeightC, scalingListType, false, lastPosV);
uint32_t dist = primitives.sse_ss[partSizeC](resiYuv->getCrAddr(absTUPartIdxC), resiYuv->m_cwidth,
m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC),
- m_qtTempTComYuv[qtlayer].m_cwidth);
+ MAX_CU_SIZE / 2);
const uint32_t nonZeroDistV = m_rdCost->scaleChromaDistCr(dist);
if (cu->isLosslessCoded(0))
@@ -3367,10 +3369,10 @@
if (!absSumV)
{
int16_t *ptr = m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC);
- const uint32_t stride = m_qtTempTComYuv[qtlayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
assert(trWidthC == trHeightC);
- primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, stride, 0);
+ primitives.blockfill_s[(int)g_convertToBit[trWidthC]](ptr, MAX_CU_SIZE / 2, 0);
}
}
cu->setCbfSubParts(absSumY ? setCbf : 0, TEXT_LUMA, absPartIdx, depth);
@@ -3387,7 +3389,7 @@
UInt64 singleCostY = MAX_INT64;
int16_t *curResiY = m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx);
- uint32_t resiStride = m_qtTempTComYuv[qtlayer].m_width;
+ assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
TCoeff bestCoeffY[32 * 32];
memcpy(bestCoeffY, coeffCurY, sizeof(TCoeff) * numSamplesLuma);
@@ -3395,7 +3397,7 @@
int16_t bestResiY[32 * 32];
for (int i = 0; i < trHeight; ++i)
{
- memcpy(bestResiY + i * trWidth, curResiY + i * resiStride, sizeof(int16_t) * trWidth);
+ memcpy(bestResiY + i * trWidth, curResiY + i * MAX_CU_SIZE, sizeof(int16_t) * trWidth);
}
m_rdGoOnSbacCoder->load(m_rdSbacCoders[depth][CI_QT_TRAFO_ROOT]);
@@ -3425,12 +3427,13 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_LUMA];
assert(scalingListType < 6);
-
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, m_qtTempTComYuv[qtlayer].m_width, coeffCurY, trWidth, trHeight, scalingListType, true, lastPosTransformSkipY);
+ assert(m_qtTempTComYuv[qtlayer].m_width == MAX_CU_SIZE);
+
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiY, MAX_CU_SIZE, coeffCurY, trWidth, trHeight, scalingListType, true, lastPosTransformSkipY);
nonZeroDistY = primitives.sse_ss[partSize](resiYuv->getLumaAddr(absTUPartIdx), resiYuv->m_width,
m_qtTempTComYuv[qtlayer].getLumaAddr(absTUPartIdx),
- m_qtTempTComYuv[qtlayer].m_width);
+ MAX_CU_SIZE);
singleCostY = m_rdCost->calcRdCost(nonZeroDistY, skipSingleBitsY);
}
@@ -3441,7 +3444,7 @@
memcpy(coeffCurY, bestCoeffY, sizeof(TCoeff) * numSamplesLuma);
for (int i = 0; i < trHeight; ++i)
{
- memcpy(curResiY + i * resiStride, &bestResiY[i * trWidth], sizeof(int16_t) * trWidth);
+ memcpy(curResiY + i * MAX_CU_SIZE, &bestResiY[i * trWidth], sizeof(int16_t) * trWidth);
}
}
else
@@ -3463,7 +3466,7 @@
int16_t *curResiU = m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC);
int16_t *curResiV = m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC);
- uint32_t stride = m_qtTempTComYuv[qtlayer].m_cwidth;
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
TCoeff bestCoeffU[32 * 32], bestCoeffV[32 * 32];
memcpy(bestCoeffU, coeffCurU, sizeof(TCoeff) * numSamplesChroma);
@@ -3472,8 +3475,8 @@
int16_t bestResiU[32 * 32], bestResiV[32 * 32];
for (int i = 0; i < trHeightC; ++i)
{
- memcpy(&bestResiU[i * trWidthC], curResiU + i * stride, sizeof(int16_t) * trWidthC);
- memcpy(&bestResiV[i * trWidthC], curResiV + i * stride, sizeof(int16_t) * trWidthC);
+ memcpy(&bestResiU[i * trWidthC], curResiU + i * (MAX_CU_SIZE / 2), sizeof(int16_t) * trWidthC);
+ memcpy(&bestResiV[i * trWidthC], curResiV + i * (MAX_CU_SIZE / 2), sizeof(int16_t) * trWidthC);
}
m_rdGoOnSbacCoder->load(m_rdSbacCoders[depth][CI_QT_TRAFO_ROOT]);
@@ -3515,12 +3518,13 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_U];
assert(scalingListType < 6);
-
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiU, m_qtTempTComYuv[qtlayer].m_cwidth, coeffCurU, trWidthC, trHeightC, scalingListType, true, lastPosTransformSkipU);
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
+
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiU, MAX_CU_SIZE / 2, coeffCurU, trWidthC, trHeightC, scalingListType, true, lastPosTransformSkipU);
uint32_t dist = primitives.sse_ss[partSizeC](resiYuv->getCbAddr(absTUPartIdxC), resiYuv->m_cwidth,
m_qtTempTComYuv[qtlayer].getCbAddr(absTUPartIdxC),
- m_qtTempTComYuv[qtlayer].m_cwidth);
+ MAX_CU_SIZE / 2);
nonZeroDistU = m_rdCost->scaleChromaDistCb(dist);
singleCostU = m_rdCost->calcRdCost(nonZeroDistU, singleBitsU);
}
@@ -3532,7 +3536,7 @@
memcpy(coeffCurU, bestCoeffU, sizeof(TCoeff) * numSamplesChroma);
for (int i = 0; i < trHeightC; ++i)
{
- memcpy(curResiU + i * stride, &bestResiU[i * trWidthC], sizeof(int16_t) * trWidthC);
+ memcpy(curResiU + i * (MAX_CU_SIZE / 2), &bestResiU[i * trWidthC], sizeof(int16_t) * trWidthC);
}
}
else
@@ -3553,12 +3557,13 @@
int scalingListType = 3 + g_eTTable[(int)TEXT_CHROMA_V];
assert(scalingListType < 6);
-
- m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, m_qtTempTComYuv[qtlayer].m_cwidth, coeffCurV, trWidthC, trHeightC, scalingListType, true, lastPosTransformSkipV);
+ assert(m_qtTempTComYuv[qtlayer].m_cwidth == MAX_CU_SIZE / 2);
+
+ m_trQuant->invtransformNxN(cu->getCUTransquantBypass(absPartIdx), REG_DCT, curResiV, MAX_CU_SIZE / 2, coeffCurV, trWidthC, trHeightC, scalingListType, true, lastPosTransformSkipV);
uint32_t dist = primitives.sse_ss[partSizeC](resiYuv->getCrAddr(absTUPartIdxC), resiYuv->m_cwidth,
m_qtTempTComYuv[qtlayer].getCrAddr(absTUPartIdxC),
- m_qtTempTComYuv[qtlayer].m_cwidth);
+ MAX_CU_SIZE / 2);
nonZeroDistV = m_rdCost->scaleChromaDistCr(dist);
singleCostV = m_rdCost->calcRdCost(nonZeroDistV, singleBitsV);
}
@@ -3570,7 +3575,7 @@
memcpy(coeffCurV, bestCoeffV, sizeof(TCoeff) * numSamplesChroma);
for (int i = 0; i < trHeightC; ++i)
{
- memcpy(curResiV + i * stride, &bestResiV[i * trWidthC], sizeof(int16_t) * trWidthC);
+ memcpy(curResiV + i * (MAX_CU_SIZE / 2), &bestResiV[i * trWidthC], sizeof(int16_t) * trWidthC);
}
}
else
diff -r 1ca01c82609f -r 8c731f8c71ff source/common/TShortYUV.cpp
--- a/source/common/TShortYUV.cpp Mon Nov 11 15:46:00 2013 +0530
+++ b/source/common/TShortYUV.cpp Tue Nov 12 16:14:09 2013 +0800
@@ -123,10 +123,6 @@
addClipChroma(srcYuv0, srcYuv1, trUnitIdx, partSize >> m_hChromaShift);
}
-#if _MSC_VER
-#pragma warning (disable: 4244)
-#endif
-
void TShortYUV::addClipLuma(TShortYUV* srcYuv0, TShortYUV* srcYuv1, unsigned int trUnitIdx, unsigned int partSize)
{
int16_t* src0 = srcYuv0->getLumaAddr(trUnitIdx, partSize);
_______________________________________________
x265-devel mailing list
x265-devel at videolan.org
https://mailman.videolan.org/listinfo/x265-devel
--
Steve Borho
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20131113/39f6e92a/attachment-0001.html>
More information about the x265-devel
mailing list