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. 风萧萧兮易水寒 coding一去兮不复还

    这一年都在忙碌中渡过.没有看过日落没有享受过日常.希望可以在忙碌中有些收获.工作马上要三年了. 风萧萧兮易水寒 coding一去兮不复还 记的刚毕业的时候喜欢自己晚上更新下博客.那时候也很忙.但是后来 ...

  2. Android: Type Method 'NewStringUTF' could not be resolved

      编译一个最简单的Android NDK 例子(android-ndk-r8/samples/hello-jni)出现了错误信息:Type Method 'NewStringUTF' could n ...

  3. 简单的理解deflate算法

    简单的理解deflate算法 最近做压缩算法. 用到了deflate压缩算法,  找了很多资料,  这篇文章算是讲的比较易懂的, 这篇文章不长,但却浅显易懂, 基本上涵盖了我想要知道的所有要点. 翻译 ...

  4. TOGAF架构内容框架之内容元模型(下)

    TOGAF架构内容框架之内容元模型(下) 2.2 治理扩展(Governance Extensions) 治理扩展元模型内容 治理扩展部分的意图在于引入额外的,并且与支持运营治理的目标和业务服务相关的 ...

  5. Mybatis原理图

    Mybatis原理图 MyBatis 是一个基于Java的持久层框架.它提供的持久层框架包括SQL Maps和Data Access Objects(DAO). MyBatis 是支持普通 SQL查询 ...

  6. jq向webApi提交post json数据

    在页面想webApi post json数据的时候,发现webapi不能直接以json的方式接受数据(注:我是没有发现一个很好的方式来post json数据的);但是可以以数据结构的方式传递: 如下: ...

  7. java初学者

    决心开始从头学习java,并且每天记录自己的学习进度与学习成果,用于分享和促进. 鉴于是新手,并且之前也没有任何发文的经历,可能更多的是根据自己已有的知识容量基础之上进行的深化,太基础的看一遍就能会的 ...

  8. kinect1在ros-indigo环境配置

    根据周大神前车,向git下载驱动里面有详细的安装说明 $ cd $ git clone https://github.com/ZXWBOT/kinect_driver.git 按照安装说明三个包安装成 ...

  9. hadoop端口配置指南

    获取默认配置 配置hadoop,主要是配置core-site.xml,hdfs-site.xml,mapred-site.xml三个配置文件,默认下来,这些配置文件都是空的,所以很难知道这些配置文件有 ...

  10. ShopNC_WAP

    记录 ShopNC_WAP 端点点滴滴 插件记录 1.  http://www.jiawin.com/swipe-mobile-touch-slider   swiper 插件 2. https:// ...