T264_param_t, T264_t结构体成员解析

来源:互联网 发布:ubuntu 命令 编辑:程序博客网 时间:2024/05/01 01:35
转载地址:http://blog.sina.com.cn/s/blog_4171e65d0100o4px.html
 
转载背后:今晚看图像采集应用程序,里面“T264_param_t m_param;  ” //代表编码器所采用的参数,如图像帧宽度、高度、压缩率等等
而程序中经常使用到这个结构体的两个成员:m_param.width,   m_param.height
 
 
typedef struct 
{
    int32_t width, height;  
//图像的宽和高
    int32_t qp;  
//量化步长
    int32_t bitrate;  
//码率
    float   framerate;  
//帧率
    int32_t iframe;                 
// I 帧间距
    int32_t idrframe;                // idr 间距
    int32_t ref_num;             
// 参考帧数目
    int32_t b_num;                //b frame number between 2 p-frame(0, 1, 2)  
    int32_t flags;     //一些标志

    int32_t cpu;    
    int32_t search_x; 
//帧间预测时水平搜索范围上限
    int32_t search_y; //帧间预测时垂直搜索范围上限
    int32_t block_size;  //包括

    int32_t disable_filter;  //去块效应滤波器,0表示使用滤波器,1表示不使用
    int32_t aspect_ratio;  
//aspect_ratio, 2 means 720 * 576 4:3
    int32_t video_format;  
//图像制式 1代表pal
    int32_t luma_coeff_cost;  
//计算每个块(最大到16*16)的系数开销。
    int32_t min_qp;     
//最小量化步长
    int32_t max_qp;   //最大量化步长
    int32_t enable_rc;  //码率控制
    int32_t enable_stat;  
//统计psnr
    int32_t direct_flag;
 //for CABAC
 int32_t cabac; 
//CABAC使能
    void*   rec_name;  
//重构yuv文件名
T264_param_t;
 
 
 
 
struct T264_t
{
    T264_frame_t refn[MAX_REFFRAMES]; 
    T264_frame_t* ref[2][MAX_REFFRAMES];
    int32_t refl0_num;  
//用于做预测的前边帧的个数
    int32_t refl1_num;   //用于做预测的后边帧的个数
    T264_frame_t cur;  //暂存当前要处理的一帧数据,不含扩展边界
    T264_frame_t* rec; 
 //重构帧的数据,含扩展边界
    int32_t     width;   //为mb_width<<4
    int32_t     height;  
//mb_height<<4
    int32_t     stride;  //亮度信号的跨度,等于t->width
    int32_t     stride_uv;  
//色差信号的跨度,等于t->width >> 1
    int32_t     edged_stride; //带边缘的亮度信号的跨度,等于t->edged_width
    int32_t     edged_stride_uv;//带边缘的色度信号的跨度,等于t->edged_width >> 1
    int32_t     edged_width;  //T264_open中设为width + 2 * EDGED_WIDTH
    int32_t     edged_height; 
//带边缘的亮度信号的跨度,等于t->height + 2 * EDGED_HEIGHT
    int32_t     qp_y, qp_uv; 
//亮度、色度量化步长
    void*        bs;  //bit 流,在T264_open中 t->bs = T264_malloc(sizeof(bs_t), CACHE_SIZE);
    uint8_t*    bs_buf;  

    uint32_t    flags; //根T264_param_t中的flag一样的含义
    int32_t     mb_width, mb_height; 
    int32_t  mb_stride;  //每行mb个数
    uint32_t    idr_pic_id;  
//IDR帧的标识号
   
    uint32_t    frame_id;
   
    uint32_t    frame_num;
   
    uint32_t    frame_no;
   
    uint32_t    last_i_frame_id;
    uint32_t    poc;    
//picture order count,图像的播放顺序
    uint32_t    slice_type;  //slice的类型 SLICE_P SLICE_B SLICE_I SLICE_SP SLICE_SI SLICE_IDR
    int32_t     skip;  
//计数一个slice里有多少个skip宏块,每slice清零
    uint32_t    sad_all; //用来计算整个宏块中的sad,累加所有mb的sad
    T264_frame_t pending_bframes[MAX_BREFNUMS];  
//存储还未编码的b帧数据,不含扩展边界
    int32_t     pending_bframes_num;  // pending_bframes[MAX_BREFNUMS]有效数据的个数
    int32_t     header_bits; //存储每一帧,编码后的数据的头部控制信息
    int32_t     frame_bits;  //一帧数据编码后的大小(bit为单位)
   
   
    uint8_t* src_buf;  
    uint8_t* src_end;  

    uint8_t* nal_buf;  
    int32_t nal_len;   
    uint32_t shift;    
    uint32_t shift1;
    action_t action;
    int32_t need_deblock;  //去块效应滤波器使能
    T264_frame_t* cur_frame;  
//没用
   
    int32_t aspect_ratio;  //宽高比
    int32_t video_format; 
//图像制式 1代表pal
    T264_frame_t output; //输出变量,T264_frame_t结构体格式
   
    T264_param_t   param; //参数变量,T264_param_t结构体格式
    T264_nal_t     nal; 
//NAL变量,T264_nal_t结构体格式
    T264_seq_set_t ss;  
//序列参数集变量,T264_seq_set_t结构体
    T264_pic_set_t ps;  //图像参数集变量,T264_pic_set_t结构体
    T264_slice_t   slice;  
//slice参数集变量,T264_slice_t结构体
    T264_stat_t    stat;  //stat参数集变量,T264_stat_t结构体
    T264_mb_t      mb;//mb参数集变量,T264_mb_t结构体
    int16_t        subpel_pts; 
    T264_plugin_t  plugins[MAX_PLUGINS];    //存储一些t264中使用的调用,如统计psnr和rc
 //for CABAC
 T264_cabac_t cabac;
    int32_t        plug_num; //plug+1为plugins[MAX_PLUGINS]有效部分的函数的数量
    T264_predict_16x16_mode_t pred16x16[4 + 3];    //16×16预测函数的函数指针

    T264_predict_8x8_mode_t   pred8x8[4 + 3];           //8×8预测函数的函数指针

    T264_predict_4x4_mode_t   pred4x4[9 + 3];           //4×4预测函数的函数指针

    T264_cmp_t cmp[8];       //求sad或stad函数的函数指针,USE_SAD使能时,与下面sad相同
    T264_cmp_t sad[8];     //求sad函数的函数指针


    T264_pia_t pia[9];        //for pixel avearage func
    T264_dct_t fdct4x4;      //求dct4×4变换的函数指针
    T264_dct_t fdct4x4dc;  //求4×4直流系数变换(哈达玛)的函数指针
    T264_dct_t fdct2x2dc;   //求2×2直流系数变换(哈达玛)的函数指针
    T264_dct_t idct4x4;      //求dct4×4逆变换的函数指针
    T264_dct_t idct4x4dc;   //求4×4直流系数逆变换(逆哈达玛)的函数指针
    T264_dct_t idct2x2dc;    //求2×2直流系数逆变换(逆哈达玛)的函数指针

    T264_quant4x4_t   quant4x4;         //求4×4量化的函数指针
    T264_quant4x4dc_t quant4x4dc;      
//求4×4直流系数量化的函数指针
    T264_quant2x2dc_t quant2x2dc;     
//求2×2直流系数量化的函数指针
    T264_iquant_t     iquant4x4;            //求4×4反量化的函数指针
    T264_iquant_t     iquant4x4dc;         
//求4×4直流系数反量化的函数指针
    T264_iquant_t     iquant2x2dc;         //求2×2直流系数反量化的函数指针
    expand8to16_t     expand8to16;       //进行8->16bit的扩展的函数指针
    contract16to8_t   contract16to8;      
//进行16->8bit的缩短的函数指针
    
expand8to16sub_t  expand8to16sub; //进行8->16bit的减法的函数指针
    contract16to8add_t contract16to8add; //进行16->8bit的加法的函数指针
    memcpy_stride_u_t   memcpy_stride_u;//进行u的stride宽度拷贝的函数指针
    T264_eighth_pixel_mc_u_t eighth_pixel_mc_u;   //色度1/8象素插值计算函数指针
    T264_interpolate_halfpel_t interpolate_halfpel_h;   //进行水平方向半像素滤波的函数指针
    T264_interpolate_halfpel_t interpolate_halfpel_v;   
//进行垂直方向半像素滤波的函数指针
    T264_interpolate_halfpel_t interpolate_halfpel_hv; //进行斜向半像素滤波的函数指针

    T264_pixel_avg_t pixel_avg; //未使用,被pia代替
    T264_satd_i16x16_u_t T264_satd_16x16_u; //对16×16采用SATD的函数指针
    T264_search_t   search; //选用不同搜索方法的函数指针

    T264_emms_t emms; //处理器清空指令函数指针,更多的情况用来做延时
};
0 0
原创粉丝点击