AV1学习笔记一

最新webrtc版本已经支持AV1编解码功能,实测性能和质量真有很大的进步空间,另外potplay、VLC也支持AV1解码播放功能。

一、接口函数

根据webrtc代码总结AV1函数调用框架如下:

  • aom_codec_enc_config_default(aom_codec_iface_t *iface,aom_codec_enc_cfg_t *cfg, unsigned int usage)

        注册编码器,获取注册的编码器的默认编码参数集。

        aom_codec_iface_t *iface:要使用的编码器句柄指针。里面包含编码器使用的接口函数,默认配置参数。

        aom_codec_enc_cfg_t *cfg:编码器实际使用参数指针。这里是出参,需要根据usage在iface里面找到一组默认参数。

        usage:默认参数组序号。在webrtc代码里面,可以参考encoder_usage_cfg定义。

  • aom_img_alloc

        申请输入编码数据缓存buf

  • aom_codec_enc_init

       根据aom_codec_iface_t、aom_codec_enc_cfg_t初始化aom_codec_ctx_t句柄。并调用aom_codec_iface_t.encoder_init函数初始化编码器。

  • aom_codec_control

      根据需要,动态调整编码参数。可以参考aom_codec_av1_cx_algo.encoder_ctrl_maps定义。可调整的参数列表参考encoder_ctrl_maps定义。可修改的参数列表在aom_com_control_id、aome_enc_control_id里面定义。  

  • aom_codec_encode

       输入编码器待编码参数,进行编码。

  • aom_codec_get_cx_data

      获取编码后数据

  • aom_codec_enc_config_set

      动态调整编码参数。可通过调整aom_codec_enc_cfg_t参数,生效编码器。

  • aom_img_free

     释放编码数据缓存buf

  • aom_codec_destroy

     释放编码器申请资源

二、接口参数

aom_codec_enc_cfg结构体定义

参数名称 参数类型 参数含义 参数配置
g_usage unsigned int 自定义参数组编号 webrtc里面自定义编码:
AOM_USAGE_GOOD_QUALITY (0)
AOM_USAGE_REALTIME (1)
g_threads unsigned int 最大可使用线程数  
g_profile unsigned int 编码器可支持的格式集合 PROFILE_0:8-bit 4:2:0 only
PROFILE_1:8-bit 4:4:4, 4:2:2, and 4:4:0
PROFILE_2:10-bit and 12-bit color only, with 4:2:0 sampling.
PROFILE_3:10-bit and 12-bit color only, with 4:2:2/4:4:4/4:4:0 sampling.
g_w unsigned int  
g_h unsigned int  
g_bit_depth aom_bit_depth_t 编码器支持的位深 AOM_BITS_8
AOM_BITS_10
AOM_BITS_12
g_input_bit_depth unsigned int 输入编码器数据位深  
g_timebase aom_rational 视频采样率  
g_error_resilient aom_codec_er_flags_t Enable error resiliency features AOM_ERROR_RESILIENT_DEFAULT
AOM_ERROR_RESILIENT_PARTITIONS
g_pass aom_enc_pass pass参数 AOM_RC_ONE_PASS
AOM_RC_FIRST_PASS
AOM_RC_LAST_PASS
g_lag_in_frames unsigned int 预编码帧数  
rc_dropframe_thresh unsigned int 时间重采样阈值  
rc_resize_mode unsigned int 下采样模式调整 RESIZE_NONE:不调整分辨率.
RESIZE_FIXED:所有帧都按照指定参数调整分辨率,关键帧按照rc_resize_kf_numerator调整,非关键帧按照rc_resize_numerator调整
RESIZE_DYNAMIC:动态调整每一帧的分辨率
rc_resize_numerator unsigned int 非关键帧调整系数  
rc_resize_kf_numerator unsigned int 关键帧调整系数  
rc_superres_mode unsigned int 上采样模式调整 SUPERRES_NONE:不调整分辨率.
SUPERRES_FIXED:所有帧都按照指定参数调整分辨率,关键帧按照rc_superres_kf_numerator调整,非关键帧按照rc_superres_numerator调整
SUPERRES_DYNAMIC:动态调整每一帧的分辨率
rc_superres_numerator unsigned int 非关键帧调整系数  
rc_superres_kf_numerator unsigned int 关键帧调整系数  
rc_end_usage aom_rc_mode 码控模式 AOM_VBR:Variable Bit Rate mode
AOM_CBR:Constant Bit Rate mode
AOM_CQ:Constrained Quality mode
AOM_Q:Constant Quality mode
rc_twopass_stats_in aom_fixed_buf_t 2pass统计  
rc_firstpass_mb_stats_in aom_fixed_buf_t 1pass统计  
rc_target_bitrate unsigned int 目标码率  
rc_min_quantizer unsigned int 最小QP  
rc_max_quantizer unsigned int 最大QP  
rc_undershoot_pct unsigned int 可上浮目标码率比例  
rc_overshoot_pct unsigned int 可下浮目标码率比例  
rc_buf_sz unsigned int 解码端需分配的缓存buf  
rc_buf_initial_sz unsigned int 开始解码时,解码端需分配的缓存buf  
rc_buf_optimal_sz unsigned int 解码端需分配的最优缓存buf  
rc_2pass_vbr_bias_pct unsigned int CBR/VBR bias (0=CBR, 100=VBR)  
rc_2pass_vbr_minsection_pct unsigned int GOP min bitrate (% of target)  
rc_2pass_vbr_maxsection_pct unsigned int GOP max bitrate (% of target)  
kf_mode aom_kf_mode 配置I帧间隔 AOM_KF_AUTO:自适应I帧间隔
AOM_KF_DISABLED:固定I帧间隔
kf_min_dist unsigned int 最小I帧间隔  
kf_max_dist unsigned int 最大I帧间隔  

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/106384324