x264中slice 和 macroblock存储位置

yzhaozhe 2012-04-10 08:33:23
想知道slice存储图像位置的结构体,看标准的时候分两部分有个slice_header,对应的是x264_slice_header_t结构体里面哪一个放的是slice的内存位置
就比如在x264_picture_t中的 x264_image_t img这个结构体里面plane中存放视频帧,slice中这些帧放在哪个标识中 求指导

还有macroblcok的 万分感谢
这是我自己做的注解,方便大家看顺便请教


typedef struct
{
/*分层结构最大的不同时取消了序列层和图像层,并将原本属于序列和头部的大部分句法元素游离出来形成
序列和图像两级参数集。 其余部分则放入片层*/
x264_sps_t *sps; /*序列参数集*/
x264_pps_t *pps; /*图像参数集*/

/*slice_type
指明片的类型*/
int i_type;
//first_mb_in_slice
/*片中第一个宏块的地址,片通过这个句法元素来标定它自己的地址。
在帧场自适应模式下,宏块都是成对出现的,这是本句法元素表示的是第几个宏块对,
对应第一个宏块的真实地址应该是 2*first_mb_in_slice*/
int i_first_mb;
int i_last_mb;

int i_pps_id; /*图像参数集的序号*/

//frame_num
/*每个参考帧都有一个一次连续的frame_num作为他们的标识,这指明了各图像的解码顺序。
但事实上我们在表中看到,frame_num的出现没有if语句限定条件,这表明非参考帧的片头也会出现frame_num
指示当该个图像是参考帧时候,它携带的这个句法元素在解码时候才有意义*/
int i_frame_num;

int b_mbaff;
//field_pic_flag
/*在片层表示图像编码模式的唯一一个句法元素,所谓的编码模式是指帧编码,场编码 ,帧场自适应编码
这个句法元素取1的时候属于场编码,0时为非场编码*/
int b_field_pic;
/*等于1的时候说明当前图像是属于底场,等于0时候说明当前图像是属于顶场*/
int b_bottom_field;

/*IDR图像标示,不同的IDR图像有不同的idr_pic_id值,IDR图像不等同于I图像*/
int i_idr_pic_id; /* -1 if nal_type != 5 */

/*POC 的第一种算法中用本句法元素来计算POC值,在POC的第一种算法中是显式的传递POC值*/
int i_poc_lsb;
int i_delta_poc_bottom;

/*POC的第二种和第三种算法是从frame_num映射得来的,这两个句法元素用于映射算法。
delta_pic_order_cnt[0]用于帧场编码方式下的底场和场编码方式的场,
delta_pic_order_cnt[1]用于帧编码方式下的顶场。*/
int i_delta_poc[2];
//redundant_pic_cnt
/*冗余片的id号*/
int i_redundant_pic_cnt;

//direct_spatial_mv_pred_flag
/*指明B图像的直接预测的模式下, 用时间预测还是空间预测 值为1空间预测 值为0时间预测*/
int b_direct_spatial_mv_pred;

//num_ref_idx_active_override_flag
/*图像参数集中我们看到已经出现句法元素num_ref_idx_10_active_minus1 和 num_ref_idx_11_active_minus1
制定当前参考帧队列中实际可用的参考帧的数目。在片头重载这对句法元素,以给某特定图像更大的灵活度。
这句法元素就是指明片头是否会重载,如果等于1,下面会出现新的num_ref_idx_10_active_minus1*/
int b_num_ref_idx_override;
int i_num_ref_idx_l0_active;
int i_num_ref_idx_l1_active;


/*参考图像重新排列的语义*/

/*指明是否进行重排序操作,这个句法等于1时,表明紧跟着会有一系列句法元素用于参考帧队列的重排序*/
int b_ref_pic_list_reordering_l0;
int b_ref_pic_list_reordering_l1;
struct {
int idc;
int arg;
} ref_pic_list_order[2][16];


//cabac_init_idc
/*给出cabac初始化时表格的选择 范围为0~2*/
int i_cabac_init_idc;

int i_qp;
/*指出用于当前片的所有宏块的量化参数的初始值QP*/
int i_qp_delta;
/*sp帧中的p宏块的解码方式是否是switching方式*/
int b_sp_for_swidth;
/*和i_qp_delta语义相似*/
int i_qs_delta;

/* deblocking filter */
/*指明一些滤波的设置*/
int i_disable_deblocking_filter_idc;
int i_alpha_c0_offset;
int i_beta_offset;

} x264_slice_header_t;
...全文
245 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,552

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧