ErrVal ReconstructionBypass::xPad8x8Blk_MbAff( YuvMbBufferExtension* pcBuffer, UInt ui8x8Blk, Bool bV0, Bool bV1, Bool bH, Bool bC0, Bool bC1 ) { Bool bSwitch = ( !bV0 && bV1 && bH ) || ( !bV0 && !bH && !bC0 && ( bV1 || bC1 ) ); Bool bDouble = ( bV0 && bV1 ) || ( ( bV0 || bC0 ) && !bH && ( bV1 || bC1 ) ); ROT( bSwitch && bDouble ); Bool bFromAbove = ( ui8x8Blk < 2 ); Bool bFromLeft = ( ui8x8Blk % 2 == 0 ); B8x8Idx cIdx( (Par8x8)ui8x8Blk ); if( bDouble ) { RNOK( xPadBlock_MbAff( pcBuffer, cIdx, bV0, bH, bC0, true, bFromAbove, bFromLeft ) ); RNOK( xPadBlock_MbAff( pcBuffer, cIdx, bV1, bH, bC1, true, !bFromAbove, bFromLeft ) ); } else if( bSwitch ) { RNOK( xPadBlock_MbAff( pcBuffer, cIdx, bV1, bH, bC1, false, !bFromAbove, bFromLeft ) ); } else { RNOK( xPadBlock_MbAff( pcBuffer, cIdx, bV0, bH, bC0, false, bFromAbove, bFromLeft ) ); } return Err::m_nOK; }
void FrameObject::loadImage(int frameIdx) { // TODO: // this method gets called way too many times even // if just a single parameter was changed if (frameIdx==INT_INVALID || frameIdx >= numFrames()) { p_displayImage = QPixmap(); return; } if (p_source == NULL) return; // check if we have this frame index in our cache already CacheIdx cIdx(p_source->getName(), frameIdx); QPixmap* cachedFrame = frameCache.object(cIdx); if(cachedFrame == NULL) // load the corresponding frame from yuv file into the frame buffer { // add new QPixmap to cache and use its data buffer cachedFrame = new QPixmap(); if (p_source->pixelFormat() != YUVC_24RGBPixelFormat) { // read YUV444 frame from file - 16 bit LE words p_source->getOneFrame(&p_tmpBufferYUV444, frameIdx); // if requested, do some YUV math if( doApplyYUVMath() ) applyYUVMath(&p_tmpBufferYUV444, p_width, p_height, p_source->pixelFormat()); // convert from YUV444 (planar) - 16 bit words to RGB888 (interleaved) color format (in place) convertYUV2RGB(&p_tmpBufferYUV444, &p_PixmapConversionBuffer, YUVC_24RGBPixelFormat, p_source->pixelFormat()); } else { // read RGB24 frame from file p_source->getOneFrame(&p_PixmapConversionBuffer, frameIdx); } if (p_PixmapConversionBuffer.size() == 0) { // Conversion failed. This can happen for example when the pixel format could not be determined. QString pixelFmtName = p_source->pixelFormatList()[p_source->pixelFormat()].name(); QString errTxt = "Error converting image from pixel format type " + pixelFmtName + "."; setInfo(errTxt, true); p_displayImage = QPixmap(); return; } // add this frame into our cache, use MBytes as cost int sizeInMB = p_PixmapConversionBuffer.size() >> 20; // Convert the image in p_PixmapConversionBuffer to a QPixmap QImage tmpImage((unsigned char*)p_PixmapConversionBuffer.data(),p_width,p_height,QImage::Format_RGB888); //QImage tmpImage((unsigned char*)p_PixmapConversionBuffer.data(),p_width,p_height,QImage::Format_RGB30); cachedFrame->convertFromImage(tmpImage); frameCache.insert(cIdx, cachedFrame, sizeInMB); }
void FrameObject::clearCurrentCache() { if (p_source != NULL) { if (duplicateList.count(p_source->getName()) <= 1) { for (int frameIdx = p_startFrame; frameIdx <= numFrames(); frameIdx++) { CacheIdx cIdx(p_source->getName(), frameIdx); if (frameCache.contains(cIdx)) frameCache.remove(cIdx); } } } }
Void MbTransformCoeffs::clearNewLumaLevels8x8( B8x8Idx c8x8Idx, MbTransformCoeffs& rcBaseMbTCoeffs ) { for( S4x4Idx cIdx( c8x8Idx ); cIdx.isLegal( c8x8Idx ); cIdx++ ) { TCoeff* piCoeff = get( cIdx ); TCoeff* piCoeffBase = rcBaseMbTCoeffs.get( cIdx ); for( UInt ui = 0; ui < 16; ui++ ) { if( ! piCoeffBase[ui] ) { piCoeff[ui] = 0; } } } }
ErrVal MbParser::xReadTextureInfo( MbDataAccess& rcMbDataAccess, Bool bTrafo8x8Flag, Bool bBaseLayerAvailable, UInt uiStart, UInt uiStop ) { Bool bReadDQp = ( uiStart < uiStop ); if( !rcMbDataAccess.getSH().isIntraSlice() && rcMbDataAccess.getMbData().getInCropWindowFlag() && ( rcMbDataAccess.getMbData().getBLSkipFlag() || !rcMbDataAccess.getMbData().isIntra() ) ) { if( rcMbDataAccess.getSH().getAdaptiveResidualPredictionFlag() ) { DECRNOK( m_pcMbSymbolReadIf->resPredFlag( rcMbDataAccess ) ); } else { rcMbDataAccess.getMbData().setResidualPredFlag( rcMbDataAccess.getSH().getDefaultResidualPredictionFlag() ); } } else { rcMbDataAccess.getMbData().setResidualPredFlag( false ); } if( rcMbDataAccess.getMbData().getBLSkipFlag() || !rcMbDataAccess.getMbData().isIntra16x16() ) { if( uiStart >= uiStop ) { rcMbDataAccess.getMbData().setMbCbp( 0 ); } else { DECRNOK( m_pcMbSymbolReadIf->cbp( rcMbDataAccess, uiStart, uiStop ) ); } bReadDQp = rcMbDataAccess.getMbData().getMbCbp() != 0; } if( bTrafo8x8Flag && ( rcMbDataAccess.getMbData().getMbCbp() & 0x0F ) ) { DECRNOK( m_pcMbSymbolReadIf->transformSize8x8Flag( rcMbDataAccess ) ); } if( bReadDQp ) { DECRNOK( m_pcMbSymbolReadIf->deltaQp( rcMbDataAccess ) ); } else { rcMbDataAccess.resetQp(); } Bool bIntra16x16 = ( !rcMbDataAccess.getMbData().getBLSkipFlag() && rcMbDataAccess.getMbData().isIntra16x16 () ); if( bIntra16x16 ) { UInt uiDummy = 0; if( uiStart == 0 && uiStop != 0 ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, B4x4Idx(0), LUMA_I16_DC, uiDummy, uiStart, uiStop ) ); } if( rcMbDataAccess.getMbData().isAcCoded() && uiStop > 1 ) { for( S4x4Idx cIdx; cIdx.isLegal(); cIdx++ ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, cIdx, LUMA_I16_AC, uiDummy, uiStart, uiStop ) ); } rcMbDataAccess.getMbData().setMbCbp( 0xf + ( rcMbDataAccess.getMbData().getCbpChroma16x16() << 4) ); } else { rcMbDataAccess.getMbData().setMbCbp( 0x0 + ( rcMbDataAccess.getMbData().getCbpChroma16x16() << 4) ); } DECRNOK( xScanChromaBlocks( rcMbDataAccess, rcMbDataAccess.getMbData().getCbpChroma16x16(), uiStart, uiStop ) ); return Err::m_nOK; } UInt uiMbExtCbp = rcMbDataAccess.getMbData().getMbExtCbp(); if( rcMbDataAccess.getMbData().isTransformSize8x8() ) { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ ) { if( uiMbExtCbp & ( 1 << c8x8Idx.b4x4() ) ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock8x8( rcMbDataAccess, c8x8Idx, uiStart, uiStop ) ); } } } else { for( B8x8Idx c8x8Idx; c8x8Idx.isLegal(); c8x8Idx++ ) { if( uiMbExtCbp & ( 1 << c8x8Idx.b4x4() ) ) { for( S4x4Idx cIdx( c8x8Idx ); cIdx.isLegal( c8x8Idx ); cIdx++ ) { DECRNOK( m_pcMbSymbolReadIf->residualBlock( rcMbDataAccess, cIdx , LUMA_SCAN, uiMbExtCbp, uiStart, uiStop ) ); } } } } rcMbDataAccess.getMbData().setMbExtCbp( uiMbExtCbp ); DECRNOK( xScanChromaBlocks ( rcMbDataAccess, rcMbDataAccess.getMbData().getCbpChroma4x4(), uiStart, uiStop ) ); return Err::m_nOK; }