转载地址: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