bool IntraParser::parseFile(QTextStream* pcInputStream, ComSequence* pcSequence) { Q_ASSERT( pcSequence != NULL ); QString strOneLine; QRegExp cMatchTarget; /// <0,8> 8 36 31 36 30 36 31 36 0 36 2 36 1 36 0 36 1 36 /// read one LCU ComFrame* pcFrame = NULL; ComCU* pcLCU = NULL; cMatchTarget.setPattern("^<(-?[0-9]+),([0-9]+)> (.*)"); QTextStream cIntraDirInfoStream; int iDecOrder = -1; int iLastPOC = -1; while( !pcInputStream->atEnd() ) { strOneLine = pcInputStream->readLine(); if( cMatchTarget.indexIn(strOneLine) != -1 ) { /// poc and lcu addr int iPoc = cMatchTarget.cap(1).toInt(); iDecOrder += (iLastPOC != iPoc); iLastPOC = iPoc; pcFrame = pcSequence->getFramesInDecOrder().at(iDecOrder); int iAddr = cMatchTarget.cap(2).toInt(); pcLCU = pcFrame->getLCUs().at(iAddr); /// QString strIntraDir = cMatchTarget.cap(3); cIntraDirInfoStream.setString( &strIntraDir, QIODevice::ReadOnly ); xReadIntraMode(&cIntraDirInfoStream, pcLCU); } } return true; }
QPixmap* DrawEngine::drawFrame( ComSequence* pcSequence, int iPoc, QPixmap *pcPixmap ) { ComFrame* pcFrame = pcSequence->getFramesInDisOrder().at(iPoc); int iLCUTotalNum = pcFrame->getLCUs().size(); /// draw original pic m_cDrawnPixmap = pcPixmap->scaled(pcPixmap->size()*m_dScale, Qt::KeepAspectRatio, Qt::FastTransformation); QPainter cPainter(&m_cDrawnPixmap); /*********************************************************************** * Followings are for drawing filters * ***********************************************************************/ /// draw TU for( int iAddr = 0; iAddr < iLCUTotalNum; iAddr++ ) { ComCU* pcLCU = pcFrame->getLCUs().at(iAddr); xDrawTU( &cPainter, pcLCU ); } /// draw PU for( int iAddr = 0; iAddr < iLCUTotalNum; iAddr++ ) { ComCU* pcLCU = pcFrame->getLCUs().at(iAddr); xDrawPU( &cPainter, pcLCU ); } /// draw CU QRect cScaledCUArea; for( int iAddr = 0; iAddr < iLCUTotalNum; iAddr++ ) { ComCU* pcLCU = pcFrame->getLCUs().at(iAddr); xDrawCU( &cPainter, pcLCU ); } /// draw CTU (i.e. LCU) for( int iAddr = 0; iAddr < iLCUTotalNum; iAddr++ ) { ComCU* pcLCU = pcFrame->getLCUs().at(iAddr); int iPixelX = pcLCU->getX(); int iPixelY = pcLCU->getY(); cScaledCUArea.setCoords( iPixelX, iPixelY, (iPixelX+pcLCU->getSize())-1, (iPixelY+pcLCU->getSize())-1 ); xScaleRect(&cScaledCUArea,&cScaledCUArea); m_cFilterLoader.drawCTU(&cPainter, pcLCU, m_dScale, &cScaledCUArea); } ///draw Frame QRect cScaledFrameArea(QPoint(0,0), m_cDrawnPixmap.size()); m_cFilterLoader.drawFrame(&cPainter, pcFrame, m_dScale, &cScaledFrameArea); return &m_cDrawnPixmap; }
bool CUPUParser::parseFile(QTextStream* pcInputStream, ComSequence* pcSequence) { Q_ASSERT( pcSequence != NULL ); /// int iSeqWidth = pcSequence->getWidth(); int iMaxCUSize = pcSequence->getMaxCUSize(); int iCUOneRow = (iSeqWidth+iMaxCUSize-1)/iMaxCUSize; //// QString strOneLine; QRegExp cMatchTarget; /// <1,1> 99 0 0 5 0 /// read one LCU ComFrame* pcFrame = NULL; ComCU* pcLCU = NULL; int iLCUSize = pcSequence->getMaxCUSize(); cMatchTarget.setPattern("^<(-?[0-9]+),([0-9]+)> (.*) "); QTextStream cCUInfoStream; int iDecOrder = -1; int iLastPOC = -1; while( !pcInputStream->atEnd() ) { strOneLine = pcInputStream->readLine(); if( cMatchTarget.indexIn(strOneLine) != -1 ) { /// poc and lcu addr int iPoc = cMatchTarget.cap(1).toInt(); iDecOrder += (iLastPOC != iPoc); iLastPOC = iPoc; pcFrame = pcSequence->getFramesInDecOrder().at(iDecOrder); int iAddr = cMatchTarget.cap(2).toInt(); pcLCU = new ComCU(pcFrame); pcLCU->setAddr(iAddr); pcLCU->setFrame(pcFrame); pcLCU->setDepth(0); pcLCU->setZorder(0); pcLCU->setSize(iLCUSize); int iPixelX = (pcLCU->getAddr()%iCUOneRow)*iMaxCUSize; int iPixelY = (pcLCU->getAddr()/iCUOneRow)*iMaxCUSize; pcLCU->setX(iPixelX); pcLCU->setY(iPixelY); /// recursively parse the CU&PU quard-tree structure QString strCUInfo = cMatchTarget.cap(3); cCUInfoStream.setString( &strCUInfo, QIODevice::ReadOnly ); if( xReadInCUMode( &cCUInfoStream, pcLCU ) == false ) return false; pcFrame->getLCUs().push_back(pcLCU); } /// sort LCU in ascendning order qSort(pcFrame->getLCUs().begin(), pcFrame->getLCUs().end(), xCUSortingOrder); } return true; }