视频编码多媒体科技

AV1编码器rav1e的API使用

2019-04-21  本文已影响2人  smallest_one

目录

  1. 参考
  2. 概述
  3. rav1e API介绍

1. 参考

2. 概述

rav1e是Mozilla/Xiph开发人员和许多志愿者开发的号称最安全、最快的AV1编码器。它使用rust编写,追求良好的速度、质量和可维护性。

3. rav1e API介绍

当前的API是围绕以下4个结构和1个枚举构建的[2]:

3.1 Config

Config的定义如下所示。

    struct Config {
        enc: EncoderConfig,
        threads: usize,
    }
let mut enc = EncoderConfig::with_speed_preset(speed);
    enc.width = w;
    enc.height = h;
    enc.bit_depth = 8;
    let cfg = Config { enc, threads: 0 };

Config的new_context方法

  let cfg = Config { enc, threads: 0 };
  let ctx: Context<u8> = cfg.new_context();

3.2 Context

它由Config::new_context生成,它的实现细节是隐藏的。

Context相关的方法可以分为基本方法(essential)、可选方法(optional)、便利方法(convenience)。

例如下面编码API:

 // Essential API
    pub fn send_frame<F>(&mut self, frame: F) -> Result<(), EncoderStatus>
      where F: Into<Option<Arc<Frame<T>>>>, T: Pixel;
    pub fn receive_packet(&mut self) -> Result<Packet<T>, EncoderStatus>;

下面是可选方法的示例,在某些场景下使用。

 // Optional API
    pub fn container_sequence_header(&mut self) -> Vec<u8>;
    pub fn get_first_pass_data(&self) -> &FirstPassData;

下面是遍历方法的示例,对已有方法的包装,方便使用者使用。

// Convenience shortcuts
    pub fn new_frame(&self) -> Arc<Frame<T>>;
    pub fn set_limit(&mut self, limit: u64);
    pub fn flush(&mut self) {

3.3 工作流程

工作流程如下所示:

  1. 设置
  1. 编码的循环
  1. 编码结束
上一篇 下一篇

猜你喜欢

热点阅读