📄 mcpad.cpp
字号:
iLeftX=iX;
if(iX>0)
iLeftColour=ppxlcTexture[iLeftX-1];
}
else if(bInVop==FALSE && *ppxlcAlpha!=transpValue) {
bInVop=TRUE;
if(iLeftColour==invalidColour)
iLeftColour=ppxlcTexture[iX];
else iLeftColour=(iLeftColour+ppxlcTexture[iX]+1)>>1;
for(iJ=iLeftX;iJ<iX;iJ++)
ppxlcTexture[iJ]=(PixelC)iLeftColour;
}
}
ppxlcAlphaBase += iFieldSkip;
if(bInVop==FALSE) {
if(iLeftX==0) {
m_pbEmptyRowArray[iY]=TRUE;
bEmptyRow=TRUE;
}
else {
for(iJ=iLeftX;iJ<iX;iJ++)
ppxlcTexture[iJ]=(PixelC)iLeftColour;
}
}
}
if(bEmptyRow) {
ppxlcTexture=ppxlcTextureBase;
PixelC *ppxlcUpperRow = NULL;
for(iY=0;iY<(CoordI)uiBlkYSize;iY++,ppxlcTexture+=iFieldSkip)
if(!m_pbEmptyRowArray[iY])
ppxlcUpperRow = ppxlcTexture;
else {
PixelC *ppxlcLowerRow = ppxlcTexture+iFieldSkip;
CoordI iYY;
for(iYY=iY+1;iYY<(CoordI)uiBlkYSize;iYY++,ppxlcLowerRow+=iFieldSkip)
if(!m_pbEmptyRowArray[iYY])
break;
if(iYY<(CoordI)uiBlkYSize) {
if(ppxlcUpperRow==NULL) {
for(;ppxlcTexture<ppxlcLowerRow;ppxlcTexture+=iFieldSkip)
memcpy(ppxlcTexture,ppxlcLowerRow,uiBlkXSize*iUnit);
}
else {
for(;ppxlcTexture<ppxlcLowerRow;ppxlcTexture+=iFieldSkip)
for(iX=0;iX<(CoordI)uiBlkXSize;iX++)
ppxlcTexture[iX]= (ppxlcUpperRow[iX]+ppxlcLowerRow[iX]+1)>>1;
}
}
else {
assert(ppxlcUpperRow!=NULL);
for(iYY=iY;iYY<(CoordI)uiBlkYSize;iYY++,ppxlcTexture+=iFieldSkip)
memcpy(ppxlcTexture,ppxlcUpperRow,uiBlkXSize*iUnit);
}
iY=iYY-1;
ppxlcTexture -= iFieldSkip;
}
}
}
Void CVideoObject::padNeighborTranspMBFields (
CoordI xb,
CoordI yb,
CMBMode *pmbmd,
Int mode,
PixelC *ppxlcMBField1,
PixelC *ppxlcMBField2,
Int uiBlkXSize,
Int uiStride
)
{
CMBMode* pmbmdLeft = pmbmd - 1;
CMBMode* pmbmdAbov = pmbmd - m_iNumMBX;
if (xb > 0) {
if (pmbmdLeft->m_rgFieldTranspStatus [mode] == ALL)
if (!(pmbmdLeft->m_rgbFieldPadded [mode])) {
mcPadLeftMBFields (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
pmbmdLeft->m_rgbFieldPadded[mode] = TRUE;
}
}
if (yb > 0) {
if (pmbmdAbov->m_rgFieldTranspStatus [mode] == ALL)
if (!(pmbmdAbov->m_rgbFieldPadded [mode])) {
mcPadTopMBFields (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
pmbmdAbov->m_rgbFieldPadded[mode] = TRUE;
}
}
}
Void CVideoObject::padCurrAndTopTranspMBFieldsFromNeighbor (
CoordI xb,
CoordI yb,
CMBMode *pmbmd,
Int mode,
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride
)
{
CMBMode* pmbmdLeft = pmbmd - 1;
CMBMode* pmbmdAbov = pmbmd - m_iNumMBX;
if (xb > 0) {
if (pmbmdLeft->m_rgFieldTranspStatus [mode] != ALL) {
mcPadCurrMBFieldsFromLeft (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
pmbmd->m_rgbFieldPadded [mode] = TRUE;
}
}
if (yb > 0) {
if (pmbmdAbov->m_rgFieldTranspStatus [mode] != ALL) {
if (!(pmbmd->m_rgbFieldPadded [mode])) {
mcPadCurrMBFieldsFromTop (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
pmbmd->m_rgbFieldPadded [mode] = TRUE;
}
} else {
if (!(pmbmdAbov->m_rgbFieldPadded [mode]))
mcSetTopMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
}
}
if(yb == m_iNumMBY-1) {
if(xb > 0 && pmbmdLeft->m_rgFieldTranspStatus [mode] == ALL && !(pmbmdLeft->m_rgbFieldPadded [mode]))
mcSetLeftMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
if(xb == m_iNumMBX-1 && !(pmbmd->m_rgbFieldPadded [mode]))
mcSetCurrMBFieldsGray (ppxlcMBField1, ppxlcMBField2, uiBlkXSize, uiStride);
}
}
Void CVideoObject::mcPadLeftMBFields (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride
)
{
UInt iy, uiBlkYSize = uiBlkXSize/2;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField1 - uiBlkXSize, *ppxlcMBField1, uiBlkXSize);
ppxlcMBField1 += 2*uiStride;
}
if (!ppxlcMBField2) return;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField2 - uiBlkXSize, *ppxlcMBField2, uiBlkXSize);
ppxlcMBField2 += 2*uiStride;
}
}
Void CVideoObject::mcPadTopMBFields (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int iBlkXSize,
Int iStride
)
{
Int ix, iy, iBlkYSize = iBlkXSize/2;
for (ix = 0; ix < iBlkXSize; ix++) {
PixelC* ppxlcYCol = ppxlcMBField1;
for (iy = 0; iy < iBlkYSize; iy++) {
ppxlcYCol -= 2*iStride;
*ppxlcYCol = *ppxlcMBField1;
}
ppxlcMBField1++;
}
if (!ppxlcMBField2) return;
for (ix = 0; ix < iBlkXSize; ix++) {
PixelC* ppxlcACol = ppxlcMBField2;
for (iy = 0; iy < iBlkYSize; iy++) {
ppxlcACol -= 2*iStride;
*ppxlcACol = *ppxlcMBField2;
}
ppxlcMBField2++;
}
}
Void CVideoObject::mcPadCurrMBFieldsFromLeft (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride)
{
UInt iy, uiBlkYSize = uiBlkXSize/2;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField1, *(ppxlcMBField1 - 1), uiBlkXSize);
ppxlcMBField1 += 2*uiStride;
}
if (!ppxlcMBField2) return;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField2, *(ppxlcMBField2 - 1), uiBlkXSize);
ppxlcMBField2 += 2*uiStride;
}
}
Void CVideoObject::mcPadCurrMBFieldsFromTop (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int iBlkXSize,
Int iStride)
{
Int ix, iy, iBlkYSize = iBlkXSize/2;
PixelC *ppxlcSrcMBField = ppxlcMBField1-2*iStride;
for (ix = 0; ix < iBlkXSize; ix++) {
PixelC* ppxlcDstMBField = ppxlcSrcMBField;
for (iy = 0; iy < iBlkYSize; iy++) {
ppxlcDstMBField += 2*iStride;
*ppxlcDstMBField = *ppxlcSrcMBField;
}
ppxlcSrcMBField++;
}
if(!ppxlcMBField2) return;
ppxlcSrcMBField = ppxlcMBField2-2*iStride;
for (ix = 0; ix < iBlkXSize; ix++) {
PixelC* ppxlcDstMBField = ppxlcSrcMBField;
for (iy = 0; iy < iBlkYSize; iy++) {
ppxlcDstMBField += 2*iStride;
*ppxlcDstMBField = *ppxlcSrcMBField;
}
ppxlcSrcMBField++;
}
}
Void CVideoObject::mcSetTopMBFieldsGray (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride
)
{
UInt iy, uiBlkYSize = uiBlkXSize/2;
PixelC pxlcGrayVal = 128;
if(m_volmd.bNot8Bit)
pxlcGrayVal = 1<<(m_volmd.nBits-1);
ppxlcMBField1 -= 2*uiStride;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize);
ppxlcMBField1 -= 2*uiStride;
}
if (!ppxlcMBField2) return;
ppxlcMBField2 -= 2*uiStride;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize);
ppxlcMBField2 -= 2*uiStride;
}
}
Void CVideoObject::mcSetLeftMBFieldsGray (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride)
{
UInt iy, uiBlkYSize = uiBlkXSize/2;
PixelC pxlcGrayVal = 128;
if(m_volmd.bNot8Bit)
pxlcGrayVal = 1<<(m_volmd.nBits-1);
ppxlcMBField1 = ppxlcMBField1-uiBlkXSize;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize);
ppxlcMBField1 += 2*uiStride;
}
if (!ppxlcMBField2) return;
ppxlcMBField2 = ppxlcMBField2-uiBlkXSize;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize);
ppxlcMBField2 += 2*uiStride;
}
}
Void CVideoObject::mcSetCurrMBFieldsGray (
PixelC* ppxlcMBField1,
PixelC* ppxlcMBField2,
Int uiBlkXSize,
Int uiStride)
{
UInt iy, uiBlkYSize = uiBlkXSize/2;
PixelC pxlcGrayVal = 128;
if(m_volmd.bNot8Bit)
pxlcGrayVal = 1<<(m_volmd.nBits-1);
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField1, pxlcGrayVal, uiBlkXSize);
ppxlcMBField1 += 2*uiStride;
}
if (!ppxlcMBField2) return;
for (iy = 0; iy < uiBlkYSize; iy++) {
pxlcmemset (ppxlcMBField2, pxlcGrayVal, uiBlkXSize);
ppxlcMBField2 += 2*uiStride;
}
}
// End of HYUNDAI(1998-5-9)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -