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. ExtJS初接触 —— 了解 Ext Core

    ExtJS初接触 —— 了解 Ext Core Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS ...

  2. linux下C++动态链接C++库示例详解

    注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一.介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++程序员经常碰到的问题. 事 ...

  3. schemamvcSpringMVC+Spring3+Hibernate4开发环境搭建

    上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下schemamvc <?xml version="1.0" encoding=" ...

  4. jvm工具

    jvm工具 知识,经验是基础,数据是依据,工具是运营知识处理数据的手段 数据:运行日志.异常堆栈.GC日志.线程快照.堆转存储快照 JPS:虚拟机进程状况工具 jvm process status t ...

  5. DIV 实现可拖拽 功能(留档)

    //可拖拽 功能 $.fn.extend({    //用法:$(element).jqDrag();    //element需要具备定位属性,需要手动调整层叠样式,这里只是修改鼠标拖动效果    ...

  6. MVC源码分析 - Controller创建和创建扩展

    上一篇, 出现了一个至关重要的类:MvcHandler, 接下来就来看一下MvcHandler吧. 先不看具体方法, 先看一下类里面的情况. //这里实现了两个重要的接口, 异步处理和同步处理的接口p ...

  7. 间隔Ns请求某函数并且有timeout

    实现方案: 1. 递归调用 2.timer:apply_interval() 3.gen_server来写 时间timeout怎么实现: 1.开始时间存入ets表中 2.put,get方法放入进程字典 ...

  8. USACO 3.4 Electric Fence

    Electric FenceDon Piele In this problem, `lattice points' in the plane are points with integer coord ...

  9. 将List 中的ConvertAll的使用:List 中的元素转换,List模型转换, list模型转数组

    一,直接入代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...

  10. JavaScript的this详解

    1.全局作用域下的this: 2.一般函数与严格模式下的函数的this: 3.当函数的this作为对象的方法的情况下: 4.对象原型链上的this: 对象P的原型指向o, p.a与p.a创建对象p的属 ...