“T264_param_t m_param; ” //代表编码器所采用的参数,如图像帧宽度、高度、压缩率等等
而程序中经常使用到这个结构体的两个成员:m_param.width, m_param.height但是T264_param_t是在H264编码库里面定义的无法看到源码,所以网上搜索了一下,结果如下:
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_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直流系数反量化的函数指针
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; //处理器清空指令函数指针,更多的情况用来做延时
};