H.264参考帧列表管理分析 —— JM中相关函数解析(中)
来源:互联网 发布:淘宝发布宝贝物流重量 编辑:程序博客网 时间:2024/06/01 09:40
本文解析几个与参考帧重排序的相关函数。
/*! ************************************************************************ * \brief * Reordering process for short-term reference pictures 短期参考帧重排序 * ************************************************************************ */static void reorder_short_term(StorablePicture **RefPicListX, int num_ref_idx_lX_active_minus1, int picNumLX, int *refIdxLX){ int cIdx, nIdx; StorablePicture *picLX; picLX = get_short_term_pic(picNumLX);//!< 根据给定的picNumLX获取相应的短期参考帧 for( cIdx = num_ref_idx_lX_active_minus1+1; cIdx > *refIdxLX; cIdx-- ) RefPicListX[ cIdx ] = RefPicListX[ cIdx - 1]; //!< 将refIdxLX位置之后的参考帧依次后移 RefPicListX[ (*refIdxLX)++ ] = picLX; //!< 将给定的picNumLX短期参考帧存至refIdxLX位置 nIdx = *refIdxLX; for( cIdx = *refIdxLX; cIdx <= num_ref_idx_lX_active_minus1+1; cIdx++ ) if (RefPicListX[ cIdx ]) if( (RefPicListX[ cIdx ]->is_long_term ) || (RefPicListX[ cIdx ]->pic_num != picNumLX )) //!< 该操作可将参考帧列表中重复的序号为picNumLX的参考帧覆盖掉 RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ];}
/*! ************************************************************************ * \brief * Returns short term pic with given picNum 返回给定picNum序号的短期参考帧 * ************************************************************************ */static StorablePicture* get_short_term_pic(int picNum){ unsigned i; for (i=0; i<dpb.ref_frames_in_buffer; i++) //!< 遍历dpb中的参考帧 { if (img->structure==FRAME) //!< 帧模式 { if (dpb.fs_ref[i]->is_reference == 3) if ((!dpb.fs_ref[i]->frame->is_long_term)&&(dpb.fs_ref[i]->frame->pic_num == picNum)) return dpb.fs_ref[i]->frame; //!< 找到pic_num等于picNum且不是长期参考帧的短期参考帧,返回 } else //!< 场模式(略过) { if (dpb.fs_ref[i]->is_reference & 1) if ((!dpb.fs_ref[i]->top_field->is_long_term)&&(dpb.fs_ref[i]->top_field->pic_num == picNum)) return dpb.fs_ref[i]->top_field; if (dpb.fs_ref[i]->is_reference & 2) if ((!dpb.fs_ref[i]->bottom_field->is_long_term)&&(dpb.fs_ref[i]->bottom_field->pic_num == picNum)) return dpb.fs_ref[i]->bottom_field; } }// return NULL; return no_reference_picture;}
/*! ************************************************************************ * \brief * Reordering process for long-term reference pictures 长期参考帧重排序 * ************************************************************************ */static void reorder_long_term(StorablePicture **RefPicListX, int num_ref_idx_lX_active_minus1, int LongTermPicNum, int *refIdxLX){ int cIdx, nIdx; StorablePicture *picLX; picLX = get_long_term_pic(LongTermPicNum); //!< 获取给定LongTermPicNum的相应的长期参考帧 for( cIdx = num_ref_idx_lX_active_minus1+1; cIdx > *refIdxLX; cIdx-- ) RefPicListX[ cIdx ] = RefPicListX[ cIdx - 1]; //!< 将refIdxLX之后的参考帧依次右移 RefPicListX[ (*refIdxLX)++ ] = picLX; //!< 将LongTermPicNum对应的长期参考帧存至refIdxLX位置 nIdx = *refIdxLX; for( cIdx = *refIdxLX; cIdx <= num_ref_idx_lX_active_minus1+1; cIdx++ ) if (RefPicListX[ cIdx ]) if( (!RefPicListX[ cIdx ]->is_long_term ) || (RefPicListX[ cIdx ]->long_term_pic_num != LongTermPicNum )) //!< 可将序号为LongTermPicNum重复的参考帧覆盖掉 RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ];}
/*! ************************************************************************ * \brief * Returns long term pic with given LongtermPicNum * ************************************************************************ */static StorablePicture* get_long_term_pic(int LongtermPicNum){ unsigned i; for (i=0; i<dpb.ltref_frames_in_buffer; i++) //!< 遍历dpb中所有的长期参考帧 { if (img->structure==FRAME) //!< 帧模式 { if (dpb.fs_ltref[i]->is_reference == 3) if ((dpb.fs_ltref[i]->frame->is_long_term)&&(dpb.fs_ltref[i]->frame->long_term_pic_num == LongtermPicNum)) return dpb.fs_ltref[i]->frame; //!< 找到long_term_pic_num等于LongtermPicNum的长期参考帧,返回 } else //!< 场模式(略过) { if (dpb.fs_ltref[i]->is_reference & 1) if ((dpb.fs_ltref[i]->top_field->is_long_term)&&(dpb.fs_ltref[i]->top_field->long_term_pic_num == LongtermPicNum)) return dpb.fs_ltref[i]->top_field; if (dpb.fs_ltref[i]->is_reference & 2) if ((dpb.fs_ltref[i]->bottom_field->is_long_term)&&(dpb.fs_ltref[i]->bottom_field->long_term_pic_num == LongtermPicNum)) return dpb.fs_ltref[i]->bottom_field; } } return NULL;}
- H.264参考帧列表管理分析 —— JM中相关函数解析(中)
- H.264参考帧列表管理分析 —— JM中相关函数解析(中)
- H.264参考帧列表管理分析 —— JM中相关函数解析(上)
- H.264参考帧列表管理分析 —— JM中相关函数解析(下)
- H.264参考帧列表管理分析 —— JM中相关函数解析(上)
- H.264参考帧列表管理分析 —— JM中相关函数解析(下)
- H.264/AVC标准参考软件 JM
- JM、H.264中一些参数的设置和含义
- 四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- H.264解码器中参考图像的管理
- 设计模式九(单例模式,python语言实现)
- 星际译王,金山词霸,有道词典,词库下载 1
- 整数二进制中1的个数
- PHP 分页显示制作
- 星际译王,金山词霸,有道词典,词库下载 2
- H.264参考帧列表管理分析 —— JM中相关函数解析(中)
- 动态规划——最大连续子段和
- 【ooize】oozie启动失败
- FLEX效果的实例,FLEX学习者值得一览
- MySQL5.5编译工具configure向cmake过渡指南
- js 获取地址栏参数
- iOS开发记录(2)
- css固定元素位置(fixed)
- 统计自然语言处理基础学习笔记(2)——语料库