x264list操作代码研究
来源:互联网 发布:linux chgrp命令 编辑:程序博客网 时间:2024/05/18 01:41
/* list operators */void x264_frame_push( x264_frame_t **list, x264_frame_t *frame ) //!< 入栈{ int i = 0; while( list[i] ) i++;//!< 找到栈顶 list[i] = frame; //!< 将元素压入栈}x264_frame_t *x264_frame_pop( x264_frame_t **list ) //!< 出栈{ x264_frame_t *frame; int i = 0; assert( list[0] ); while( list[i+1] ) i++; //!< 找到栈顶的前一个位置(栈顶为空) frame = list[i]; //!< 将元素赋值给返回值 list[i] = NULL; //!< 新栈顶 return frame;}void x264_frame_unshift( x264_frame_t **list, x264_frame_t *frame )//!< 右移{ int i = 0; while( list[i] ) i++; //!< 找到栈顶 while( i-- ) list[i+1] = list[i]; //!< 右移 list[0] = frame; //!< 第一个位置的元素由输入参数frame赋值}x264_frame_t *x264_frame_shift( x264_frame_t **list ) //!< 左移,返回第一个位置的元素{ x264_frame_t *frame = list[0]; //!< 将第一个位置的元素作为返回值 int i; for( i = 0; list[i]; i++ ) list[i] = list[i+1]; //!< 左移 assert(frame); return frame;}void x264_frame_push_unused( x264_t *h, x264_frame_t *frame ){ assert( frame->i_reference_count > 0 ); frame->i_reference_count--; //!< 使用该frame的线程数减1 if( frame->i_reference_count == 0 ) //!< 已经没有线程在使用该frame了,则可以将该frame压入h->frames.unused里了 x264_frame_push( h->frames.unused, frame ); assert( h->frames.unused[ sizeof(h->frames.unused) / sizeof(*h->frames.unused) - 1 ] == NULL );}x264_frame_t *x264_frame_pop_unused( x264_t *h ){ x264_frame_t *frame; if( h->frames.unused[0] ) //!< 栈非空,则令栈顶的一帧出栈并赋给frame作为函数返回值 frame = x264_frame_pop( h->frames.unused ); else //!< 栈空,则为frame生成新的一帧 frame = x264_frame_new( h ); assert( frame->i_reference_count == 0 ); frame->i_reference_count = 1; //!< 使用该frame的线程数初始化为1 frame->b_intra_calculated = 0; return frame;}void x264_frame_sort( x264_frame_t **list, int b_dts ) //!< pts: b_dts = 0; dts: b_dts = 1{ int i, b_ok; do { b_ok = 1; for( i = 0; list[i+1]; i++ ) { int dtype = list[i]->i_type - list[i+1]->i_type; int dtime = list[i]->i_frame - list[i+1]->i_frame; int swap = b_dts ? dtype > 0 || ( dtype == 0 && dtime > 0 ) : dtime > 0; if( swap ) { XCHG( x264_frame_t*, list[i], list[i+1] ); //!< list[i] 和 list[i+1] 交换位置 b_ok = 0; } } } while( !b_ok ); //!< 一直测试直到list中没有元素需要交换位置为止}
(转载请注明出处。)
- x264list操作代码研究
- 移动QQ代码研究之网络操作
- kfs代码研究(写操作流程图)
- 【代码】PHP 如何实现异步操作的研究
- 代码研究
- JAVA file操作研究
- SWT代码研究
- RunUO代码研究(一)
- PigYear病毒 代码 研究
- 代码行为研究方向
- 代码实验室研究系统
- IceFaces代码,回去研究
- NginxCodeReview Ningx代码研究.
- ARM-----启动代码研究
- 在线研究代码点
- Android代码研究
- Android 三维空间 代码 研究
- ARM启动代码研究
- java经典算法_032判断一个数字是奇数还是偶数
- 用PHP函数memory_get_usage获取当前PHP内存消耗量
- linux设备驱动(一)---字符设备之led驱动
- 今天2012-12-3开始写博客,人生的轨迹
- 中兴MTK mmi面试题(其中的部分)
- x264list操作代码研究
- Java笔记
- 11月份月总
- ARCGIS viewer入门(2)两个不同的widget交互
- 获取设备平台 platform
- Permission Denial: starting Intent 解决办法
- 对面试题“输入n,求一个nXn矩阵,规定矩阵沿45度递增,形成一个zigzag数组(JPEG编码里取像素数据的排列顺序),请问如何用C++实现?”的理解
- TCP/IP 详解翻译中的疑问 .
- Android应用开发揭秘的第22,23个程序5_17_frame,5_18_framexml修改版和高仿版的源码注释