1 该模式的8个预测方向与4x4帧内预测模式一样。

2 该模式只有High profile及更高的Profile的才有可能使用,Baseline、Main Profile、Preset为ultrafast时不支持,命令行参数为--8x8dct与--no-8x8dct控制是否使用,x264内部参数结构x264_param_t的成员b_transform_8x8的值控制是否使用。

  1 x264_param_default函数中将b_transform_8x8设为1,即默认为使用亮度信号8x8帧内预测模式。

  2 Baseline profile时不使用,x264_param_apply_profile中部分代码如下:  

    if( p == PROFILE_BASELINE )
{
param->analyse.b_transform_8x8 = ;
param->b_cabac = ;
param->i_cqm_preset = X264_CQM_FLAT;
param->psz_cqm_file = NULL;
param->i_bframe = ;
param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
if( param->b_interlaced )
{
x264_log( NULL, X264_LOG_ERROR, "baseline profile doesn't support interlacing\n" );
return -;
}
if( param->b_fake_interlaced )
{
x264_log( NULL, X264_LOG_ERROR, "baseline profile doesn't support fake interlacing\n" );
return -;
}
}

  3 Main profile时不使用,x264_param_apply_profile中部分代码如下:

  

    else if( p == PROFILE_MAIN )
{
param->analyse.b_transform_8x8 = ;
param->i_cqm_preset = X264_CQM_FLAT;
param->psz_cqm_file = NULL;
}

  4 preset为ultrafast时不使用,代码如下:

    if( !strcasecmp( preset, "ultrafast" ) )
{
param->i_frame_reference = ;
param->i_scenecut_threshold = ;
param->b_deblocking_filter = ;
param->b_cabac = ;
param->i_bframe = ;
param->analyse.intra = ;
param->analyse.inter = ;
param->analyse.b_transform_8x8 = ;
param->analyse.i_me_method = X264_ME_DIA;
param->analyse.i_subpel_refine = ;
param->rc.i_aq_mode = ;
param->analyse.b_mixed_references = ;
param->analyse.i_trellis = ;
param->i_bframe_adaptive = X264_B_ADAPT_NONE;
param->rc.b_mb_tree = ;
param->analyse.i_weighted_pred = X264_WEIGHTP_NONE;
param->analyse.b_weighted_bipred = ;
param->rc.i_lookahead = ;
}

3 在x264_validate_parameters函数中如果b_transform_8x8为0,从宏块分析标志变量取消8x8模式标志位,代码如下:

    if( !h->param.analyse.b_transform_8x8 )
{
h->param.analyse.inter &= ~X264_ANALYSE_I8x8;
h->param.analyse.intra &= ~X264_ANALYSE_I8x8;
}

4 在x264_mb_analyse_intra函数中,只有宏块分析标志变量的8x8模式标志置位,才会执行8x8模式相关逻辑,代码如下:

    /* 8x8 prediction selection */
if( flags & X264_ANALYSE_I8x8 )
{
ALIGNED_ARRAY_32( pixel, edge,[] );
x264_pixel_cmp_t sa8d = (h->pixf.mbcmp[] == h->pixf.satd[]) ? h->pixf.sa8d[PIXEL_8x8] : h->pixf.mbcmp[PIXEL_8x8];
int i_satd_thresh = a->i_mbrd ? COST_MAX : X264_MIN( i_satd_inter, a->i_satd_i16x16 ); //***************************

5 x264参数设置函数调用顺序

  1 x264_param_default

  2 x264_param_apply_preset

  3 x264_param_apply_tune

  4 用户通过直接操作x264_param_t设置用户参数

  5 x264_param_apply_fastfirstpass

6 x264_param_apply_profile

7 x264_encoder_open中调用x264_validate_parameters,并且该函数修正部分参数。

由于 x264_param_default是第一个调用的函数,所以由其设定b_transform_8x8的默认值为1,在其后调用x264_param_apply_profile时如果为profile为Main或Baseline时会修改为0,这样就不会使用帧内亮度8x8模式了。另外在两趟编码时的头一趟为慢速模式或preset为placebo之外的情况下都会将该变量的值置为1,在High及之后的profile时也可 以通过命令行参数--8x8dct与--no-8x8dct或内部结构参数控制是否置位该变量。

6 总结

亮度信号8x8帧内预测模式在High profile之后的profile才有可能使用,Baseline、Main、Extend(x264新版不再支持该profile)不使用,

x264 亮度信号8x8帧内预测模式的更多相关文章

  1. H264帧内预测模式编号的编码过程

    1 本文词汇约定 宏块:H264编码基本单元,16x16像素(或采样)构成 块:   由8x8像素(或采样)构成的单位 子块:   由4x4像素(或采样)构成的单位 2 帧内亮度预测模式 H264规范 ...

  2. H.264学习笔记2——帧内预测

    帧内预测:根据经过反量化和反变换(没有进行去块效应)之后的同一条带内的块进行预测. A.4x4亮度块预测: 用到的像素和预测方向如图: a~f是4x4块中要预测的像素值,A~Q是临块中解码后的参考值. ...

  3. H264提供了哪些帧内预测?

    H.264/AVC 提供了四种帧内预测方式:4x4 亮度块的帧内预测(Intra_4x4).16x16 亮度块的帧内预测(Intra_16x16).8x8 色度块的帧内预测(Intra_chroma) ...

  4. HM16.0帧内预测重要函数笔记

    Void TEncSearch::estIntraPredQT   亮度块的帧内预测入口函数 Void TComPrediction::initAdiPatternChType 获取参考样本点并滤波 ...

  5. 【HEVC】4、HM-16.7编码一个CU(帧内部分) 3.帧内预测各种模式实现

    HEVC中一共定义了35中帧内编码预测模式,编号分别以0-34定义.其中模式0定义为平面模式(INTRA_PLANAR),模式1定义为均值模式(INTRA_DC),模式2~34定义为角度预测模式(IN ...

  6. H.264 White Paper学习笔记(二)帧内预测

    为什么要有帧内预测?因为一般来说,对于一幅图像,相邻的两个像素的亮度和色度值之间经常是比较接近的,也就是颜色是逐渐变化的,不会一下子突变成完全不一样的颜色.而进行视频编码,目的就是利用这个相关性,来进 ...

  7. [原]H264帧内预测

    帧内预测模块大小 说明 4x4(亮度) 预测方式9种 8x8(亮度) 预测方式9种.只有high profile才有 16x16(亮度) 预测方式4种,只依赖左,上数据. 8x8(色度) 预测方式4种 ...

  8. 【HEVC】2、HM-16.7编码一个CU(帧内部分) 1.帧内预测相邻参考像素获取

    HEVC帧内预测的35中预测模式是在PU基础上定义的,实际帧内预测的过程则以TU为单位.PU以四叉树划分TU,一个PU内所有TU共享同一种预测模式.帧内预测分3个步骤: (1) 判断当前TU相邻像素点 ...

  9. x265,帧内预测代码分析

    void Analysis::compressIntraCU(const CUData& parentCTU, const CUGeom& cuGeom, uint32_t& ...

随机推荐

  1. c# datagridview 设置某行不可见解决办法

    [前提]datagridview与数据库绑定,需要单独设置某行或者某个单元格不可见. [问题分析]直接用this.dataGridCiew1.Rows[0].Visible = false;不可行,会 ...

  2. 动态修改ViewPagerIndicator CustomTabPageIndicator Tab标签文字颜色

    ViewPagerIndicator 的CustomTabPageIndicator 默认是没有Tab选中修改TextView颜色特效的. 可以通过以下方式实现: 新建viewpager_title_ ...

  3. 使用SmsManager服务群发短信

    SmsManager是Android提供的一个非常常见的服务,SmsManager提供了一系列sendXxxMessage()方法用于发送短信,不过短信通常都是普通文本,调用sendTextMessa ...

  4. 更新android SDK的问题

        由于我大天朝将google屏蔽的原因,在更新android SDK的时候,可能速度慢还是个小问题,重要的是你更新的时候出各种错误,比如错误  Failed to fetch URL https ...

  5. 克隆虚拟机win8系统后注意修改安全标识(SID)

    克隆虚拟机win8系统后注意修改安全标识(SID)   克隆虚拟机系统后两个系统硬件配置一样,需要注意修改:security ID ,MAC,计算机名,IP地址,产品激活 重置工具:sysprep.e ...

  6. HTML <dl> 标签

    <html><body><h2>一个定义列表:</h2><dl>   <dt>计算机</dt>   <dd&g ...

  7. iOS开发-OC语言 (四)数组

    知识点 1.NSArray 2.NSMutableArray 1.数组的基本用法: 2.数组的遍历 3.数组排序 ===========   NSArray  不可变数组  ============= ...

  8. 【01背包】HDU 1171 Big Event in HDU

    Problem Description Nowadays, we all know that Computer College is the biggest department in HDU. Bu ...

  9. Socket编程中 setsockopt的作用

    功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的值 ...

  10. windows下配置Java环境变量

    一.首先, JDK的安装路径,在这里我们选择默认安装在C:\Program Files\Java\jdk1.7.0_45\目录下. 二.下面, 设置环境变量: [1]“我的电脑”右键菜单---> ...