/* CU的像素坐标,CU大小,预测模式,分量 */
coding_unit(x0, y0, width, height, mode, component)
{
// 色度分量
if (component == 'COMPONENT_Chroma')
{
// priorCuMode:当前色度块对应的亮度块右下角4x4的子块为帧内模式
if ((priorCuMode == 1) && (chroma_format != '00'))
intra_chroma_pred_mode; // 帧内色度预测模式
NumOfTransBlocks = 3;
ctp_y[0] = 0;
CuCtp += ctp_y[0];
// 若色度预测模式不是PCM
if (IntraChromaPredMode != 'Intra_Chroma_PCM')
{
ctp_u;
CuCtp += (ctp_u << 1);
ctp_v;
CuCtp += (ctp_v << 2);
}
// 编码U、V变换块
for (i = NumOfTransBlocks - 2; i < NumOfTransBlocks; i++)
{
IsPcmMode[i] = (IntraChromaPredMode == 'Intra_Chroma_PCM');
IsChroma = 0;
if (i == NumOfTransBlocks - 1 || i == NumOfTransBlocks - 2)
{
IsChroma = 1;
}
// 变换块
block(i, width, height, CuCtp, IsChroma, IsPcmMode[i], component);
}
}
// LUMA或LUMACHROMA
else
{
// 若不是I帧
if (PictureType != 0)
{
if (mode != 'PRED_Intra_Only')
{
skip_flag; // Skip模式标志
}
// Skip模式下:编码umve和affine模式
if (SkipFlag)
{
if (UmveEnableFlag)
umve_flag;
// affine与umve不能共存,且需要宽高都大于16
if (AffineEnableFlag && !UmveFlag && (width >= 16) && (height >= 16))
affine_flag;
}
// 非Skip模式下
if (!SkipFlag)
{
if (mode != 'PRED_Intra_Only')
{
direct_flag; // direct模式标志
}
// Direct模式下:编码umve和affine模式
if (DirectFlag)
{
if (UmveEnableFlag)
umve_flag;
if (AffineEnableFlag && !UmveFlag && (width >= 16) && (height >= 16))
affine_flag;
}
// 非Direct模式下:
if (!DirectFlag && (mode == 'PRED_No_Constraint'))
intra_cu_flag; // 0:帧间模式 1:帧内模式
}
}
PartSize = 'SIZE_2Mx2N';
// 若衍生模式和帧内模式
if (DtEnableFlag && IntraCuFlag)
{
// CU符合DT划分的要求( 其中DtMinSize的值等于16 )
allowDtHorSplit = (height >= DtMinSize) && (height <= DtMaxSize) && (width / height < 4) && (width <= DtMaxSize);
allowDtVerSplit = (width >= DtMinSize) && (width <= DtMaxSize) && (height / width < 4) && (height <= DtMaxSize);
if (allowDtHorSplit || allowDtVerSplit)
{
dt_split_flag; // 是否进行衍生划分
if (DtSplitFlag)
{
if (allowDtHorSplit && allowDtVerSplit)
{
dt_split_dir; // 0:垂直划分 1:水平划分
}
else if (allowDtHorSplit)
{
DtSplitDir = 1;
}
else
{
DtSplitDir = 0;
}
if (DtSplitDir)
{
dt_split_hqt_flag; // 水平四叉划分:0表示不进行,1表示进行
if (!DtSplitHqtFlag)
{
dt_split_hadt_flag; // 水平非对称划分:0表示up,1表示down
}
}
else
{
dt_split_vqt_flag;
if (!DtSplitVqtFlag)
{
dt_split_vadt_flag;
}
}
}
}
}
// umve标识
if (UmveFlag)
{
umve_mv_idx;
umve_step_idx;
umve_dir_idx;
}
// skip/direct前提下的affine
else if ((SkipFlag || DirectFlag) && AffineFlag)
{
cu_affine_cand_idx;
}
// skip/direct
else if (SkipFlag || DirectFlag)
{
cu_subtype_index; // CU子类型索引
}
// 非Skip,非Direct
if (!SkipFlag && !DirectFlag)
{
// 普通inter模式
if (!IntraCuFlag)
{
// affine
if (AffineEnableFlag && (width >= 16) && (height >= 16))
affine_flag;
// amvr
if (AmvrEnableFlag)
{
if (EmvrEnableFlag && !AffineFlag)
{
extend_mvr_flag; // emvr
}
if (AffineFlag)
affine_amvr_index;
else
amvr_index;
}
// B帧预测参考模式:list 0/1/01
if (PictureType == 2)
{
inter_pred_ref_mode;
}
// smvd
if (SmvdEnableFlag && SmvdApplyFlag && !AffineFlag && (InterPredRefMode == 2) && !ExtendMvrFlag)
{
smvd_flag;
}
// MvExistL0:这部分暂时不懂
if (MvExistL0)
{
if (!SmvdFlag && NumRefActive[0] > 1)
pu_reference_index_l0;
mv_diff_x_abs_l0;
if (MvDiffXAbsL0)
mv_diff_x_sign_l0;
mv_diff_y_abs_l0;
if (MvDiffYAbsL0)
mv_diff_y_sign_l0;
if (AffineFlag)
{
mv_diff_x_abs_l0_affine;
if (MvDiffXAbsL0Affine)
mv_diff_x_sign_l0_affine;
mv_diff_y_abs_l0_affine;
if (MvDiffYAbsL0Affine)
mv_diff_y_sign_l0_affine;
}
}
if (MvExistL1 && !SmvdFlag)
{
if (NumRefActive[1] > 1)
pu_reference_index_l1;
mv_diff_x_abs_l1;
if (MvDiffXAbsL1)
mv_diff_x_sign_l1;
mv_diff_y_abs_l1;
if (MvDiffYAbsL1)
mv_diff_y_sign_l1;
if (AffineFlag)
{
mv_diff_x_abs_l1_affine;
if (MvDiffXAbsL1Affine)
mv_diff_x_sign_l1_affine;
mv_diff_y_abs_l1_affine;
if (MvDiffYAbsL1Affine)
mv_diff_y_sign_l1_affine;
}
}
}
// 帧内模式
else
{
TuOrder = 0;
// NumOfIntraPredBlock由衍生模式确定
for (i = 0; i < NumOfIntraPredBlock; i++)
{
intra_luma_pred_mode; // 每个亮度PU的预测模式
}
if (PartSize == 'SIZE_2Mx2N')
{
IsPcmMode[TuOrder] = (IntraLumaPredMode == 'Intra_Luma_PCM');
TuOrder++;
}
else
{
IsPcmMode[0] = 0;
IsPcmMode[1] = 0;
IsPcmMode[2] = 0;
IsPcmMode[3] = 0;
TuOrder = 3;
}
// 若为COMPONENT_LUMACHROMA
if (IntraCuFlag && (chroma_format != '00') && (component == 'COMPONENT_LUMACHROMA'))
{
intra_chroma_pred_mode; // 色度PU的预测模式
IsPcmMode[TuOrder + 1] = (IntraChromaPredMode == 'Intra_Chroma_PCM');
IsPcmMode[TuOrder + 2] = (IntraChromaPredMode == 'Intra_Chroma_PCM');
}
if (IpfEnableFlag && (PartSize == 'SIZE_2Mx2N') && (!IsPcmMode[0]))
{
ipf_flag; // IPF滤波标志
}
}
}
// 非帧内,非Skip
if (!IntraCuFlag && !SkipFlag)
{
if (!DirectFlag && component == 'COMPONENT_LUMACHROMA')
ctp_zero_flag; // 1:变换块系数全为0
CuCtp = 0;
if (!CtpZeroFlag)
{
// 宽高在8~32,宽高比小于4
if (PbtEnableFlag && (width / height < 4) && (height / width < 4) && (width >= 8) && (width <= 32) && (height >= 8) && (height <= 32))
{
pbt_cu_flag; // 基于位置的变换标志
}
// 不使用pbt变换,NumOfTransBlocks = 3
if (!PbtCuFlag)
{
if (component == 'COMPONENT_LUMACHROMA')
{
ctp_u;
ctp_v;
}
CuCtp = ctp_u << (NumOfTransBlocks - 2);
CuCtp += (ctp_v << (NumOfTransBlocks - 1));
if (((ctp_u != 0) || (ctp_v != 0)) || (component != 'COMPONENT_LUMACHROMA'))
{
ctp_y[0];
CuCtp += ctp_y[0];
}
else
{
CuCtp += ctp_y[0];
}
}
// 使用pbt变换,NumOfTransBlocks = 6
else
{
if (component == 'COMPONENT_LUMACHROMA')
{
ctp_u;
ctp_v;
}
CuCtp = ctp_u << (NumOfTransBlocks - 2);
CuCtp += (ctp_v << (NumOfTransBlocks - 1));
for (i = 0; i < NumOfTransBlocks - 2; i++)
{
ctp_y[i];
CuCtp += (ctp_y[i] << i);
}
// 此时CuCtp为 YYYYUV
}
}
}
// 帧内模式
else if (!SkipFlag)
{
CuCtp = 0;
if (!IsPcmMode[0])
{
for (i = 0; i < NumOfTransBlocks - 2; i++)
{
ctp_y[i];
CuCtp += (ctp_y[i] << i);
}
}
if ((component == 'COMPONENT_LUMACHROMA') && (IntraChromaPredMode != 'Intra_Chroma_PCM'))
{
ctp_u;
ctp_v;
}
CuCtp += (ctp_u << (NumOfTransBlocks - 2));
CuCtp += (ctp_v << (NumOfTransBlocks - 1));
}
// 变换块
for (i = 0; i < NumOfTrans
AVS3核心码流结构解析
需积分: 0 160 浏览量
2021-01-10
22:01:51
上传
评论 1
收藏 352KB ZIP 举报
Salmon_lee
- 粉丝: 188
- 资源: 4
最新资源
- 嵌入式基础学习资料0000
- content_1714465331721.xls
- HM3401-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- Chainbase+Web3+APi+Data warehouse
- HM3401D-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- GEE案例-1990-2023年计算某个区域的NDVI时序变化轨迹(以徐州市为例)含全部代码.pdf
- HM3401C-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 沈丘盛世龙门图纸符合规范化
- 基于51单片机带LCD1602显示+温度补偿的超声波测距仪设计软硬设计+仿真+文档资料.zip
- 一、K210是什么? K210全称为堪智K210,是嘉楠科技自主研发的一款采用RISC-V处理器架构,具备视听一体、自主IP内核
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈