zoukankan      html  css  js  c++  java
  • 源码分析系列(一)x264_main_dataflow

    http://www.cnblogs.com/xkfz007/articles/2616153.html

    帧内帧间编码部分关键函数

    1.1 x264_encoder_open (x264_param_t *param )

    功能

    分配编码器所需结构体。

    检测参数有效性。

    初始化sps和pps。

    分配编码器所需memory空间,包括参考帧和缓冲帧。

    初始化macroblock cache相应空间。

    分配编码器所需memory空间,包括参考帧和缓冲帧。

    根据cpu类型,初始化各指令集加速函数。

    输入项目

    x264_param_t *param

    输出项目

    x264_t *h

    存储分配

    x264_t *h = x264_malloc( sizeof( x264_t ) );

    h->out.p_bitstream = x264_malloc( h->out.i_bitstream );

    h->frames.unused[i] = x264_frame_new( h );

    h->frames.reference[i] = x264_frame_new( h );

    x264_ratecontrol_new( h ) ;

    1.2 x264_encoder_encode(x264_t *h, x264_nal_t **pp_nal, int *pi_nal, x264_picture_t *pic)

    功能

    处理编码帧队列,并设置编码帧类型。

    初始化参考列表、码率控制等相关信息。

    根据编码信息,写sps、pps位流。

    调用int x264_slices_write( x264_t *h )函数编码一帧。

    更新码率控制、噪声抑制等参数。

    输入项目

    x264_t *h

    x264_nal_t **pp_nal

    int *pi_nal

    x264_picture_t *pic

    输出项目

    Log文件等。

    程序逻辑

        如附图1所示。

    附图1: x264_encoder_encode流程图

    1.3 x264_slice_write(x264_t *h, int i_nal_type, int i_nal_ref_idc)

    功能

    调用x264_slice_header_write函数向码流写入slice header

    Load宏块到cache

    宏块分析

    宏块编码

    宏块写cavlc/cabac

    保存宏块到cache        

    输入项目

    x264_t *h

    int i_nal_type

    int i_nal_ref_idc

    程序逻辑

        如附图2所示:

    附图2: x264_slice_write流程图

    1.4 x264_macroblock_analyse(x264_t *h )

    功能

    初始化;

    对于I Slice,遍历所有16x16和4x4预测模式,得到最小Cost所对应的分块方式和预测模式;

    对于P Slice,如果宏块周围有Skip模式的宏块,检测当前块是否是Skip块,如果不是Skip块,遍历所有可能的块划分模式,对每种模式进行运动估计并计算Cost,计算intra对应的16x16和4x4的Cost(包括色度),比较所有的Cost,选最小的Cost对应的模式为最终模式。

    输入项目

    x264_t *h

    程序逻辑

    如附图3所示:

    附图3: x264_macroblock_analyse流程图

    1.5 x264_macroblock_encode(x264_t *h )

    功能

    DCT;

    量化;

    Zigzag;

    反量化;

    运动补偿;

    得到残差的dct域coff。

    输入项目

    x264_t *h

    程序逻辑

        如附图4所示:

    附图4:x264_macroblock_encode流程图

    运动补偿x264_mb_mc( x264_t *h )的大体流程,如附图5所示:

    附图5: x264_mb_mc流程图

     
    分类: X264
  • 相关阅读:
    批处理处理oracle数据库脚本导入
    Log4Net 配置说明
    MSSQL和oracle数据通讯
    计算字符串中每种字符出现的次数[Dictionary<char,int>泛型集合用法]
    newagg新蛋笔试题
    Oracle数据库切换SQLServer数据库解决方案
    sqlserver 的事务和c#的事务
    SQL Server 2005 导出 数据脚本
    ASP.NET CMD WebShell
    Silverlight BUG
  • 原文地址:https://www.cnblogs.com/stnlcd/p/7199194.html
Copyright © 2011-2022 走看看