FFmpeg
Data Structures | Macros | Functions | Variables
dvenc.c File Reference

DV encoder. More...

#include "config.h"
#include "libavutil/attributes.h"
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "libavutil/pixdesc.h"
#include "avcodec.h"
#include "dv.h"
#include "dv_profile_internal.h"
#include "dv_tablegen.h"
#include "fdctdsp.h"
#include "internal.h"
#include "mathops.h"
#include "me_cmp.h"
#include "pixblockdsp.h"
#include "put_bits.h"

Go to the source code of this file.

Data Structures

struct  EncBlockInfo
 

Macros

#define DV100_SACRIFICE_QUALITY_FOR_SPEED   1
 
#define DV100_ENABLE_FINER   1
 
#define DV100_MAKE_QLEVEL(qno, cno)   ((qno<<2) | (cno))
 
#define DV100_QLEVEL_QNO(qlevel)   (qlevel>>2)
 
#define DV100_QLEVEL_CNO(qlevel)   (qlevel&0x3)
 
#define DV100_NUM_QLEVELS   31
 
#define VE   AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
 
#define OFFSET(x)   offsetof(DVVideoContext, x)
 

Functions

static av_cold int dvvideo_encode_init (AVCodecContext *avctx)
 
static av_always_inline int dv_rl2vlc (int run, int l, int sign, uint32_t *vlc)
 
static av_always_inline int dv_rl2vlc_size (int run, int l)
 
static av_always_inline PutBitContextdv_encode_ac (EncBlockInfo *bi, PutBitContext *pb_pool, PutBitContext *pb_end)
 
static av_always_inline int dv_guess_dct_mode (DVVideoContext *s, uint8_t *data, ptrdiff_t linesize)
 
static av_always_inline int dv_set_class_number_sd (DVVideoContext *s, int16_t *blk, EncBlockInfo *bi, const uint8_t *zigzag_scan, const int *weight, int bias)
 
static void dv_set_class_number_hd (DVVideoContext *s, int16_t *blk, EncBlockInfo *bi, const uint8_t *zigzag_scan, const int *weight, int bias)
 
static av_always_inline int dv_init_enc_block (EncBlockInfo *bi, uint8_t *data, int linesize, DVVideoContext *s, int chroma)
 
static av_always_inline int dv100_quantize (int level, int qsinv)
 
static int dv100_actual_quantize (EncBlockInfo *b, int qlevel)
 
static void dv_guess_qnos_hd (EncBlockInfo *blks, int *qnos)
 
static void dv_guess_qnos (EncBlockInfo *blks, int *qnos)
 
static void dv_revise_cnos (uint8_t *dif, EncBlockInfo *blk, const AVDVProfile *profile)
 
static int dv_encode_video_segment (AVCodecContext *avctx, void *arg)
 
static int dv_write_pack (enum dv_pack_type pack_id, DVVideoContext *c, uint8_t *buf)
 
static int dv_write_dif_id (enum dv_section_type t, uint8_t chan_num, uint8_t seq_num, uint8_t dif_num, uint8_t *buf)
 
static int dv_write_ssyb_id (uint8_t syb_num, uint8_t fr, uint8_t *buf)
 
static void dv_format_frame (DVVideoContext *c, uint8_t *buf)
 
static int dvvideo_encode_frame (AVCodecContext *c, AVPacket *pkt, const AVFrame *frame, int *got_packet)
 

Variables

static const int vs_total_ac_bits_hd = (68 * 6 + 52*2) * 5
 
static const int vs_total_ac_bits = (100 * 4 + 68 * 2) * 5
 
static const int mb_area_start [5] = { 1, 6, 21, 43, 64 }
 
static const int dv_weight_bits = 18
 
static const int dv_weight_88 [64]
 
static const int dv_weight_248 [64]
 
static const uint8_t dv100_qlevels [DV100_NUM_QLEVELS]
 
static const int dv100_min_bias = 0
 
static const int dv100_chroma_bias = 0
 
static const int dv100_starting_qno = 1
 
static const int dv100_qlevel_inc = 4
 
static const int dv100_qstep_bits = 16
 
static const int dv100_qstep_inv [16]
 
static const int dv100_weight_shift = 16
 
static const int dv_weight_1080 [2][64]
 
static const int dv_weight_720 [2][64]
 
static const AVOption dv_options []
 
static const AVClass dvvideo_encode_class
 
AVCodec ff_dvvideo_encoder
 

Detailed Description

DV encoder.

Definition in file dvenc.c.

Macro Definition Documentation

#define DV100_SACRIFICE_QUALITY_FOR_SPEED   1

Definition at line 251 of file dvenc.c.

#define DV100_ENABLE_FINER   1

Definition at line 252 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

#define DV100_MAKE_QLEVEL (   qno,
  cno 
)    ((qno<<2) | (cno))

Definition at line 255 of file dvenc.c.

#define DV100_QLEVEL_QNO (   qlevel)    (qlevel>>2)

Definition at line 256 of file dvenc.c.

Referenced by dv100_actual_quantize(), and dv_guess_qnos_hd().

#define DV100_QLEVEL_CNO (   qlevel)    (qlevel&0x3)

Definition at line 257 of file dvenc.c.

Referenced by dv100_actual_quantize().

#define DV100_NUM_QLEVELS   31

Definition at line 259 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

Definition at line 1201 of file dvenc.c.

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

Definition at line 1202 of file dvenc.c.

Function Documentation

static av_cold int dvvideo_encode_init ( AVCodecContext avctx)
static

Definition at line 47 of file dvenc.c.

static av_always_inline int dv_rl2vlc ( int  run,
int  l,
int  sign,
uint32_t *  vlc 
)
static

Definition at line 135 of file dvenc.c.

Referenced by dv_encode_ac().

static av_always_inline int dv_rl2vlc_size ( int  run,
int  l 
)
static

Definition at line 141 of file dvenc.c.

Referenced by dv100_actual_quantize(), dv_guess_qnos(), and dv_set_class_number_sd().

static av_always_inline PutBitContext* dv_encode_ac ( EncBlockInfo bi,
PutBitContext pb_pool,
PutBitContext pb_end 
)
static

Definition at line 166 of file dvenc.c.

Referenced by dv_encode_video_segment().

static av_always_inline int dv_guess_dct_mode ( DVVideoContext s,
uint8_t data,
ptrdiff_t  linesize 
)
static

Definition at line 212 of file dvenc.c.

Referenced by dv_encode_video_segment(), and dv_init_enc_block().

static av_always_inline int dv_set_class_number_sd ( DVVideoContext s,
int16_t *  blk,
EncBlockInfo bi,
const uint8_t zigzag_scan,
const int weight,
int  bias 
)
static

Definition at line 361 of file dvenc.c.

Referenced by dv_init_enc_block().

static void dv_set_class_number_hd ( DVVideoContext s,
int16_t *  blk,
EncBlockInfo bi,
const uint8_t zigzag_scan,
const int weight,
int  bias 
)
inlinestatic

Definition at line 445 of file dvenc.c.

Referenced by dv_init_enc_block().

static av_always_inline int dv_init_enc_block ( EncBlockInfo bi,
uint8_t data,
int  linesize,
DVVideoContext s,
int  chroma 
)
static

Definition at line 502 of file dvenc.c.

Referenced by dv_encode_video_segment().

static av_always_inline int dv100_quantize ( int  level,
int  qsinv 
)
static

Definition at line 553 of file dvenc.c.

Referenced by dv100_actual_quantize().

static int dv100_actual_quantize ( EncBlockInfo b,
int  qlevel 
)
static

Definition at line 566 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

static void dv_guess_qnos_hd ( EncBlockInfo blks,
int qnos 
)
inlinestatic

Definition at line 604 of file dvenc.c.

Referenced by dv_encode_video_segment().

static void dv_guess_qnos ( EncBlockInfo blks,
int qnos 
)
inlinestatic

Definition at line 746 of file dvenc.c.

Referenced by dv_encode_video_segment().

static void dv_revise_cnos ( uint8_t dif,
EncBlockInfo blk,
const AVDVProfile profile 
)
inlinestatic

Definition at line 820 of file dvenc.c.

Referenced by dv_encode_video_segment().

static int dv_encode_video_segment ( AVCodecContext avctx,
void arg 
)
static

Definition at line 838 of file dvenc.c.

Referenced by dvvideo_encode_frame().

static int dv_write_pack ( enum dv_pack_type  pack_id,
DVVideoContext c,
uint8_t buf 
)
inlinestatic

Definition at line 997 of file dvenc.c.

Referenced by dv_format_frame().

static int dv_write_dif_id ( enum dv_section_type  t,
uint8_t  chan_num,
uint8_t  seq_num,
uint8_t  dif_num,
uint8_t buf 
)
inlinestatic

Definition at line 1081 of file dvenc.c.

Referenced by dv_format_frame().

static int dv_write_ssyb_id ( uint8_t  syb_num,
uint8_t  fr,
uint8_t buf 
)
inlinestatic

Definition at line 1097 of file dvenc.c.

Referenced by dv_format_frame().

static void dv_format_frame ( DVVideoContext c,
uint8_t buf 
)
static

Definition at line 1117 of file dvenc.c.

Referenced by dvvideo_encode_frame().

static int dvvideo_encode_frame ( AVCodecContext c,
AVPacket pkt,
const AVFrame frame,
int got_packet 
)
static

Definition at line 1169 of file dvenc.c.

Variable Documentation

const int vs_total_ac_bits_hd = (68 * 6 + 52*2) * 5
static

Definition at line 90 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

const int vs_total_ac_bits = (100 * 4 + 68 * 2) * 5
static

Definition at line 91 of file dvenc.c.

Referenced by dv_encode_video_segment(), and dv_guess_qnos().

const int mb_area_start[5] = { 1, 6, 21, 43, 64 }
static

Definition at line 92 of file dvenc.c.

Referenced by dv_guess_qnos(), and dv_set_class_number_sd().

const int dv_weight_bits = 18
static

Definition at line 227 of file dvenc.c.

Referenced by dv_set_class_number_sd().

const int dv_weight_88[64]
static
Initial value:
= {
131072, 257107, 257107, 242189, 252167, 242189, 235923, 237536,
237536, 235923, 229376, 231390, 223754, 231390, 229376, 222935,
224969, 217965, 217965, 224969, 222935, 200636, 218652, 211916,
212325, 211916, 218652, 200636, 188995, 196781, 205965, 206433,
206433, 205965, 196781, 188995, 185364, 185364, 200636, 200704,
200636, 185364, 185364, 174609, 180568, 195068, 195068, 180568,
174609, 170091, 175557, 189591, 175557, 170091, 165371, 170627,
170627, 165371, 160727, 153560, 160727, 144651, 144651, 136258,
}

Definition at line 228 of file dvenc.c.

Referenced by dv_init_enc_block().

const int dv_weight_248[64]
static
Initial value:
= {
131072, 262144, 257107, 257107, 242189, 242189, 242189, 242189,
237536, 237536, 229376, 229376, 200636, 200636, 224973, 224973,
223754, 223754, 235923, 235923, 229376, 229376, 217965, 217965,
211916, 211916, 196781, 196781, 185364, 185364, 206433, 206433,
211916, 211916, 222935, 222935, 200636, 200636, 205964, 205964,
200704, 200704, 180568, 180568, 175557, 175557, 195068, 195068,
185364, 185364, 188995, 188995, 174606, 174606, 175557, 175557,
170627, 170627, 153560, 153560, 165371, 165371, 144651, 144651,
}

Definition at line 238 of file dvenc.c.

Referenced by dv_init_enc_block().

const uint8_t dv100_qlevels[DV100_NUM_QLEVELS]
static

Definition at line 269 of file dvenc.c.

Referenced by dv100_actual_quantize(), and dv_guess_qnos_hd().

const int dv100_min_bias = 0
static

Definition at line 304 of file dvenc.c.

Referenced by dv_init_enc_block().

const int dv100_chroma_bias = 0
static

Definition at line 305 of file dvenc.c.

Referenced by dv_init_enc_block().

const int dv100_starting_qno = 1
static

Definition at line 306 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

const int dv100_qlevel_inc = 4
static

Definition at line 309 of file dvenc.c.

Referenced by dv_guess_qnos_hd().

const int dv100_qstep_bits = 16
static

Definition at line 315 of file dvenc.c.

Referenced by dv100_quantize().

const int dv100_qstep_inv[16]
static
Initial value:
= {
65536, 65536, 32768, 21845, 16384, 13107, 10923, 9362, 8192, 4096, 3641, 3277, 2979, 2731, 2341, 1260,
}

Definition at line 316 of file dvenc.c.

Referenced by dv100_actual_quantize().

const int dv100_weight_shift = 16
static

Definition at line 322 of file dvenc.c.

const int dv_weight_1080[2][64]
static
Initial value:
= {
{ 8192, 65536, 65536, 61681, 61681, 61681, 58254, 58254,
58254, 58254, 58254, 58254, 55188, 58254, 58254, 55188,
55188, 55188, 55188, 55188, 55188, 24966, 27594, 26214,
26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
25575, 25575, 24385, 23831, 23302, 23302, 24966, 24966,
24966, 23302, 23302, 21845, 22795, 24385, 24385, 22795,
21845, 21400, 21845, 23831, 21845, 21400, 10382, 10700,
10700, 10382, 10082, 9620, 10082, 9039, 9039, 8525, },
{ 8192, 65536, 65536, 61681, 61681, 61681, 41943, 41943,
41943, 41943, 40330, 41943, 40330, 41943, 40330, 40330,
40330, 38836, 38836, 40330, 40330, 24966, 27594, 26214,
26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
25575, 25575, 24385, 23831, 11523, 11523, 12483, 12483,
12483, 11523, 11523, 10923, 11275, 12193, 12193, 11275,
10923, 5323, 5490, 5924, 5490, 5323, 5165, 5323,
5323, 5165, 5017, 4788, 5017, 4520, 4520, 4263, }
}

Definition at line 323 of file dvenc.c.

Referenced by dv_init_enc_block().

const int dv_weight_720[2][64]
static
Initial value:
= {
{ 8192, 65536, 65536, 61681, 61681, 61681, 58254, 58254,
58254, 58254, 58254, 58254, 55188, 58254, 58254, 55188,
55188, 55188, 55188, 55188, 55188, 24966, 27594, 26214,
26214, 26214, 27594, 24966, 23831, 24385, 25575, 25575,
25575, 25575, 24385, 23831, 15420, 15420, 16644, 16644,
16644, 15420, 15420, 10923, 11398, 12193, 12193, 11398,
10923, 10700, 10923, 11916, 10923, 10700, 5191, 5350,
5350, 5191, 5041, 4810, 5041, 4520, 4520, 4263, },
{ 8192, 43691, 43691, 40330, 40330, 40330, 29127, 29127,
29127, 29127, 29127, 29127, 27594, 29127, 29127, 27594,
27594, 27594, 27594, 27594, 27594, 12483, 13797, 13107,
13107, 13107, 13797, 12483, 11916, 12193, 12788, 12788,
12788, 12788, 12193, 11916, 5761, 5761, 6242, 6242,
6242, 5761, 5761, 5461, 5638, 5461, 6096, 5638,
5461, 2661, 2745, 2962, 2745, 2661, 2583, 2661,
2661, 2583, 2509, 2394, 2509, 2260, 2260, 2131, }
}

Definition at line 342 of file dvenc.c.

Referenced by dv_init_enc_block().

const AVOption dv_options[]
static
Initial value:
= {
{ "quant_deadzone", "Quantizer dead zone", OFFSET(quant_deadzone), AV_OPT_TYPE_INT, { .i64 = 7 }, 0, 1024, VE },
{ NULL },
}
#define NULL
Definition: coverity.c:32
#define VE
Definition: dvenc.c:1201
#define OFFSET(x)
Definition: dvenc.c:1202

Definition at line 1203 of file dvenc.c.

const AVClass dvvideo_encode_class
static
Initial value:
= {
.class_name = "dvvideo encoder",
.item_name = av_default_item_name,
.option = dv_options,
}
static const AVOption dv_options[]
Definition: dvenc.c:1203
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:191

Definition at line 1208 of file dvenc.c.

AVCodec ff_dvvideo_encoder
Initial value:
= {
.name = "dvvideo",
.long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"),
.priv_data_size = sizeof(DVVideoContext),
.pix_fmts = (const enum AVPixelFormat[]) {
},
.priv_class = &dvvideo_encode_class,
}
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define AV_CODEC_CAP_INTRA_ONLY
Codec is intra only.
Definition: avcodec.h:1070
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
Definition: avcodec.h:1040
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
Definition: pixfmt.h:70
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
Definition: avcodec.h:1044
static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
Definition: dvenc.c:47
static enum AVPixelFormat pix_fmts[]
Definition: libkvazaar.c:275
static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt, const AVFrame *frame, int *got_packet)
Definition: dvenc.c:1169
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:66
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
Definition: pixfmt.h:73
static const AVClass dvvideo_encode_class
Definition: dvenc.c:1208
AVPixelFormat
Pixel format.
Definition: pixfmt.h:64

Definition at line 1215 of file dvenc.c.