x264 struct 学习

x264_t结构体维护着CODEC的诸多重要信息

 

其中成员frames是一个指示和控制帧编码过程的结构。其中current是已经准备就绪可以编码的帧,其类型已经确定;next是尚未确定类型的帧;unused用于回收不使用的frame结构体以备今后再次使用。

structx264_t                                 

{

   

   unsigned int  cpu;

   

   struct

   {

       int        i_nal;        //定义一个网络提取层//

       x264_nal_t nal[3];        

       int        i_bitstream;   

       uint8_t    *p_bitstream;  

       bs_t       bs;

   } out;

   

   x264_param_t   param;

   

   int            i_frame;           //一个指示和控制帧编码过程的结构

   int            i_poc;

   int            i_frame_offset;

   int            i_frame_num;   

   int            i_poc_msb;     

   int            i_poc_lsb;     

   

   x264_sps_t     sps_array[32];

   x264_sps_t     *sps;

   x264_pps_t     pps_array[256];

   x264_pps_t     *pps;

   int            i_idr_pic_id;

   

   x264_slice_header_t sh;
   

   x264_cabac_t   cabac;

   

   x264_picture_t  *picture;

   

   x264_frame_t   *bframe_current[X264_BFRAME_MAX];

   x264_frame_t   *frame_next[X264_BFRAME_MAX+1];  这个是定义下一个帧,但不一定是B帧

   x264_frame_t   *frame_unused[X264_BFRAME_MAX+1];

   

   x264_frame_t   *fdec;

   

   struct

   {

       DECLARE_ALIGNED( int, luma16×16_dc[16], 16 );

       DECLARE_ALIGNED( int, chroma_dc[2][4], 16 );//色度

       struct

       {

           DECLARE_ALIGNED( int, residual_ac[15], 16 );

           DECLARE_ALIGNED( int, luma4×4[16], 16 );

       } block[16+8];16*8的宏快的取用情况

   } dct;离散余弦变换

   

   struct

   {

       

       int    i_mb_stride;

 

       

       int    i_mb_x;

       int    i_mb_y;

       int    i_mb_xy;

       unsigned int i_neighbour;

       

       int8_t *type;                     

       int8_t *qp;                       

       int16_t*cbp;      ?               

       int8_t (*intra4×4_pred_mode)[7];  

       uint8_t (*non_zero_count)[16+4+4]; 

       int8_t *chroma_pred_mode;         

       int16_t(*mv[2])[2];               

       int16_t(*mvd[2])[2];              

       int8_t  *ref[2];                  

       

       int    i_type;

       int   i_partition;

       int    i_sub_partition[4];

       int    i_cbp_luma;

       int    i_cbp_chroma;

       int    i_intra16×16_pred_mode;

       int    i_chroma_pred_mode;

       struct

       {

           

           uint8_t *p_img[3];

           int     i_img[3];

 

           

           uint8_t *p_fdec[3];

           uint8_t*p_fref[2][16][3];

           int    i_fdec[3];

       } pic;

       

       struct

       {

           

           int    intra4×4_pred_mode[X264_SCAN8_SIZE];色度预测模式

           

           int    non_zero_count[X264_SCAN8_SIZE];

           

           int8_t ref[2][X264_SCAN8_SIZE];

           

           int16_t mv[2][X264_SCAN8_SIZE][2];

           int16_t mvd[2][X264_SCAN8_SIZE][2];运动矢量与真实值之间的差

       } cache;

       

       int    i_last_qp;

       int    i_last_dqp;

 
   } mb;宏快的预测以及运动补偿和运动估计

   

   x264_frame_t     *freference[16+1]; 

   int              i_ref0; 参考帧列表一(定义为lsit0意为向前预测编码)

   x264_frame_t     *fref0[16];      

   int              i_ref1;参考帧列表二(定义为lsit1意为向后预测编码)

   x264_frame_t     *fref1[16];      

   

   x264_ratecontrol_t *rc;

   

   struct

   {

       

       int  i_slice_count[5];

       int  i_slice_size[5];

       float f_psnr_y[5];

       float f_psnr_u[5];

       float f_psnr_v[5];

       int  i_mb_count[5][18];

   } stat;声明每一片的参数变量

   

   x264_predict_t     predict_16×16[4+3];

   x264_predict_t     predict_8×8[4+3];

   x264_predict_t     predict_4×4[9+3];

   x264_pixel_function_t pixf;

   x264_mc_function_t   mc[2];

   x264_dct_function_t  dctf;

   

   x264_vlc_table_t *x264_coeff_token_lookup[5];

   x264_vlc_table_t *x264_level_prefix_lookup;

   x264_vlc_table_t *x264_total_zeros_lookup[15];

   x264_vlc_table_t *x264_total_zeros_dc_lookup[3];

   x264_vlc_table_t *x264_run_before_lookup[7];

};

#endif

给出编码过程中的各个参数的初始化

x264_param_t

typedef struct

{

   

   unsigned int cpu;

   

   int        i_width;

   int        i_height;

   struct

   {

       

       int        i_sar_height;

       int        i_sar_width;

   } vui;?

   float      f_fps;

   

   int        i_frame_reference; 

   int        i_idrframe;

   int        i_iframe;  

   int        i_bframe;  

   int        b_deblocking_filter;

   int        b_cabac;

   int        i_cabac_init_idc;给出熵编码初始化时表格的选择

   int        i_qp_constant; 

   int        i_bitrate;     

   

   struct

   {

       unsigned intintra;   

       unsigned intinter;   

   } analyse;

 

}
x264_param_t给出编码过程中的各个参数的初始化

 

sps序列参数集

typedef struct

{

   int i_id;
 
   int i_profile_idc;指明所用profile

   int i_level_idc; 指明所用level

    int b_constraint_set0;

   int b_constraint_set1;

   int b_constraint_set2; 当他们值等于1时,表示必须遵守某些制约条件

   int i_log2_max_frame_num;表示图像解码顺序的最大取值
 
   inti_poc_type;   

   inti_log2_max_poc_lsb;   

   intb_delta_pic_order_always_zero;其值等于一时句法元素delta_pic_order_cnt[0]和delta_pic_order_cnt[1]不再片头出现,且他们的默认值都为0。为0时上述则出现。

   int i_offset_for_non_ref_pic;用来计算非参考帧或场的picture order count,其值应在[-2e31,2e31-1]

   int i_offset_for_top_to_bottom_field; 用来计算帧的底场的picture order count其值应在[-2e31,2e31-1]

   int i_num_ref_frames_in_poc_cycle;用来解码picture order count取值应在[0,255]之间

   int i_offset_for_ref_frame[256]; 当picture order counttype=1时用来解码poc,这句语法对循环num_ref_frames_in_poc_cycle中的每一个元素指定了一个偏移
 
   int i_num_ref_frames;指定参考帧队列的最大长度 h264规定最多可为16个参考帧

   int b_gaps_in_frame_num_value_allowed;值为1时表示允许句法frame_num可以不连续

   int i_mb_width;

   int i_mb_height;

   int b_frame_mbs_only;

   int b_mb_adaptive_frame_field;

   int b_direct8×8_inference;指明b片的直接和skip模式下运动矢量的预测方法
   
   int b_crop;

   struct

   {

       int i_left;

       int i_right;

       int i_top;

       int i_bottom;

   } crop;图像剪彩后输出的参数

 

   int b_vui;

   struct

   {

       int i_sar_width;

       int i_sar_height;

       

   } vui;

 

}
x264_sps_t定义序列参考队列的参数以及初始化

 

pps图像参数集

typedef struct

{

   int i_id;

   int i_sps_id;

   int b_cabac;

   int b_pic_order;

   int i_num_slice_groups; 加一表示图像中片组的个数

 

  
inti_slice_group_map_type;片组分割类型   

   int i_run_length[256]; 指明片组类型为2时每个片组连续的map_units的个数   

   

   inti_top_left[256];       

   inti_bottom_right[256];   

   

   int b_slice_group_change_direction; 当类型为345时与下句语法一起指明片组分割方法

   inti_slice_group_change_rate;   

   int i_pic_size_in_map_units;类型为6时指明图像以map_units为单位的大小
   
   int i_slice_group_id[256]; 指明map_units属于哪个片组

   int i_num_ref_idx_l0_active;加1为参考帧队列的长度 此为list0

   int i_num_ref_idx_l1_active;此为list1

   int b_weighted_pred;用以指明是否允许P和SP片的加权预测
   
   int b_weighted_bipred; 用以指明是否允许B片的加权预测

    int i_pic_init_qp;加26后用以指明亮度分量的量化参数的初始值

   int i_pic_init_qs;同上只是用于SP和SI

   int i_chroma_qp_index_offset;指明计算使用时用到的参数

   int b_deblocking_filter_control;

   int b_constrained_intra_pred;控制PB帧的帧内编码

   int b_redundant_pic_cnt;是否出现redundant_pic_cnt句法元素

} x264_pps_t

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单例模式的新实现

单例模式的新实现 jdk1.5 之前 单例模式的两种方式,两种方法都是要把构造器保持私有的,并导出公有的静态成员,以便允许客户端能够访问该类的唯一实例。 第一种方法中,公有的静态成员是个final域: //Singleton with public final f…

有关莫比乌斯反演

对于两个定义域为整数的函数F(x)和f(x); 若有: 然后F(x)可以快速求出; 如何用F求解f呢? 莫比乌斯反演: 对于两个定义域为整数的函数F(x)和f(x); 若有: 则有: 其中μ(x)为莫比乌斯函数,其定义为: 对于&#…

(原创)JS点击事件——Uncaught TypeError: Cannot set property 'onclick' of null

html部分代码&#xff1a; JS部分代码&#xff1a; 需要实现的效果&#xff1a;点击图片&#xff0c;来回相互切换。 我开始的错误做法&#xff1a;代码如上图所示&#xff08;逻辑上看起来是没有错误的&#xff09; 尝试过程&#xff1a;把JS代码放在</body>闭合标签之前…

事务传播机制/数据库异常解析——2016-8-13分享总结

一. 事务的传播机制&#xff0f;required 跟 required new 的使用与区别 基础回顾 1.1 事务的隔离级别&#xff1a; ISOLATION_READ_UNCOMMITTED&#xff08;读未提交&#xff09; ISOLATION_READ_COMMITTED&#xff08;读已提交&#xff09; ISOLATION_REPEATABLE_READ&#x…

console类详细解释

console类详细解释 微软链接https://docs.microsoft.com/zh-cn/dotnet/api/system.console?viewnetframework-4.8 C#中没有标准输入输出关键字&#xff0c;要调用console类下的方法。 练习与解释代码 using System; using System.Collections.Generic; using System.Linq; …

VC下调用x264进行视频编码,

4.X264.c中,h x264_encoder_open( param ) )是用来复制参数并验证参数的有效性,在CCS下应该是不需要验证参数的(参数都是在程序中设置好的),因此此处只作复制参数param和初始化X264_T h的操作.(VC下程序修改记录080106下午)修改COMMON.C中的void x264_param_default( x264_…

UploadRTOS.exe

UploadRTOS.exe类似于一个启动并为VxWin运行做准备的工具程序。VxWin安装之后&#xff0c;可以使用 上传工具程序 启动实时操作系统。 利用命令行参数,您可以使它执行不同的功能。该 上传工具程序 包含两个文件: UploadRTOS.exe (命令行程序) UploadR…

20155307 2016-2017 《Java程序设计》第三次实验报告

&#xff08;一&#xff09;敏捷开发与XP 敏捷开发是一种以人为核心、迭代、循序渐进的开发方法。“敏捷流程”是一系列价值观和方法论的集合。从2001年开始&#xff0c;一些软件界的专家开始倡导“敏捷”的价值观和流程&#xff0c;他们肯定了流行做法的价值&#xff0c;但是强…

ElasticSearch创建、修改、获取、删除、索引Indice mapping和Index Template案例

为什么80%的码农都做不了架构师&#xff1f;>>> The best elasticsearch highlevel java rest api-----bboss ElasticSearch客户端框架bboss的ClientInterface 接口提供了创建/修改、获取、删除索引Indice和IndexTemplate的方法&#xff0c;本文举例说明其使用方法…

ASCII码与string的相互转换

ASCII码与string的相互转换 思路&#xff1a; 1&#xff09;ASCII码转string&#xff1a;把字符&#xff08;串&#xff09;直接转换为int类型&#xff0c;即可得到ASCII码&#xff1b; 2&#xff09;string转ASCII码&#xff1a;将数字转换为字符串转出&#xff1b; {//将字…

X264代码中一些参数的意义

Main&#xff08;int argc&#xff0c;char *argv[]&#xff09;; 为了方便起见&#xff0c;不妨改写为&#xff1a; Main(void){ ...... intargc5; char*argv[]{ "main","-o","test.264","foreman.yuv","352x288" }; …

spring mvc注解@RequestMapping

1、url路径映射 基本功能 2、窄化请求映射 根路径子路径 注意setViewName的路径。 3、限制http请求方法 get和 post 如果是get 转载于:https://www.cnblogs.com/jway1101/p/5773923.html

Start application automatically during controller boot-up

&#xfeff;&#xfeff; Tip English •German Start application automatically during controller boot-up Description It is possible to start any program automatically during the boot-up procedure of the KR C4 controller. Precondition •User group “Exper…

C#using static

平常用法&#xff1a; using 命名空间&#xff1b; using System; Console.WriteLine("Hello&#xff0c;World&#xff01;");using static用法&#xff1a; C#6中支持这种写法&#xff0c;这样定义后可以可以访问类的静态成员 WriteLine是Console类的静态函数&am…

redis数据迁移

一&#xff1a;AOF方式 需求&#xff1a; 一个没有数据的redis。 清空redis数据方法 bash> echo "keys *" | redis-cli --raw -p 6378 |sed -r s/(.*)/redis-cli --raw -p 6378 del \1 /g |bash 1.备份 bash> redis-cli --raw -p 6378 redis> config get di…

阿里云OSS 上传文件SDK

Aliyun OSS SDK for C# 上传文件 另外&#xff1a;查找的其他实现C#上传文件功能例子&#xff1a; 1、WPF用流的方式上传/显示/下载图片文件(保存在数据库) &#xff08;文末有案例下载链接&#xff09; 2、WPF中利用WebClient向服务器上传文件 3、C#文件上传的简单实现 4、C#实…

关于level_idc和Profile_IDC的解释

2010-01-21 15:51:40| 分类&#xff1a; windows mobile开 |字号 订阅 Description: Set bitstream Profile IDC. Default is 88. Note: Some profiles cannot support certain features. See MPEG-4 AVC for supported features for each profile. Reference software may…

老婆的驾照要下来了,形容下我此刻的心情

&#xfeff;&#xfeff; 老婆的驾照要下来了&#xff0c;形容下我此刻的心情&#xff1a; 路上遇到的女人&#xff0c;大部分是不用眼睛和脑子开车的&#xff0c;完全是凭自己的感觉开车。凡是看到前车奇慢、路口犹豫不决、不打灯缓慢变线、不该…

ADO.NET改进防注入

static void Main1(string[] args) { //用户输入一个需要查询的条件 car表 Console.WriteLine("请输入"); string code Console.ReadLine(); SqlConnection conn new SqlConnection("server.;databasemydb;usersa;pwd100867"); SqlCommand cmd conn.Crea…

poj 2139

Floyd-Warshall模板题&#xff0c;我才刚学最短路。。。。 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int maxn30050; int d[maxn][maxn]; int v,m,n; int a[maxn]; const int inf0…