libvpxenc.c File Reference

VP8 encoder support via libvpx. More...

#include <vpx/vpx_encoder.h>
#include <vpx/vp8cx.h>
#include "avcodec.h"
#include "internal.h"
#include "libavutil/base64.h"
#include "libavutil/mathematics.h"
#include "libavutil/opt.h"

Go to the source code of this file.

Data Structures

struct  FrameListData
 Portion of struct vpx_codec_cx_pkt from vpx_encoder.h. More...
struct  VP8EncoderContext

Macros

#define VPX_DISABLE_CTRL_TYPECHECKS   1
#define VPX_CODEC_DISABLE_COMPAT   1
#define OFFSET(x)   offsetof(VP8Context, x)
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM

Typedefs

typedef struct VP8EncoderContext VP8Context

Functions

static av_cold void log_encoder_error (AVCodecContext *avctx, const char *desc)
static av_cold void dump_enc_cfg (AVCodecContext *avctx, const struct vpx_codec_enc_cfg *cfg)
static void coded_frame_add (void *list, struct FrameListData *cx_frame)
static av_cold void free_coded_frame (struct FrameListData *cx_frame)
static av_cold void free_frame_list (struct FrameListData *list)
static av_cold int codecctl_int (AVCodecContext *avctx, enum vp8e_enc_control_id id, int val)
static av_cold int vp8_free (AVCodecContext *avctx)
static av_cold int vp8_init (AVCodecContext *avctx)
static void cx_pktcpy (struct FrameListData *dst, const struct vpx_codec_cx_pkt *src)
static int storeframe (AVCodecContext *avctx, struct FrameListData *cx_frame, uint8_t *buf, int buf_size, AVFrame *coded_frame)
 Store coded frame information in format suitable for return from encode().
static int queue_frames (AVCodecContext *avctx, uint8_t *buf, int buf_size, AVFrame *coded_frame)
 Queue multiple output frames from the encoder, returning the front-most.
static int vp8_encode (AVCodecContext *avctx, uint8_t *buf, int buf_size, void *data)

Variables

static const char * ctlidstr []
 String mappings for enum vp8e_enc_control_id.
static const AVOption options []
class {
      class_name = "libvpx encoder"
      item_name = av_default_item_name
      option = options
      version = LIBAVUTIL_VERSION_INT
}; 
static const AVCodecDefault defaults []
AVCodec ff_libvpx_encoder

Detailed Description

VP8 encoder support via libvpx.

Definition in file libvpxenc.c.

Macro Definition Documentation

#define OFFSET (   x)    offsetof(VP8Context, x)

Definition at line 523 of file libvpxenc.c.

Definition at line 524 of file libvpxenc.c.

#define VPX_CODEC_DISABLE_COMPAT   1

Definition at line 27 of file libvpxenc.c.

#define VPX_DISABLE_CTRL_TYPECHECKS   1

Definition at line 26 of file libvpxenc.c.

Typedef Documentation

typedef struct VP8EncoderContext VP8Context

Function Documentation

static av_cold int codecctl_int ( AVCodecContext avctx,
enum vp8e_enc_control_id  id,
int  val 
)
static

Definition at line 181 of file libvpxenc.c.

Referenced by vp8_init().

static void coded_frame_add ( void list,
struct FrameListData cx_frame 
)
static

Definition at line 154 of file libvpxenc.c.

Referenced by queue_frames().

static void cx_pktcpy ( struct FrameListData dst,
const struct vpx_codec_cx_pkt *  src 
)
inlinestatic

Definition at line 354 of file libvpxenc.c.

Referenced by queue_frames().

static av_cold void dump_enc_cfg ( AVCodecContext avctx,
const struct vpx_codec_enc_cfg *  cfg 
)
static

Definition at line 99 of file libvpxenc.c.

Referenced by vp8_init().

static av_cold void free_coded_frame ( struct FrameListData cx_frame)
static

Definition at line 164 of file libvpxenc.c.

Referenced by free_frame_list(), and queue_frames().

static av_cold void free_frame_list ( struct FrameListData list)
static

Definition at line 170 of file libvpxenc.c.

Referenced by vp8_free().

static av_cold void log_encoder_error ( AVCodecContext avctx,
const char *  desc 
)
static

Definition at line 88 of file libvpxenc.c.

Referenced by codecctl_int(), vp8_encode(), and vp8_init().

static int queue_frames ( AVCodecContext avctx,
uint8_t *  buf,
int  buf_size,
AVFrame coded_frame 
)
static

Queue multiple output frames from the encoder, returning the front-most.

In cases where vpx_codec_get_cx_data() returns more than 1 frame append the frame queue. Return the head frame if available.

Returns
Stored frame size
AVERROR(EINVAL) on output size error
AVERROR(ENOMEM) on coded frame queue data allocation error

Definition at line 402 of file libvpxenc.c.

Referenced by vp8_encode().

static int storeframe ( AVCodecContext avctx,
struct FrameListData cx_frame,
uint8_t *  buf,
int  buf_size,
AVFrame coded_frame 
)
static

Store coded frame information in format suitable for return from encode().

Write buffer information from cx_frame to buf & buf_size. Timing/frame details to coded_frame.

Returns
Frame size written to buf on success
AVERROR(EINVAL) on error

Definition at line 372 of file libvpxenc.c.

Referenced by queue_frames().

static int vp8_encode ( AVCodecContext avctx,
uint8_t *  buf,
int  buf_size,
void data 
)
static

Definition at line 480 of file libvpxenc.c.

static av_cold int vp8_free ( AVCodecContext avctx)
static

Definition at line 202 of file libvpxenc.c.

Referenced by vp8_init().

static av_cold int vp8_init ( AVCodecContext avctx)
static

Definition at line 214 of file libvpxenc.c.

Variable Documentation

const { ... }
class_name = "libvpx encoder"

Definition at line 553 of file libvpxenc.c.

const char* ctlidstr[]
static
Initial value:
{
[VP8E_UPD_ENTROPY] = "VP8E_UPD_ENTROPY",
[VP8E_UPD_REFERENCE] = "VP8E_UPD_REFERENCE",
[VP8E_USE_REFERENCE] = "VP8E_USE_REFERENCE",
[VP8E_SET_ROI_MAP] = "VP8E_SET_ROI_MAP",
[VP8E_SET_ACTIVEMAP] = "VP8E_SET_ACTIVEMAP",
[VP8E_SET_SCALEMODE] = "VP8E_SET_SCALEMODE",
[VP8E_SET_CPUUSED] = "VP8E_SET_CPUUSED",
[VP8E_SET_ENABLEAUTOALTREF] = "VP8E_SET_ENABLEAUTOALTREF",
[VP8E_SET_NOISE_SENSITIVITY] = "VP8E_SET_NOISE_SENSITIVITY",
[VP8E_SET_SHARPNESS] = "VP8E_SET_SHARPNESS",
[VP8E_SET_STATIC_THRESHOLD] = "VP8E_SET_STATIC_THRESHOLD",
[VP8E_SET_TOKEN_PARTITIONS] = "VP8E_SET_TOKEN_PARTITIONS",
[VP8E_GET_LAST_QUANTIZER] = "VP8E_GET_LAST_QUANTIZER",
[VP8E_SET_ARNR_MAXFRAMES] = "VP8E_SET_ARNR_MAXFRAMES",
[VP8E_SET_ARNR_STRENGTH] = "VP8E_SET_ARNR_STRENGTH",
[VP8E_SET_ARNR_TYPE] = "VP8E_SET_ARNR_TYPE",
}

String mappings for enum vp8e_enc_control_id.

Definition at line 69 of file libvpxenc.c.

Referenced by codecctl_int().

const AVCodecDefault defaults[]
static
Initial value:
{
{ "qmin", "-1" },
{ "qmax", "-1" },
{ "g", "-1" },
{ "keyint_min", "-1" },
{ NULL },
}

Definition at line 559 of file libvpxenc.c.

AVCodec ff_libvpx_encoder
Initial value:
{
.name = "libvpx",
.id = CODEC_ID_VP8,
.priv_data_size = sizeof(VP8Context),
.encode = vp8_encode,
.pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE},
.long_name = NULL_IF_CONFIG_SMALL("libvpx VP8"),
.priv_class = &class,
.defaults = defaults,
}

Definition at line 567 of file libvpxenc.c.

item_name = av_default_item_name

Definition at line 554 of file libvpxenc.c.

option = options

Definition at line 555 of file libvpxenc.c.

const AVOption options[]
static
Initial value:
{
{ "cpu-used", "Quality/Speed ratio modifier", OFFSET(cpu_used), AV_OPT_TYPE_INT, {INT_MIN}, INT_MIN, INT_MAX, VE},
{ "auto-alt-ref", "Enable use of alternate reference "
"frames (2-pass only)", OFFSET(auto_alt_ref), AV_OPT_TYPE_INT, {-1}, -1, 1, VE},
{ "lag-in-frames", "Number of frames to look ahead for "
"alternate reference frame selection", OFFSET(lag_in_frames), AV_OPT_TYPE_INT, {-1}, -1, INT_MAX, VE},
{ "arnr-maxframes", "altref noise reduction max frame count", OFFSET(arnr_max_frames), AV_OPT_TYPE_INT, {-1}, -1, INT_MAX, VE},
{ "arnr-strength", "altref noise reduction filter strength", OFFSET(arnr_strength), AV_OPT_TYPE_INT, {-1}, -1, INT_MAX, VE},
{ "arnr-type", "altref noise reduction filter type", OFFSET(arnr_type), AV_OPT_TYPE_INT, {-1}, -1, INT_MAX, VE, "arnr_type"},
{ "backward", NULL, 0, AV_OPT_TYPE_CONST, {1}, 0, 0, VE, "arnr_type" },
{ "forward", NULL, 0, AV_OPT_TYPE_CONST, {2}, 0, 0, VE, "arnr_type" },
{ "centered", NULL, 0, AV_OPT_TYPE_CONST, {3}, 0, 0, VE, "arnr_type" },
{ "deadline", "Time to spend encoding, in microseconds.", OFFSET(deadline), AV_OPT_TYPE_INT, {VPX_DL_GOOD_QUALITY}, INT_MIN, INT_MAX, VE, "quality"},
{ "best", NULL, 0, AV_OPT_TYPE_CONST, {VPX_DL_BEST_QUALITY}, 0, 0, VE, "quality"},
{ "good", NULL, 0, AV_OPT_TYPE_CONST, {VPX_DL_GOOD_QUALITY}, 0, 0, VE, "quality"},
{ "realtime", NULL, 0, AV_OPT_TYPE_CONST, {VPX_DL_REALTIME}, 0, 0, VE, "quality"},
{ "error-resilient", "Error resilience configuration", OFFSET(error_resilient), AV_OPT_TYPE_FLAGS, {0}, INT_MIN, INT_MAX, VE, "er"},
{ NULL }
}

Definition at line 525 of file libvpxenc.c.

Definition at line 556 of file libvpxenc.c.