x264源码分析 -- x264_slicetype_path
2014-11-13 15:56
627 查看
// char best_paths : (char *)best_paths 表示当总帧数=n时的最佳类型决策 static void x264_slicetype_path( x264_t *h, x264_mb_analysis_t *a, x264_frame_t **frames, int length, int max_bframes, char (*best_paths)[X264_LOOKAHEAD_MAX] ) { char paths[X264_BFRAME_MAX+2][X264_LOOKAHEAD_MAX] = {{0}}; int num_paths = X264_MIN(max_bframes+1, length); // 需要决策帧类型的总帧数 (最多不能超过B帧数目的限制) int suffix_size, loc, path; int best_cost = COST_MAX; int best_path_index = 0; length = X264_MIN(length,X264_LOOKAHEAD_MAX); // 整个frames的总帧数 // 只重新决策best_paths的最后num_paths个路径. 因为前面的已经不能再调整了, 已是最优. for( suffix_size = 0; suffix_size < num_paths; suffix_size++ ) { memcpy( paths[suffix_size], best_paths[length - (suffix_size + 1)], length - (suffix_size + 1) ); // 每次决策一个帧的类型时, 会重新计算所有可能的最佳路径 for( loc = 0; loc < suffix_size; loc++ ) strcat( paths[suffix_size], "B" ); // 尽量填充B帧直到最多可容忍的值(i_max_bframes) strcat( paths[suffix_size], "P" ); // 每种决策最后帧一定是个P帧 } /* Calculate the actual cost of each of the current paths */ for( path = 0; path < num_paths; path++ ) { int cost = x264_slicetype_path_cost( h, a, frames, paths[path], best_cost ); if( cost < best_cost ) { best_cost = cost; best_path_index = path; // 计算每种决策的SATD_cost. 取最佳的! } } /* Store the best path. */ memcpy( best_paths[length], paths[best_path_index], length ); // 总帧数为length时的最佳决策 }
相关文章推荐
- x264源码分析 -- x264_slicetype_mb_cost
- x264 源码分析 (1)
- x264 源码分析 (3)
- x264源码分析与应用示例(一)——视频编码基本流程
- x264源码分析与应用示例(一)——视频编码基本流程
- x264_param_default_preset()源码分析
- x264源码分析
- x264源码分析与应用示例(三)——浅谈码率控制的优化问题
- ffmpeg源码分析五:ffmpeg调用x264编码器的过程分析 (转5)
- os.path.abspath 源码分析
- x264源码分析与应用示例(二)——码率控制
- x264 源码分析 (4)
- x264源码分析三:x264_slices_write和x264_slice_write函数分析
- x264源码分析 -- get_ref
- ffmpeg源码分析五:ffmpeg调用x264编码器的过程分析
- Nodejs源码分析之Path
- x264 源码分析 (2)
- X264源码分析
- x264源码分析一:main函数和encode函数
- x264_param_default()源码分析;