📄 umc_vc1_spl_frame_constr.cpp
字号:
//FINTERPFLAG
VC1GetNBits(pbs, bitOffset, 1, tempData);
//reserved
VC1GetNBits(pbs, bitOffset, 2, tempData);
//DISPLAY_EXT
VC1GetNBits(pbs, bitOffset, 1, tempData);
if(tempData) //DISPLAY_EXT
{
//DISP_HORIZ_SIZE
VC1GetNBits(pbs, bitOffset, 14,tempData);
//DISP_VERT_SIZE
VC1GetNBits(pbs, bitOffset, 14,tempData);
//ASPECT_RATIO_FLAG
VC1GetNBits(pbs, bitOffset, 1,tempData);
if(tempData) //ASPECT_RATIO_FLAG
{
//ASPECT_RATIO
VC1GetNBits(pbs, bitOffset, 4,tempData);
if(tempData == 15)
{
//ASPECT_HORIZ_SIZE
VC1GetNBits(pbs, bitOffset, 8,
video_info->aspect_ratio_width);
//ASPECT_VERT_SIZE
VC1GetNBits(pbs, bitOffset, 8,
video_info->aspect_ratio_height);
}
else
{
video_info->aspect_ratio_width =
AspectRatioTable[tempData].width;
video_info->aspect_ratio_height =
AspectRatioTable[tempData].height;
}
}
//FRAMERATE_FLAG
VC1GetNBits(pbs, bitOffset, 1,tempData);
if(tempData) //FRAMERATE_FLAG
{
//FRAMERATEIND
VC1GetNBits(pbs, bitOffset, 1,tempData);
if(!tempData) //FRAMERATEIND
{
//FRAMERATENR
VC1GetNBits(pbs, bitOffset, 8,tempData);
video_info->framerate = FrameRateNumerator[tempData];
//FRAMERATEDR
VC1GetNBits(pbs, bitOffset, 4,tempData);
video_info->framerate =
video_info->framerate/FrameRateDenomerator[tempData];
}
else
{
//FRAMERATEEXP
VC1GetNBits(pbs, bitOffset, 16,tempData);
video_info->framerate = (tempData + 1)/32.0;
}
}
//COLOR_FORMAT_FLAG
VC1GetNBits(pbs, bitOffset, 1,tempData);
if(tempData) //COLOR_FORMAT_FLAG
{
//COLOR_PRIM
VC1GetNBits(pbs, bitOffset, 8,tempData);
//TRANSFER_CHAR
VC1GetNBits(pbs, bitOffset, 8,tempData);
//MATRIX_COEF
VC1GetNBits(pbs, bitOffset, 8,tempData);
}
}
////HRD_PARAM_FLAG
VC1GetNBits(pbs, bitOffset, 1, tempData);
if(tempData) //HRD_PARAM_FLAG
{
//HRD_NUM_LEAKY_BUCKETS
VC1GetNBits(pbs, bitOffset, 5,tempData1);
//BIT_RATE_EXPONENT
VC1GetNBits(pbs, bitOffset, 4,tempData);
//BUFFER_SIZE_EXPONENT
VC1GetNBits(pbs, bitOffset, 4,tempData);
//!!!!!!
for(i=0; i < tempData1; i++)//HRD_NUM_LEAKY_BUCKETS
{
//HRD_RATE[i]
VC1GetNBits(pbs, bitOffset, 16,tempData);
//HRD_BUFFER[i]
VC1GetNBits(pbs, bitOffset, 16,tempData);
}
}
}
else
{
//Simple/Main profile
//LEVEL
VC1GetNBits(pbs, bitOffset, 2, tempData);
//FRMRTQ_POSTPROC
VC1GetNBits(pbs, bitOffset, 3, video_info->framerate);
//BITRTQ_POSTPROC
VC1GetNBits(pbs, bitOffset, 5, video_info->bitrate);
//LOOPFILTER
VC1GetNBits(pbs, bitOffset, 1, tempData);
//reserved
VC1GetNBits(pbs, bitOffset, 1, tempData);
//MULTIRES
VC1GetNBits(pbs, bitOffset, 1, tempData);
//reserved
VC1GetNBits(pbs, bitOffset, 1, tempData);
//FASTUVMC
VC1GetNBits(pbs, bitOffset, 1, tempData);
//EXTENDED_MV
VC1GetNBits(pbs, bitOffset, 1, tempData);
//DQUANT
VC1GetNBits(pbs, bitOffset, 2, tempData);
//VSTRANSFORM
VC1GetNBits(pbs, bitOffset, 1, tempData);
//reserved
VC1GetNBits(pbs, bitOffset, 1, tempData);
//OVERLAP
VC1GetNBits(pbs, bitOffset, 1, tempData);
//SYNCMARKER
VC1GetNBits(pbs, bitOffset, 1, tempData);
//RANGERED
VC1GetNBits(pbs, bitOffset, 1, tempData);
//MAXBFRAMES
VC1GetNBits(pbs, bitOffset, 3, tempData);
//QUANTIZER
VC1GetNBits(pbs, bitOffset, 2, tempData);
//FINTERPFLAG
VC1GetNBits(pbs, bitOffset, 1, tempData);
}
*bufferSize = (video_info->clip_info.height + 128)*
(video_info->clip_info.width + 128)
+ ((video_info->clip_info.height/2 + 64)*
(video_info->clip_info.width/2 + 64))*2;
video_info->bitrate = 1024 * video_info->bitrate;
return umcSts;
}
Status vc1_frame_constructor_vc1::GetFirstSeqHeader(MediaData* in,
MediaData* out,
MediaDataEx::_MediaDataEx *stCodes,
Ipp32u splMode)
{
UMC::Status umcSts = UMC_ERR_NOT_ENOUGH_DATA;
umcSts = GetData(in, out, stCodes,splMode);
if(umcSts == UMC_OK && stCodes->values[0] != 0x0F010000)
{
umcSts = UMC_ERR_NOT_ENOUGH_DATA;
}
return umcSts;
}
//Status vc1_frame_constructor_vc1::GetPicType(MediaDataEx* data, Ipp32u& picType)
//{
// Ipp32u Ipp32u* pbs = (Ipp32u*)data->GetDataPointer();
// Ipp32s bitOffset = 31;
// Ipp32u tempData = 0;
// if(data->GetExData()->values[0]>>24 == FrameHeader)
// {
// if(m_videoStreamInfo.interlace_type)
// {
// //Frame Coding mode
// //0 - progressive; 10 - Frame-interlace; 11 - Field-interlace
// ippiGetNBits(pbs,bitOffset,1,tempData); //FCM
// if(tempData)
// {
// ippiGetNBits(pbs,bitOffset,1,tempData); //FCM
// tempData = tempData + 2;
// }
// }
// if(tempData != FieldInterlace)
// {
// //picture type
// //110 - I picture; 0 - P picture; 10 - B picture; 1110 - BI picture; 1111 - skipped
// ippiGetNBits(pbs,bitOffset,1,tempData);
// if(tempData)
// {
// ippiGetNBits(pbs,bitOffset,1,tempData);
// if(tempData)
// {
// ippiGetNBits(pbs,bitOffset,1,tempData);
// if(tempData)
// {
// ippiGetNBits(pbs,bitOffset,1,tempData);
// if(tempData)
// picType = SKIPPED_FRAME; //1111
// else
// picType = BI_FRAME; //1110
// }
// else
// picType = I_FRAME; //110
// }
// else
// picType = B_FRAME; //10
// }
// else
// picType = P_FRAME; //0
// }
// else
// {
// //interlace field frame
// ippiGetNBits(pbs,bitOffset,3,tempData);
//
// switch(tempData)
// {
// case 0:
// //000 - I,I
// picType = I_I_FIELD_FRAME;
// break;
// case 1:
// //001 - I,P
// picType = I_P_FIELD_FRAME;
// break;
// case 2:
// //010 - P,I
// picType = P_I_FIELD_FRAME;
// break;
// case 3:
// //011 - P,P
// picType = P_P_FIELD_FRAME;
// break;
// case 4:
// //100 - B,B
// picType = B_B_FIELD_FRAME;
// break;
// case 5:
// //101 - B,BI
// picType = B_BI_FIELD_FRAME;
// break;
// case 6:
// //110 - BI,B
// picType = BI_B_FIELD_FRAME;
// break;
// case 7:
// //111 - BI,BI
// picType = BI_BI_FIELD_FRAME;
// break;
// default:
// break;
// }
// }
// }
// else
// return UMC_ERR_INVALID_STREAM;
// return UMC_OK;
//}
}
#endif //UMC_ENABLE_VC1_SPLITTER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -