📄 resizeparameters.cpp
字号:
#include <stdio.h>
#include "ResizeParameters.h"
#define ROTREPORT(x,t) {if(x) {::printf("\n%s\n",t); assert(0); return Err::m_nInvalidParameter;} }
Void
ResizeParameters::init()
{
xCleanGopParameters(m_acCurrentGop);
initRefListPoc();
}
Void
ResizeParameters::xCleanGopParameters ( PictureParameters * pc )
{
for (Int i=0; i<MAX_PICT_PARAM_NB; i++)
{
xCleanPictureParameters(&pc[i]);
}
}
Void
ResizeParameters::xCleanPictureParameters ( PictureParameters * pc )
{
pc->m_iPosX = -1;
pc->m_iPosY = -1;
pc->m_iOutWidth = -1;
pc->m_iOutHeight = -1;
pc->m_iBaseChromaPhaseX = -1;
pc->m_iBaseChromaPhaseY = 0;
}
Void
ResizeParameters::xInitPictureParameters ( PictureParameters * pc )
{
pc->m_iPosX = m_iPosX;
pc->m_iPosY = m_iPosY;
pc->m_iOutWidth = m_iOutWidth;
pc->m_iOutHeight = m_iOutHeight;
pc->m_iBaseChromaPhaseX = m_iBaseChromaPhaseX;
pc->m_iBaseChromaPhaseY = m_iBaseChromaPhaseY;
}
Void
ResizeParameters::setCurrentPictureParametersWith ( Int index )
{
if (m_iExtendedSpatialScalability < ESS_PICT)
return;
PictureParameters * pc;
pc = &m_acCurrentGop[index % MAX_PICT_PARAM_NB];
m_iPosX = pc->m_iPosX;
m_iPosY = pc->m_iPosY;
m_iOutWidth = pc->m_iOutWidth;
m_iOutHeight = pc->m_iOutHeight;
m_iBaseChromaPhaseX = pc->m_iBaseChromaPhaseX;
m_iBaseChromaPhaseY = pc->m_iBaseChromaPhaseY;
}
Void
ResizeParameters::setPictureParametersByOffset ( Int iIndex, Int iOl, Int iOr, Int iOt, Int iOb, Int iBcpx, Int iBcpy )
{
setPictureParametersByValue(iIndex,
iOl*2, iOt*2,
m_iGlobWidth - (iOl*2) - (iOr *2), m_iGlobHeight - (iOt*2) - (iOb *2),
iBcpx, iBcpy
);
}
Void
ResizeParameters::setPictureParametersByValue ( Int index, Int px, Int py, Int ow, Int oh, Int bcpx, Int bcpy )
{
if (m_iExtendedSpatialScalability == ESS_PICT)
{
m_iPosX = px;
m_iPosY = py;
m_iOutWidth = ow;
m_iOutHeight = oh;
}
m_iBaseChromaPhaseX = bcpx;
m_iBaseChromaPhaseY = bcpy;
PictureParameters * pc = &m_acCurrentGop[index % MAX_PICT_PARAM_NB];
pc->m_iPosX = m_iPosX;
pc->m_iPosY = m_iPosY;
pc->m_iOutWidth = m_iOutWidth;
pc->m_iOutHeight = m_iOutHeight;
pc->m_iBaseChromaPhaseX = m_iBaseChromaPhaseX;
pc->m_iBaseChromaPhaseY = m_iBaseChromaPhaseY;
}
ErrVal
ResizeParameters::readPictureParameters ( Int index )
{
Int iPosX, iPosY, iOutWidth, iOutHeight;
if ( fscanf(m_pParamFile,"%d,%d,%d,%d\n",&iPosX,&iPosY,&iOutWidth,&iOutHeight) == 0 )
{
printf("\nResizeParameters::readPictureParameters () : cannot read picture params\n");
return Err::m_nERR;
}
ROTREPORT( iPosX % 2 , "Cropping Window must be even aligned" );
ROTREPORT( iPosY % 2 , "Cropping Window must be even aligned" );
ROTREPORT( m_iInWidth > iOutWidth || m_iInHeight > iOutHeight , "Cropping Window must be bigger than base layer" );
setPictureParametersByValue(index, iPosX, iPosY, iOutWidth, iOutHeight, m_iBaseChromaPhaseX, m_iBaseChromaPhaseY );
return Err::m_nOK;
}
Void
ResizeParameters::initRefListPoc ()
{
for (Int i=0; i<MAX_REFLIST_SIZE;i++)
{m_aiRefListPoc[0][i]=-1;m_aiRefListPoc[1][i]=-1;}
}
Void
ResizeParameters::print ()
{
printf("m_iExtendedSpatialScalability = %d\n", m_iExtendedSpatialScalability);
printf("m_iSpatialScalabilityType = %d\n", m_iSpatialScalabilityType);
printf("m_bCrop = %d\n", m_bCrop);
printf("m_iInWidth = %d\n", m_iInWidth);
printf("m_iInHeight = %d\n", m_iInHeight);
printf("m_iGlobWidth = %d\n", m_iGlobWidth);
printf("m_iGlobHeight = %d\n", m_iGlobHeight);
printf("m_iChromaPhaseX = %d\n", m_iChromaPhaseX);
printf("m_iChromaPhaseY = %d\n", m_iChromaPhaseY);
printf("m_iPosX = %d\n", m_iPosX);
printf("m_iPosY = %d\n", m_iPosY);
printf("m_iOutWidth = %d\n", m_iOutWidth);
printf("m_iOutHeight = %d\n", m_iOutHeight);
printf("m_iBaseChromaPhaseX = %d\n", m_iBaseChromaPhaseX);
printf("m_iBaseChromaPhaseY = %d\n", m_iBaseChromaPhaseY);
printf("m_iIntraUpsamplingType = %d\n", m_iIntraUpsamplingType);
}
Void
ResizeParameters::SetUpSampleMode()
{
int bot=0;
if(m_bFrameMbsOnlyFlag && m_bBaseFrameMbsOnlyFlag)
m_iResampleMode = 0;
else if(m_bBaseFrameMbsOnlyFlag)
{
bot = m_bBaseFrameFromBotFieldFlag + (m_bFieldPicFlag & m_bBotFieldFlag);
m_iResampleMode = 2 + bot;
}
else if(m_bFrameMbsOnlyFlag)
{
bot = m_bBaseFieldPicFlag? m_bBaseBotFieldFlag : m_bBaseBotFieldSyncFlag;
m_iResampleMode = 4 + bot*2;
}
else
{
if(m_bBaseFieldPicFlag==0 && m_bFieldPicFlag==0)
m_iResampleMode = 1;
else
{
bot = m_bBaseFieldPicFlag? m_bBaseBotFieldFlag : m_bBotFieldFlag;
m_iResampleMode = 4 + bot*2;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -