本文整理汇总了C++中TComPicYuv::getWidth方法的典型用法代码示例。如果您正苦于以下问题:C++ TComPicYuv::getWidth方法的具体用法?C++ TComPicYuv::getWidth怎么用?C++ TComPicYuv::getWidth使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TComPicYuv
的用法示例。
在下文中一共展示了TComPicYuv::getWidth方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: xCalcACDCParamSlice
//! calculate AC and DC values for current original image
Void WeightPredAnalysis::xCalcACDCParamSlice(TComSlice *const slice)
{
//===== calculate AC/DC value =====
TComPicYuv* pPic = slice->getPic()->getPicYuvOrg();
WPACDCParam weightACDCParam[MAX_NUM_COMPONENT];
for(Int componentIndex = 0; componentIndex < pPic->getNumberValidComponents(); componentIndex++)
{
const ComponentID compID = ComponentID(componentIndex);
// calculate DC/AC value for channel
const Int iStride = pPic->getStride(compID);
const Int iWidth = pPic->getWidth(compID);
const Int iHeight = pPic->getHeight(compID);
const Int iSample = iWidth*iHeight;
Int64 iOrgDC = 0;
{
const Pel *pPel = pPic->getAddr(compID);
for(Int y = 0; y < iHeight; y++, pPel+=iStride )
{
for(Int x = 0; x < iWidth; x++ )
{
iOrgDC += (Int)( pPel[x] );
}
}
}
const Int64 iOrgNormDC = ((iOrgDC+(iSample>>1)) / iSample);
Int64 iOrgAC = 0;
{
const Pel *pPel = pPic->getAddr(compID);
for(Int y = 0; y < iHeight; y++, pPel += iStride )
{
for(Int x = 0; x < iWidth; x++ )
{
iOrgAC += abs( (Int)pPel[x] - (Int)iOrgNormDC );
}
}
}
const Int fixedBitShift = (slice->getSPS()->getSpsRangeExtension().getHighPrecisionOffsetsEnabledFlag())?RExt__PREDICTION_WEIGHTING_ANALYSIS_DC_PRECISION:0;
weightACDCParam[compID].iDC = (((iOrgDC<<fixedBitShift)+(iSample>>1)) / iSample);
weightACDCParam[compID].iAC = iOrgAC;
}
slice->setWpAcDcParam(weightACDCParam);
}
示例2: updatePixel
Void updatePixel(TComDataCU* pCtu, Pixel** ppPixel)
{
UInt uiMaxCUWidth = pCtu->getSlice()->getSPS()->getMaxCUWidth(); // max cu width
UInt uiMaxCUHeight = pCtu->getSlice()->getSPS()->getMaxCUHeight(); // max cu height
// pic
TComPic *pcPic = pCtu->getPic();
//TComPicYuv* pcPredYuv = pcPic->getPicYuvPred();
//TComPicYuv* pcResiYuv = pcPic->getPicYuvResi();
TComPicYuv* pcRecoYuv = pcPic->getPicYuvRec();
UInt uiNumValidCopmonent = pcPic->getNumberValidComponents();
for (UInt ch = 0; ch < uiNumValidCopmonent; ch++)
{
ComponentID cId = ComponentID(ch);
// picture description
UInt uiStride = pcRecoYuv->getStride(cId); // stride for a certain component
UInt uiPicWidth = pcRecoYuv->getWidth(cId); // picture width for a certain component
UInt uiPicHeight = pcRecoYuv->getHeight(cId); // picture height for a certain component
UInt uiCUPelX = pCtu->getCUPelX() >> (pcRecoYuv->getComponentScaleX(cId)); // x of upper left corner of the cu
UInt uiCUPelY = pCtu->getCUPelY() >> (pcRecoYuv->getComponentScaleY(cId));; // y of upper left corner of the
UInt uiCBWidth = uiMaxCUWidth >> (pcRecoYuv->getComponentScaleX(cId)); // code block width for a certain component
UInt uiCBHeight = uiMaxCUHeight >> (pcRecoYuv->getComponentScaleY(cId)); // code block height for a certain component
// rectangle of the code block
UInt uiTopX = Clip3((UInt)0, uiPicWidth, uiCUPelX);
UInt uiTopY = Clip3((UInt)0, uiPicHeight, uiCUPelY);
UInt uiBottomX = Clip3((UInt)0, uiPicWidth, uiCUPelX + uiCBWidth);
UInt uiBottomY = Clip3((UInt)0, uiPicHeight, uiCUPelY + uiCBHeight);
Pel* pBuffer = pcRecoYuv->getAddr(cId);
for (UInt uiY = uiTopY; uiY < uiBottomY; uiY++)
{
for (UInt uiX = uiTopX; uiX < uiBottomX; uiX++)
{
UInt uiOrgX, uiOrgY;
uiOrgX = g_auiRsmpldToOrg[cId][0][uiX];
uiOrgY = g_auiRsmpldToOrg[cId][1][uiY];
Pixel* pPixel = ppPixel[cId] + getSerialIndex(uiOrgX, uiOrgY, uiPicWidth);
pPixel->m_bIsRec = true;
pPixel->m_uiReco = pBuffer[uiY*uiStride + uiX];
}
}
}
}
示例3: calcMD5
/**
* Calculate the MD5sum of pic, storing the result in digest.
* MD5 calculation is performed on Y' then Cb, then Cr; each in raster order.
* Pel data is inserted into the MD5 function in little-endian byte order,
* using sufficient bytes to represent the picture bitdepth. Eg, 10bit data
* uses little-endian two byte words; 8bit data uses single byte words.
*/
void calcMD5(TComPicYuv& pic, unsigned char digest[16])
{
unsigned bitdepth = g_uiBitDepth + g_uiBitIncrement;
/* choose an md5_plane packing function based on the system bitdepth */
typedef void (*MD5PlaneFunc)(MD5&, const Pel*, unsigned, unsigned, unsigned);
MD5PlaneFunc md5_plane_func;
md5_plane_func = bitdepth <= 8 ? (MD5PlaneFunc)md5_plane<1> : (MD5PlaneFunc)md5_plane<2>;
MD5 md5;
unsigned width = pic.getWidth();
unsigned height = pic.getHeight();
unsigned stride = pic.getStride();
md5_plane_func(md5, pic.getLumaAddr(), width, height, stride);
width >>= 1;
height >>= 1;
stride >>= 1;
md5_plane_func(md5, pic.getCbAddr(), width, height, stride);
md5_plane_func(md5, pic.getCrAddr(), width, height, stride);
md5.finalize(digest);
}
示例4: matchTemplate
Void matchTemplate(TComDataCU*& rpcTempCU, Pixel** ppPixel)
{
// template matching
UInt uiCUPelX = rpcTempCU->getCUPelX(); // x of upper left corner of the cu
UInt uiCUPelY = rpcTempCU->getCUPelY(); // y of upper left corner of the cu
UInt uiMaxCUWidth = rpcTempCU->getSlice()->getSPS()->getMaxCUWidth(); // max cu width
UInt uiMaxCUHeight = rpcTempCU->getSlice()->getSPS()->getMaxCUHeight(); // max cu height
// pic
TComPic* pcPic = rpcTempCU->getPic();
TComPicYuv* pcPredYuv = pcPic->getPicYuvPred();
TComPicYuv* pcResiYuv = pcPic->getPicYuvResi();
UInt uiNumValidCopmonent = pcPic->getNumberValidComponents();
vector<PixelTemplate> vInsertList;
for (UInt ch = 0; ch < uiNumValidCopmonent; ch++)
{
int all = 0;
int average = 0;
int afind = 0;
int maxfind = 0, minfind = INT_MAX;
int ax = 0, ay = 0;
int adiff = 0;
ComponentID cId = ComponentID(ch);
// picture description
UInt uiStride = pcPredYuv->getStride(cId); // stride for a certain component
UInt uiPicWidth = pcPredYuv->getWidth(cId); // picture width for a certain component
UInt uiPicHeight = pcPredYuv->getHeight(cId); // picture height for a certain component
UInt uiCBWidth = uiMaxCUWidth >> (pcPredYuv->getComponentScaleX(cId)); // code block width for a certain component
UInt uiCBHeight = uiMaxCUHeight >> (pcPredYuv->getComponentScaleY(cId)); // code block height for a certain component
// rectangle of the code block
UInt uiTopX = Clip3((UInt)0, uiPicWidth, uiCUPelX);
UInt uiTopY = Clip3((UInt)0, uiPicHeight, uiCUPelY);
UInt uiBottomX = Clip3((UInt)0, uiPicWidth, uiCUPelX + uiCBWidth);
UInt uiBottomY = Clip3((UInt)0, uiPicHeight, uiCUPelY + uiCBHeight);
for (UInt uiY = uiTopY; uiY < uiBottomY; uiY++)
{
for (UInt uiX = uiTopX; uiX < uiBottomX; uiX++)
{
UInt uiOrgX, uiOrgY;
uiOrgX = g_auiRsmpldToOrg[cId][0][uiX];
uiOrgY = g_auiRsmpldToOrg[cId][1][uiY];
// template match
UInt uiHashValue1, uiHashValue2;
// get hash values
getHashValue(uiOrgX, uiOrgY, uiPicWidth, ppPixel[cId],uiHashValue1,uiHashValue2);
Pixel* pCurPixel = ppPixel[cId] + getSerialIndex(uiOrgX, uiOrgY, uiPicWidth);
//pCurPixel->m_uiHashValue = uiHashValue1;
assert(uiHashValue1 >= 0 && uiHashValue1 < MAX_PT_NUM);
// lookup table
PixelTemplate* pLookupTable = g_pLookupTable[cId][uiHashValue1];
// number of available template pixels
UInt uiNumTemplate = getNumTemplate(uiOrgX, uiOrgY, uiPicWidth, ppPixel[cId]);
// if uiNumTemplate < 1, predict target with default value and do not insert template
if (uiNumTemplate < 1)
{
UInt uiIdx = uiY * uiStride + uiX;
pcPredYuv->getAddr(cId)[uiIdx] = pCurPixel->m_uiPred;
pcResiYuv->getAddr(cId)[uiIdx] = pCurPixel->m_iResi = pCurPixel->m_uiOrg - pCurPixel->m_uiPred;
continue;
}
// if lookuptable is empty, predict target with default value and insert template
if (pLookupTable == NULL)
{
//
vInsertList.push_back(PixelTemplate(uiOrgX, uiOrgY, uiHashValue1,uiHashValue2,uiNumTemplate,NEW));
UInt uiIdx = uiY*uiStride + uiX;
pcPredYuv->getAddr(cId)[uiIdx] = pCurPixel->m_uiPred;
pcResiYuv->getAddr(cId)[uiIdx] = pCurPixel->m_iResi = pCurPixel->m_uiOrg - pCurPixel->m_uiPred;
continue;
}
MatchMetric mmBestMetric;
UInt uiListLength = 0;
PixelTemplate* pBestMatch = NULL;
PixelTemplate* pPixelTemplate = pLookupTable;
#if PGR_DEBUG
int length = 0;
int a = 0;
int find = 0;
int fx = 0, fy = 0;
int diff = 0;
#endif
UInt uiRemoved = 0;
//.........这里部分代码省略.........
示例5: derivePGRPLT
Void derivePGRPLT(TComDataCU* pcCtu)
{
TComPic* pcPic = pcCtu->getPic();
TComPicYuv* pcOrgYuv = pcPic->getPicYuvOrg();
UInt uiNumValidComponents = pcOrgYuv->getNumberValidComponents();
UInt uiMaxCUWidth = pcCtu->getSlice()->getSPS()->getMaxCUWidth();
UInt uiMaxCUHeight = pcCtu->getSlice()->getSPS()->getMaxCUWidth();
for (UInt ch = 0; ch < uiNumValidComponents; ch++)
{
ComponentID cId = ComponentID(ch);
UInt uiPicWidth = pcOrgYuv->getWidth(cId);
UInt uiPicHeight = pcOrgYuv->getHeight(cId);
UInt uiStride = pcOrgYuv->getStride(cId);
UInt uiCUPelX = pcCtu->getCUPelX() >> (pcOrgYuv->getComponentScaleX(cId)); // x of upper left corner of the cu
UInt uiCUPelY = pcCtu->getCUPelY() >> (pcOrgYuv->getComponentScaleY(cId));; // y of upper left corner of the
UInt uiCBWidth = uiMaxCUWidth >> (pcOrgYuv->getComponentScaleX(cId));
UInt uiCBHeight = uiMaxCUHeight >> (pcOrgYuv->getComponentScaleY(cId));
uiCBWidth = Clip3((UInt)0, uiPicWidth - uiCUPelX, uiCBWidth);
uiCBHeight = Clip3((UInt)0, uiPicHeight - uiCUPelY, uiCBHeight);
// statistics
PelCount* pPixelCount[256];
for (int i = 0; i < 256; i++)
pPixelCount[i] = new PelCount(i);
Pel* pOrg = pcOrgYuv->getAddr(cId, pcCtu->getCtuRsAddr());
for (UInt uiY = 0; uiY < uiCBHeight; uiY++)
{
for (UInt uiX = 0; uiX < uiCBWidth; uiX++)
{
pPixelCount[pOrg[uiX]]->m_uiCount++;
}
pOrg += uiStride;
}
// sort
sort(pPixelCount, pPixelCount + 256, cmpPelCount);
g_ppCTUPalette[cId].m_uiSize = 0;
// insert entry
for (int i = 0, k = 0; k < 4; i++)
{
bool bDuplicate = false;
for (int j = 0; j < 4; j++)
{
// duplicate
if (g_ppCTUPalette[cId].m_pEntry[i] == g_ppPalette[cId].m_pEntry[j])
{
bDuplicate = true;
break;
}
}
if (!bDuplicate)
{
g_ppCTUPalette[cId].m_pEntry[k++] = pPixelCount[i]->m_uiVal;
g_ppCTUPalette[cId].m_uiSize++;
}
}
for (int i = 0; i < 256; i++)
delete pPixelCount[i];
}
}
示例6: xPreanalyze
/** Analyze source picture and compute local image characteristics used for QP adaptation
* \param pcEPic Picture object to be analyzed
* \return Void
*/
Void TEncPreanalyzer::xPreanalyze( TEncPic* pcEPic )
{
TComPicYuv* pcPicYuv = pcEPic->getPicYuvOrg();
const Int iWidth = pcPicYuv->getWidth(COMPONENT_Y);
const Int iHeight = pcPicYuv->getHeight(COMPONENT_Y);
const Int iStride = pcPicYuv->getStride(COMPONENT_Y);
for ( UInt d = 0; d < pcEPic->getMaxAQDepth(); d++ )
{
const Pel* pLineY = pcPicYuv->getAddr(COMPONENT_Y);
TEncPicQPAdaptationLayer* pcAQLayer = pcEPic->getAQLayer(d);
const UInt uiAQPartWidth = pcAQLayer->getAQPartWidth();
const UInt uiAQPartHeight = pcAQLayer->getAQPartHeight();
TEncQPAdaptationUnit* pcAQU = pcAQLayer->getQPAdaptationUnit();
Double dSumAct = 0.0;
for ( UInt y = 0; y < iHeight; y += uiAQPartHeight )
{
const UInt uiCurrAQPartHeight = min(uiAQPartHeight, iHeight-y);
for ( UInt x = 0; x < iWidth; x += uiAQPartWidth, pcAQU++ )
{
const UInt uiCurrAQPartWidth = min(uiAQPartWidth, iWidth-x);
const Pel* pBlkY = &pLineY[x];
UInt64 uiSum[4] = {0, 0, 0, 0};
UInt64 uiSumSq[4] = {0, 0, 0, 0};
UInt uiNumPixInAQPart = 0;
UInt by = 0;
for ( ; by < uiCurrAQPartHeight>>1; by++ )
{
UInt bx = 0;
for ( ; bx < uiCurrAQPartWidth>>1; bx++, uiNumPixInAQPart++ )
{
uiSum [0] += pBlkY[bx];
uiSumSq[0] += pBlkY[bx] * pBlkY[bx];
}
for ( ; bx < uiCurrAQPartWidth; bx++, uiNumPixInAQPart++ )
{
uiSum [1] += pBlkY[bx];
uiSumSq[1] += pBlkY[bx] * pBlkY[bx];
}
pBlkY += iStride;
}
for ( ; by < uiCurrAQPartHeight; by++ )
{
UInt bx = 0;
for ( ; bx < uiCurrAQPartWidth>>1; bx++, uiNumPixInAQPart++ )
{
uiSum [2] += pBlkY[bx];
uiSumSq[2] += pBlkY[bx] * pBlkY[bx];
}
for ( ; bx < uiCurrAQPartWidth; bx++, uiNumPixInAQPart++ )
{
uiSum [3] += pBlkY[bx];
uiSumSq[3] += pBlkY[bx] * pBlkY[bx];
}
pBlkY += iStride;
}
Double dMinVar = DBL_MAX;
for ( Int i=0; i<4; i++)
{
const Double dAverage = Double(uiSum[i]) / uiNumPixInAQPart;
const Double dVariance = Double(uiSumSq[i]) / uiNumPixInAQPart - dAverage * dAverage;
dMinVar = min(dMinVar, dVariance);
}
const Double dActivity = 1.0 + dMinVar;
pcAQU->setActivity( dActivity );
dSumAct += dActivity;
}
pLineY += iStride * uiCurrAQPartHeight;
}
const Double dAvgAct = dSumAct / (pcAQLayer->getNumAQPartInWidth() * pcAQLayer->getNumAQPartInHeight());
pcAQLayer->setAvgActivity( dAvgAct );
}
}