FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
vc2enc.c File Reference
#include "libavutil/ffversion.h"
#include "libavutil/pixdesc.h"
#include "libavutil/opt.h"
#include "dirac.h"
#include "put_bits.h"
#include "internal.h"
#include "vc2enc_dwt.h"
#include "diractab.h"

Go to the source code of this file.

Data Structures

struct  SubBand
 
struct  Plane
 
struct  SliceArgs
 
struct  TransformArgs
 
struct  VC2EncContext
 

Macros

#define MAX_QUANT_INDEX   100
 
#define COEF_LUT_TAB   2048
 
#define QUANT(c)
 
#define VC2ENC_FLAGS   (AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
 

Enumerations

enum  VC2_QM { VC2_QM_DEF = 0, VC2_QM_COL, VC2_QM_FLAT, VC2_QM_NB }
 

Functions

static av_always_inline void put_padding (PutBitContext *pb, int bytes)
 
static av_always_inline void put_vc2_ue_uint (PutBitContext *pb, uint32_t val)
 
static av_always_inline int count_vc2_ue_uint (uint16_t val)
 
static av_always_inline void get_vc2_ue_uint (uint16_t val, uint8_t *nbits, uint32_t *eval)
 
static void encode_parse_info (VC2EncContext *s, enum DiracParseCodes pcode)
 
static void encode_parse_params (VC2EncContext *s)
 
static void encode_frame_size (VC2EncContext *s)
 
static void encode_sample_fmt (VC2EncContext *s)
 
static void encode_scan_format (VC2EncContext *s)
 
static void encode_frame_rate (VC2EncContext *s)
 
static void encode_aspect_ratio (VC2EncContext *s)
 
static void encode_clean_area (VC2EncContext *s)
 
static void encode_signal_range (VC2EncContext *s)
 
static void encode_color_spec (VC2EncContext *s)
 
static void encode_source_params (VC2EncContext *s)
 
static void encode_seq_header (VC2EncContext *s)
 
static void encode_picture_header (VC2EncContext *s)
 
static void encode_slice_params (VC2EncContext *s)
 
static void init_custom_qm (VC2EncContext *s)
 
static void encode_quant_matrix (VC2EncContext *s)
 
static void encode_transform_params (VC2EncContext *s)
 
static void encode_wavelet_transform (VC2EncContext *s)
 
static void encode_picture_start (VC2EncContext *s)
 
static av_always_inline void coeff_quantize_get (qcoef coeff, int qfactor, uint8_t *len, uint32_t *eval)
 
static av_always_inline void coeff_quantize_encode (PutBitContext *pb, qcoef coeff, int qfactor)
 
static void encode_subband (VC2EncContext *s, PutBitContext *pb, int sx, int sy, SubBand *b, int quant)
 
static int count_hq_slice (VC2EncContext *s, int slice_x, int slice_y, int quant_idx)
 
static int rate_control (AVCodecContext *avctx, void *arg)
 
static void calc_slice_sizes (VC2EncContext *s)
 
static int encode_hq_slice (AVCodecContext *avctx, void *arg)
 
static int encode_slices (VC2EncContext *s)
 
static int dwt_plane (AVCodecContext *avctx, void *arg)
 
static void encode_frame (VC2EncContext *s, const AVFrame *frame, const char *aux_data, int field)
 
static av_cold int vc2_encode_frame (AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 
static av_cold int vc2_encode_end (AVCodecContext *avctx)
 
static av_cold int vc2_encode_init (AVCodecContext *avctx)
 

Variables

const uint8_t vc2_qm_col_tab [][4]
 
const uint8_t vc2_qm_flat_tab [][4]
 
static const AVOption vc2enc_options []
 
static const AVClass vc2enc_class
 
static const AVCodecDefault vc2enc_defaults []
 
static enum AVPixelFormat allowed_pix_fmts []
 
AVCodec ff_vc2_encoder
 

Macro Definition Documentation

#define MAX_QUANT_INDEX   100

Definition at line 33 of file vc2enc.c.

Referenced by vc2_encode_init().

#define COEF_LUT_TAB   2048

Definition at line 35 of file vc2enc.c.

Referenced by count_hq_slice(), encode_subband(), and vc2_encode_init().

#define QUANT (   c)
Value:
c <<= 2; \
c /= qfactor; \
static double c[64]

Definition at line 542 of file vc2enc.c.

Referenced by coeff_quantize_encode(), coeff_quantize_get(), and count_hq_slice().

#define VC2ENC_FLAGS   (AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)

Definition at line 1147 of file vc2enc.c.

Enumeration Type Documentation

enum VC2_QM
Enumerator
VC2_QM_DEF 
VC2_QM_COL 
VC2_QM_FLAT 
VC2_QM_NB 

Definition at line 37 of file vc2enc.c.

Function Documentation

static av_always_inline void put_padding ( PutBitContext pb,
int  bytes 
)
static

Definition at line 137 of file vc2enc.c.

Referenced by encode_hq_slice().

static av_always_inline void put_vc2_ue_uint ( PutBitContext pb,
uint32_t  val 
)
static
static av_always_inline int count_vc2_ue_uint ( uint16_t  val)
static

Definition at line 178 of file vc2enc.c.

Referenced by count_hq_slice().

static av_always_inline void get_vc2_ue_uint ( uint16_t  val,
uint8_t nbits,
uint32_t *  eval 
)
static

Definition at line 194 of file vc2enc.c.

Referenced by coeff_quantize_get().

static void encode_parse_info ( VC2EncContext s,
enum DiracParseCodes  pcode 
)
static

Definition at line 226 of file vc2enc.c.

Referenced by encode_frame().

static void encode_parse_params ( VC2EncContext s)
static

Definition at line 258 of file vc2enc.c.

Referenced by encode_seq_header().

static void encode_frame_size ( VC2EncContext s)
static

Definition at line 267 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_sample_fmt ( VC2EncContext s)
static

Definition at line 278 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_scan_format ( VC2EncContext s)
static

Definition at line 294 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_frame_rate ( VC2EncContext s)
static

Definition at line 302 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_aspect_ratio ( VC2EncContext s)
static

Definition at line 314 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_clean_area ( VC2EncContext s)
static

Definition at line 326 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_signal_range ( VC2EncContext s)
static

Definition at line 332 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_color_spec ( VC2EncContext s)
static

Definition at line 362 of file vc2enc.c.

Referenced by encode_source_params().

static void encode_source_params ( VC2EncContext s)
static

Definition at line 407 of file vc2enc.c.

Referenced by encode_seq_header().

static void encode_seq_header ( VC2EncContext s)
static

Definition at line 420 of file vc2enc.c.

Referenced by encode_frame().

static void encode_picture_header ( VC2EncContext s)
static

Definition at line 430 of file vc2enc.c.

Referenced by encode_picture_start().

static void encode_slice_params ( VC2EncContext s)
static

Definition at line 437 of file vc2enc.c.

Referenced by encode_transform_params().

static void init_custom_qm ( VC2EncContext s)
static

Definition at line 462 of file vc2enc.c.

Referenced by encode_quant_matrix().

static void encode_quant_matrix ( VC2EncContext s)
static

Definition at line 491 of file vc2enc.c.

Referenced by encode_transform_params().

static void encode_transform_params ( VC2EncContext s)
static

Definition at line 516 of file vc2enc.c.

Referenced by encode_wavelet_transform().

static void encode_wavelet_transform ( VC2EncContext s)
static

Definition at line 526 of file vc2enc.c.

Referenced by encode_picture_start().

static void encode_picture_start ( VC2EncContext s)
static

Definition at line 534 of file vc2enc.c.

Referenced by encode_frame().

static av_always_inline void coeff_quantize_get ( qcoef  coeff,
int  qfactor,
uint8_t len,
uint32_t *  eval 
)
static

Definition at line 546 of file vc2enc.c.

Referenced by vc2_encode_init().

static av_always_inline void coeff_quantize_encode ( PutBitContext pb,
qcoef  coeff,
int  qfactor 
)
static

Definition at line 557 of file vc2enc.c.

Referenced by encode_subband().

static void encode_subband ( VC2EncContext s,
PutBitContext pb,
int  sx,
int  sy,
SubBand b,
int  quant 
)
static

Definition at line 567 of file vc2enc.c.

Referenced by encode_hq_slice().

static int count_hq_slice ( VC2EncContext s,
int  slice_x,
int  slice_y,
int  quant_idx 
)
static

Definition at line 594 of file vc2enc.c.

Referenced by rate_control().

static int rate_control ( AVCodecContext avctx,
void arg 
)
static

Definition at line 655 of file vc2enc.c.

Referenced by calc_slice_sizes().

static void calc_slice_sizes ( VC2EncContext s)
static

Definition at line 688 of file vc2enc.c.

Referenced by encode_frame().

static int encode_hq_slice ( AVCodecContext avctx,
void arg 
)
static

Definition at line 709 of file vc2enc.c.

Referenced by encode_slices().

static int encode_slices ( VC2EncContext s)
static

Definition at line 760 of file vc2enc.c.

Referenced by encode_frame().

static int dwt_plane ( AVCodecContext avctx,
void arg 
)
static

Definition at line 824 of file vc2enc.c.

Referenced by encode_frame().

static void encode_frame ( VC2EncContext s,
const AVFrame frame,
const char *  aux_data,
int  field 
)
static

Definition at line 881 of file vc2enc.c.

Referenced by vc2_encode_frame().

static av_cold int vc2_encode_frame ( AVCodecContext avctx,
AVPacket avpkt,
const AVFrame frame,
int *  got_packet_ptr 
)
static

Definition at line 922 of file vc2enc.c.

static av_cold int vc2_encode_end ( AVCodecContext avctx)
static

Definition at line 972 of file vc2enc.c.

Referenced by vc2_encode_init().

static av_cold int vc2_encode_init ( AVCodecContext avctx)
static

Definition at line 990 of file vc2enc.c.

Variable Documentation

const uint8_t vc2_qm_col_tab[][4]
Initial value:
= {
{20, 9, 15, 4},
{ 0, 6, 6, 4},
{ 0, 3, 3, 5},
{ 0, 3, 5, 1},
{ 0, 11, 10, 11}
}

Definition at line 446 of file vc2enc.c.

Referenced by init_custom_qm().

const uint8_t vc2_qm_flat_tab[][4]
Initial value:
= {
{ 0, 0, 0, 0},
{ 0, 0, 0, 0},
{ 0, 0, 0, 0},
{ 0, 0, 0, 0},
{ 0, 0, 0, 0}
}

Definition at line 454 of file vc2enc.c.

Referenced by init_custom_qm().

const AVOption vc2enc_options[]
static
Initial value:
= {
{"tolerance", "Max undershoot in percent", 0x42, AV_OPT_TYPE_DOUBLE, {.dbl = 10.0f}, 0.0f, 45.0f, VC2ENC_FLAGS, "tolerance"},
{"slice_width", "Slice width", 0x42, AV_OPT_TYPE_INT, {.i64 = 128}, 32, 1024, VC2ENC_FLAGS, "slice_width"},
{"slice_height", "Slice height", 0x42, AV_OPT_TYPE_INT, {.i64 = 64}, 8, 1024, VC2ENC_FLAGS, "slice_height"},
{"wavelet_depth", "Transform depth", 0x42, AV_OPT_TYPE_INT, {.i64 = 5}, 1, 5, VC2ENC_FLAGS, "wavelet_depth"},
{"wavelet_type", "Transform type", 0x42, AV_OPT_TYPE_INT, {.i64 = VC2_TRANSFORM_9_7}, 0, VC2_TRANSFORMS_NB, VC2ENC_FLAGS, "wavelet_idx"},
{"9_7", "Deslauriers-Dubuc (9,7)", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_TRANSFORM_9_7}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "wavelet_idx"},
{"5_3", "LeGall (5,3)", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_TRANSFORM_5_3}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "wavelet_idx"},
{"qm", "Custom quantization matrix", 0x42, AV_OPT_TYPE_INT, {.i64 = VC2_QM_DEF}, 0, VC2_QM_NB, VC2ENC_FLAGS, "quant_matrix"},
{"default", "Default from the specifications", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_QM_DEF}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "quant_matrix"},
{"color", "Prevents low bitrate discoloration", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_QM_COL}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "quant_matrix"},
{"flat", "Optimize for PSNR", 0, AV_OPT_TYPE_CONST, {.i64 = VC2_QM_FLAT}, INT_MIN, INT_MAX, VC2ENC_FLAGS, "quant_matrix"},
{NULL}
}
#define NULL
Definition: coverity.c:32
#define VC2ENC_FLAGS
Definition: vc2enc.c:1147

Definition at line 1148 of file vc2enc.c.

const AVClass vc2enc_class
static
Initial value:
= {
.class_name = "SMPTE VC-2 encoder",
.option = vc2enc_options,
.item_name = av_default_item_name,
}
#define LIBAVUTIL_VERSION_INT
Definition: version.h:70
av_default_item_name
static const AVOption vc2enc_options[]
Definition: vc2enc.c:1148

Definition at line 1163 of file vc2enc.c.

const AVCodecDefault vc2enc_defaults[]
static
Initial value:
= {
{ "b", "600000000" },
{ NULL },
}
#define NULL
Definition: coverity.c:32

Definition at line 1171 of file vc2enc.c.

enum AVPixelFormat allowed_pix_fmts[]
static
Initial value:
= {
}
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
Definition: pixfmt.h:68
#define AV_PIX_FMT_YUV420P12
Definition: pixfmt.h:334
#define AV_PIX_FMT_YUV422P12
Definition: pixfmt.h:335
#define AV_PIX_FMT_YUV444P10
Definition: pixfmt.h:333
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:67
#define AV_PIX_FMT_YUV420P10
Definition: pixfmt.h:330
#define AV_PIX_FMT_YUV422P10
Definition: pixfmt.h:331
#define AV_PIX_FMT_YUV444P12
Definition: pixfmt.h:337
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:63

Definition at line 1176 of file vc2enc.c.

AVCodec ff_vc2_encoder
Initial value:
= {
.name = "vc2",
.long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-2"),
.priv_data_size = sizeof(VC2EncContext),
.close = vc2_encode_end,
.capabilities = AV_CODEC_CAP_SLICE_THREADS,
.encode2 = vc2_encode_frame,
.priv_class = &vc2enc_class,
}
static av_cold int vc2_encode_init(AVCodecContext *avctx)
Definition: vc2enc.c:990
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
static av_cold int vc2_encode_end(AVCodecContext *avctx)
Definition: vc2enc.c:972
static av_cold int vc2_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
Definition: vc2enc.c:922
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:176
static const AVCodecDefault vc2enc_defaults[]
Definition: vc2enc.c:1171
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:923
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:262
static enum AVPixelFormat allowed_pix_fmts[]
Definition: vc2enc.c:1176
static const AVCodecDefault defaults[]
Definition: dcaenc.c:975
static const AVClass vc2enc_class
Definition: vc2enc.c:1163

Definition at line 1183 of file vc2enc.c.