37#define SSIZE_ROUND(b) (FFALIGN((b), s->size_scaler) + 4 + s->prefix_bytes)
40#define SLICE_REDIST_TOTAL 150
202 for (
unsigned i = 2;
i < 256; ++
i) {
242 uint32_t cur_pos, dist;
255 dist = cur_pos -
s->next_parse_offset;
256 AV_WB32(
s->pb.buf +
s->next_parse_offset + 5, dist);
257 s->next_parse_offset = cur_pos;
263 s->last_parse_code = pcode;
284 if (!
s->strict_compliance) {
295 if (!
s->strict_compliance) {
297 if (
s->chroma_x_shift == 1 &&
s->chroma_y_shift == 0)
299 else if (
s->chroma_x_shift == 1 &&
s->chroma_y_shift == 1)
311 if (!
s->strict_compliance)
319 if (!
s->strict_compliance) {
331 if (!
s->strict_compliance) {
349 if (!
s->strict_compliance)
358 if (!
s->strict_compliance) {
456 int level, orientation;
458 if (
s->wavelet_depth <= 4 &&
s->quant_matrix ==
VC2_QM_DEF) {
459 s->custom_quant_matrix = 0;
469 s->custom_quant_matrix = 1;
473 for (orientation = 0; orientation < 4; orientation++) {
482 for (orientation = 0; orientation < 4; orientation++) {
488 for (orientation = 0; orientation < 4; orientation++) {
500 if (
s->custom_quant_matrix) {
536#define QUANT(c, mul, add, shift) (((mul) * (c) + (add)) >> (shift))
544 const int left =
b->width * (sx+0) /
s->num_x;
545 const int right =
b->width * (sx+1) /
s->num_x;
546 const int top =
b->height * (sy+0) /
s->num_y;
547 const int bottom =
b->height * (sy+1) /
s->num_y;
550 const uint64_t q_m = ((uint64_t)(
s->qmagic_lut[
quant][0])) << 2;
551 const uint64_t q_a =
s->qmagic_lut[
quant][1];
554 for (y = top; y < bottom; y++) {
555 for (x =
left; x < right; x++) {
572 if (slice->
cache[quant_idx])
573 return slice->
cache[quant_idx];
575 bits += 8*
s->prefix_bytes;
579 for (orientation = !!
level; orientation < 4; orientation++)
580 quants[
level][orientation] =
FFMAX(quant_idx -
s->quant[
level][orientation], 0);
582 for (p = 0; p < 3; p++) {
583 int bytes_start, bytes_len, pad_s, pad_c;
584 bytes_start =
bits >> 3;
587 for (orientation = !!
level; orientation < 4; orientation++) {
590 const int q_idx = quants[
level][orientation];
591 const uint64_t q_m = ((uint64_t)
s->qmagic_lut[q_idx][0]) << 2;
592 const uint64_t q_a =
s->qmagic_lut[q_idx][1];
595 const int left =
b->width * slice->
x /
s->num_x;
596 const int right =
b->width *(slice->
x+1) /
s->num_x;
597 const int top =
b->height * slice->
y /
s->num_y;
598 const int bottom =
b->height *(slice->
y+1) /
s->num_y;
602 for (y = top; y < bottom; y++) {
603 for (x =
left; x < right; x++) {
604 uint32_t c_abs =
QUANT(
FFABS(buf[x]), q_m, q_a, q_s);
613 bytes_len = (
bits >> 3) - bytes_start - 1;
614 pad_s =
FFALIGN(bytes_len,
s->size_scaler)/
s->size_scaler;
615 pad_c = (pad_s*
s->size_scaler) - bytes_len;
633 int quant_buf[2] = {-1, -1};
636 while ((
bits > top) || (
bits < bottom)) {
637 const int signed_step =
bits > top ? +step : -step;
640 if (quant_buf[1] ==
quant) {
645 step =
av_clip(step/2, 1, (
s->q_ceil-1)/2);
646 quant_buf[1] = quant_buf[0];
647 quant_buf[0] =
quant;
657 int i, j, slice_x, slice_y, bytes_left = 0;
659 int64_t total_bytes_needed = 0;
666 for (slice_y = 0; slice_y <
s->num_y; slice_y++) {
667 for (slice_x = 0; slice_x <
s->num_x; slice_x++) {
668 SliceArgs *args = &enc_args[
s->num_x*slice_y + slice_x];
674 memset(args->
cache, 0,
s->q_ceil*
sizeof(*args->
cache));
682 for (
i = 0;
i <
s->num_x*
s->num_y;
i++) {
684 bytes_left += args->
bytes;
685 for (j = 0; j < slice_redist_range; j++) {
686 if (args->
bytes > bytes_top[j]) {
687 bytes_top[j] = args->
bytes;
694 bytes_left =
s->frame_max_bytes - bytes_left;
697 while (bytes_left > 0) {
699 for (
i = 0;
i < slice_redist_range;
i++) {
701 int bits, bytes,
diff, prev_bytes, new_idx;
704 if (!top_loc[
i] || !top_loc[
i]->quant_idx)
707 prev_bytes = args->
bytes;
711 diff = bytes - prev_bytes;
712 if ((bytes_left -
diff) > 0) {
723 for (
i = 0;
i <
s->num_x*
s->num_y;
i++) {
725 total_bytes_needed += args->
bytes;
729 return total_bytes_needed;
738 const int slice_x = slice_dat->
x;
739 const int slice_y = slice_dat->
y;
740 const int quant_idx = slice_dat->
quant_idx;
741 const int slice_bytes_max = slice_dat->
bytes;
743 int p,
level, orientation;
746 memset(slice_dat->
buf, 0,
s->prefix_bytes);
754 for (orientation = !!
level; orientation < 4; orientation++)
755 quants[
level][orientation] =
FFMAX(quant_idx -
s->quant[
level][orientation], 0);
758 for (p = 0; p < 3; p++) {
759 int bytes_start, bytes_len, pad_s, pad_c;
763 for (orientation = !!
level; orientation < 4; orientation++) {
765 &
s->plane[p].band[
level][orientation],
766 quants[
level][orientation]);
773 pad_s =
FFALIGN((bytes_len + len_diff),
s->size_scaler)/
s->size_scaler;
774 pad_c = (pad_s*
s->size_scaler) - bytes_len;
776 pad_s =
FFALIGN(bytes_len,
s->size_scaler)/
s->size_scaler;
777 pad_c = (pad_s*
s->size_scaler) - bytes_len;
779 pb->
buf[bytes_start] = pad_s;
792 int slice_x, slice_y,
skip = 0;
798 for (slice_y = 0; slice_y <
s->num_y; slice_y++) {
799 for (slice_x = 0; slice_x <
s->num_x; slice_x++) {
800 SliceArgs *args = &enc_args[
s->num_x*slice_y + slice_x];
854 const ptrdiff_t linesize = transform_dat->
istride;
855 const int field = transform_dat->
field;
859 const int idx =
s->wavelet_idx;
860 const int skip = 1 +
s->interlaced;
863 ptrdiff_t pix_stride = linesize >> (
s->bpp - 1);
868 }
else if (field == 2) {
877 for (y = 0; y < p->height*
skip; y+=
skip) {
878 for (x = 0; x < p->width; x++) {
879 buf[x] =
pix[x] -
s->diff_offset;
881 memset(&buf[x], 0, (p->coef_stride - p->width)*
sizeof(
dwtcoef));
882 buf += p->coef_stride;
887 for (y = 0; y < p->height*
skip; y+=
skip) {
888 for (x = 0; x < p->width; x++) {
889 buf[x] =
pix[x] -
s->diff_offset;
891 memset(&buf[x], 0, (p->coef_stride - p->width)*
sizeof(
dwtcoef));
892 buf += p->coef_stride;
897 memset(buf, 0, p->coef_stride * (p->dwt_height - p->height) *
sizeof(
dwtcoef));
902 b->width,
b->height);
909 const char *aux_data,
const int header_size,
int field)
915 for (
i = 0;
i < 3;
i++) {
916 s->transform_args[
i].ctx =
s;
917 s->transform_args[
i].field = field;
918 s->transform_args[
i].plane = &
s->plane[
i];
919 s->transform_args[
i].idata =
frame->data[
i];
920 s->transform_args[
i].istride =
frame->linesize[
i];
930 max_frame_bytes <<
s->interlaced, 0);
963 int slice_ceil, sig_size = 256;
967 const int aux_data_size = bitexact ?
sizeof(
"Lavc") :
sizeof(
LIBAVCODEC_IDENT);
968 const int header_size = 100 + aux_data_size;
974 s->last_parse_code = 0;
975 s->next_parse_offset = 0;
978 s->frame_max_bytes = (
av_rescale(r_bitrate,
s->avctx->time_base.num,
979 s->avctx->time_base.den) >> 3) - header_size;
980 s->slice_max_bytes = slice_ceil =
av_rescale(
s->frame_max_bytes, 1,
s->num_x*
s->num_y);
983 while (sig_size > 255) {
985 if (r_size > slice_ceil) {
986 s->slice_max_bytes -= r_size - slice_ceil;
989 sig_size = r_size/
s->size_scaler;
990 s->size_scaler <<= 1;
993 s->slice_min_bytes =
s->slice_max_bytes -
s->slice_max_bytes*(
s->tolerance/100.0f);
994 if (
s->slice_min_bytes < 0 ||
s->slice_max_bytes > INT_MAX >> 3)
1000 if (
s->interlaced) {
1021 for (
i = 0;
i < 3;
i++) {
1041 s->picture_number = 0;
1052 s->strict_compliance = 1;
1055 s->slice_max_bytes = 0;
1056 s->slice_min_bytes = 0;
1084 if ((
s->slice_width & (
s->slice_width - 1)) ||
1085 (
s->slice_height & (
s->slice_height - 1))) {
1090 if ((
s->slice_width > avctx->
width) ||
1091 (
s->slice_height > avctx->
height)) {
1096 if (
s->base_vf <= 0) {
1098 s->strict_compliance =
s->base_vf = 0;
1102 "the specifications, decrease strictness to use it.\n");
1120 s->diff_offset = 128;
1125 s->diff_offset = 128;
1126 }
else if (depth == 10) {
1129 s->diff_offset = 512;
1133 s->diff_offset = 2048;
1137 for (
i = 0;
i < 3;
i++) {
1140 p->width = avctx->
width >> (
i ?
s->chroma_x_shift : 0);
1141 p->height = avctx->
height >> (
i ?
s->chroma_y_shift : 0);
1144 p->dwt_width =
w =
FFALIGN(p->width, (1 <<
s->wavelet_depth));
1145 p->dwt_height =
h =
FFALIGN(p->height, (1 <<
s->wavelet_depth));
1146 p->coef_stride =
FFALIGN(p->dwt_width, 32);
1153 for (o = 0; o < 4; o++) {
1157 b->stride = p->coef_stride;
1158 shift = (o > 1)*
b->height*
b->stride + (o & 1)*
b->width;
1159 b->buf = p->coef_buf +
shift;
1165 s->plane[
i].coef_stride,
1166 s->plane[
i].dwt_height,
1167 s->slice_width,
s->slice_height))
1172 s->num_x =
s->plane[0].dwt_width/
s->slice_width;
1173 s->num_y =
s->plane[0].dwt_height/
s->slice_height;
1179 for (
i = 0;
i < 116;
i++) {
1181 const uint32_t m =
av_log2(qf);
1182 const uint32_t t = (1ULL << (m + 32)) / qf;
1183 const uint32_t
r = (t*qf + qf) & UINT32_MAX;
1184 if (!(qf & (qf - 1))) {
1185 s->qmagic_lut[
i][0] = 0xFFFFFFFF;
1186 s->qmagic_lut[
i][1] = 0xFFFFFFFF;
1187 }
else if (
r <= 1 << m) {
1188 s->qmagic_lut[
i][0] = t + 1;
1189 s->qmagic_lut[
i][1] = 0;
1191 s->qmagic_lut[
i][0] = t;
1192 s->qmagic_lut[
i][1] = t;
1201#define VC2ENC_FLAGS (AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
1203 {
"tolerance",
"Max undershoot in percent", offsetof(
VC2EncContext, tolerance),
AV_OPT_TYPE_DOUBLE, {.dbl = 5.0f}, 0.0f, 45.0f,
VC2ENC_FLAGS, .unit =
"tolerance"},
1204 {
"slice_width",
"Slice width", offsetof(
VC2EncContext, slice_width),
AV_OPT_TYPE_INT, {.i64 = 32}, 32, 1024,
VC2ENC_FLAGS, .unit =
"slice_width"},
1205 {
"slice_height",
"Slice height", offsetof(
VC2EncContext, slice_height),
AV_OPT_TYPE_INT, {.i64 = 16}, 8, 1024,
VC2ENC_FLAGS, .unit =
"slice_height"},
1206 {
"wavelet_depth",
"Transform depth", offsetof(
VC2EncContext, wavelet_depth),
AV_OPT_TYPE_INT, {.i64 = 4}, 1, 5,
VC2ENC_FLAGS, .unit =
"wavelet_depth"},
1207 {
"wavelet_type",
"Transform type", offsetof(
VC2EncContext, wavelet_idx),
AV_OPT_TYPE_INT, {.i64 =
VC2_TRANSFORM_9_7}, 0,
VC2_TRANSFORMS_NB,
VC2ENC_FLAGS, .unit =
"wavelet_idx"},
1208 {
"9_7",
"Deslauriers-Dubuc (9,7)", 0,
AV_OPT_TYPE_CONST, {.i64 =
VC2_TRANSFORM_9_7}, INT_MIN, INT_MAX,
VC2ENC_FLAGS, .unit =
"wavelet_idx"},
1209 {
"5_3",
"LeGall (5,3)", 0,
AV_OPT_TYPE_CONST, {.i64 =
VC2_TRANSFORM_5_3}, INT_MIN, INT_MAX,
VC2ENC_FLAGS, .unit =
"wavelet_idx"},
1212 {
"qm",
"Custom quantization matrix", offsetof(
VC2EncContext, quant_matrix),
AV_OPT_TYPE_INT, {.i64 =
VC2_QM_DEF}, 0,
VC2_QM_NB,
VC2ENC_FLAGS, .unit =
"quant_matrix"},
1220 .class_name =
"SMPTE VC-2 encoder",
1228 {
"b",
"600000000" },
static double val(void *priv, double ch)
const FFCodec ff_vc2_encoder
static av_cold void close(AVCodecParserContext *s)
void ff_put_string(PutBitContext *pb, const char *string, int terminate_string)
Put the string string in the bitstream.
static void BS_FUNC skip(BSCTX *bc, unsigned int n)
Skip n bits in the buffer.
static int BS_FUNC left(const BSCTX *bc)
Return the number of the bits left in a buffer.
#define i(width, name, range_min, range_max)
#define CODEC_PIXFMTS_ARRAY(array)
#define FF_CODEC_ENCODE_CB(func)
#define CODEC_LONG_NAME(str)
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
#define FF_COMPLIANCE_STRICT
Strictly conform to all the things in the spec no matter what consequences.
Interface to Dirac Decoder/Encoder.
DiracParseCodes
Parse code values:
#define MAX_DWT_LEVELS
The spec limits the number of wavelet decompositions to 4 for both level 1 (VC-2) and 128 (long-gop d...
const int32_t ff_dirac_qscale_tab[116]
const uint8_t ff_dirac_default_qmat[7][4][4]
#define DIRAC_MAX_QUANT_INDEX
int(* init)(AVBSFContext *ctx)
int ff_get_encode_buffer(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int flags)
Get a buffer for a packet.
static const uint8_t bits[8]
FrameData * frame_data(AVFrame *frame)
Get our axiliary frame data attached to the frame, allocating it if needed.
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_DOUBLE
Underlying C type is double.
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
#define AV_CODEC_FLAG_BITEXACT
Use only bitexact stuff (except (I)DCT).
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_CAP_SLICE_THREADS
Codec supports slice-based (or partition-based) multithreading.
void av_shrink_packet(AVPacket *pkt, int size)
Reduce packet size, correctly zeroing padding.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_INFO
Standard information.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
int64_t av_rescale(int64_t a, int64_t b, int64_t c)
Rescale a 64-bit integer with rounding to nearest.
#define LIBAVUTIL_VERSION_INT
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static int shift(int a, int b)
Libavcodec version macros.
static int ff_thread_once(char *control, void(*routine)(void))
Libavutil version macros.
@ AV_CLASS_CATEGORY_ENCODER
void * av_calloc(size_t nmemb, size_t size)
Memory handling functions.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV420P10
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
@ AVCOL_RANGE_UNSPECIFIED
@ AVCOL_RANGE_JPEG
Full range content.
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_YUV422P10
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AVCOL_PRI_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
@ AVCOL_PRI_SMPTE240M
identical to above, also called "SMPTE C" even though it uses D65
@ AVCOL_PRI_SMPTE170M
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
@ AVCOL_TRC_BT1361_ECG
ITU-R BT1361 Extended Colour Gamut.
@ AVCOL_TRC_LINEAR
"Linear transfer characteristics"
#define AV_PIX_FMT_YUV444P10
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
@ AVCOL_SPC_RGB
order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB), YZX and ST 428-1
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
static int put_bytes_count(const PutBitContext *s, int round_up)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static void put_bits63(PutBitContext *s, int n, uint64_t value)
Write up to 63 bits into a bitstream.
static int put_bytes_output(const PutBitContext *s)
static void skip_put_bytes(PutBitContext *s, int n)
Skip the given number of bytes.
static av_unused void put_bits32(PutBitContext *s, uint32_t value)
Write exactly 32 bits into a bitstream.
static void align_put_bits(PutBitContext *s)
Pad the bitstream with zeros up to the next byte boundary.
#define FF_ARRAY_ELEMS(a)
Describe the class of an AVClass context structure.
main external API structure.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
int width
picture width / height.
enum AVColorRange color_range
MPEG vs JPEG YUV range.
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
enum AVColorPrimaries color_primaries
Chromaticity coordinates of the source primaries.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown) That is the width of a pixel divided by the height of the pixel.
enum AVFieldOrder field_order
Field order.
int64_t bit_rate
the average bitrate
enum AVColorSpace colorspace
YUV colorspace type.
enum AVColorTransferCharacteristic color_trc
Color Transfer Characteristic.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
int flags
AV_CODEC_FLAG_*.
int depth
Number of bits in the component.
This structure describes decoded (raw) audio or video data.
This structure stores compressed data.
Descriptor that unambiguously describes how the bits of a pixel are stored in the up to 4 data planes...
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
uint8_t log2_chroma_w
Amount to shift the luma width right to find the chroma width.
uint8_t log2_chroma_h
Amount to shift the luma height right to find the chroma height.
Rational number (pair of numerator and denominator).
SubBand band[DWT_LEVELS_3D][4]
int cache[DIRAC_MAX_QUANT_INDEX]
const struct VC2EncContext * ctx
TransformArgs transform_args[3]
uint8_t quant[MAX_DWT_LEVELS][4]
uint32_t next_parse_offset
uint32_t qmagic_lut[116][2]
enum DiracParseCodes last_parse_code
void(* vc2_subband_dwt[VC2_TRANSFORMS_NB])(struct VC2TransformContext *t, dwtcoef *data, ptrdiff_t stride, int width, int height)
static void encode_parse_info(VC2EncContext *s, enum DiracParseCodes pcode)
static int rate_control(AVCodecContext *avctx, void *arg)
static void encode_frame_rate(VC2EncContext *s)
static int calc_slice_sizes(VC2EncContext *s)
static void encode_source_params(VC2EncContext *s)
static void encode_frame_size(VC2EncContext *s)
static void encode_transform_params(VC2EncContext *s)
static const AVOption vc2enc_options[]
static void encode_signal_range(VC2EncContext *s)
static av_cold int vc2_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet)
static void encode_seq_header(VC2EncContext *s)
static void encode_quant_matrix(VC2EncContext *s)
static const FFCodecDefault vc2enc_defaults[]
static av_cold int vc2_encode_init(AVCodecContext *avctx)
static av_always_inline void put_vc2_ue_uint_inline(PutBitContext *pb, uint32_t val)
static void encode_color_spec(VC2EncContext *s)
static const int base_video_fmts_len
static av_always_inline int count_vc2_ue_uint(uint32_t val)
static void encode_picture_header(VC2EncContext *s)
static int encode_slices(VC2EncContext *s)
static void encode_slice_params(VC2EncContext *s)
static uint16_t top_interleaved_ue_golomb_tab[256]
1 x_{k-1} ... x_0 -> 0 0 0 x_{k - 1} ... 0 x_0
static av_noinline void put_vc2_ue_uint(PutBitContext *pb, uint32_t val)
static void encode_picture_start(VC2EncContext *s)
static av_cold int vc2_encode_end(AVCodecContext *avctx)
static void encode_wavelet_transform(VC2EncContext *s)
static void encode_parse_params(VC2EncContext *s)
#define SLICE_REDIST_TOTAL
#define QUANT(c, mul, add, shift)
static uint8_t golomb_len_tab[256]
1 x_{k-1} ... x_0 -> 2 * k
static uint8_t qscale_len_tab[FF_ARRAY_ELEMS(ff_dirac_qscale_tab)]
quant -> av_log2(ff_dirac_qscale_tab[quant]) + 32
static int encode_hq_slice(AVCodecContext *avctx, void *arg)
static void init_quant_matrix(VC2EncContext *s)
static const VC2BaseVideoFormat base_video_fmts[]
static int encode_frame(VC2EncContext *s, AVPacket *avpkt, const AVFrame *frame, const char *aux_data, const int header_size, int field)
static void encode_subband(const VC2EncContext *s, PutBitContext *pb, int sx, int sy, const SubBand *b, int quant)
static void encode_aspect_ratio(VC2EncContext *s)
static const uint8_t vc2_qm_col_tab[][4]
static void encode_scan_format(VC2EncContext *s)
static const AVClass vc2enc_class
static uint16_t interleaved_ue_golomb_tab[256]
x_k x_{k-1} ... x_0 -> 0 x_k 0 x_{k - 1} ... 0 x_0
static enum AVPixelFormat allowed_pix_fmts[]
static void encode_clean_area(VC2EncContext *s)
static int count_hq_slice(SliceArgs *slice, int quant_idx)
static av_cold void vc2_init_static_data(void)
static const uint8_t vc2_qm_flat_tab[][4]
static void encode_sample_fmt(VC2EncContext *s)
static int dwt_plane(AVCodecContext *avctx, void *arg)
av_cold int ff_vc2enc_init_transforms(VC2TransformContext *s, int p_stride, int p_height, int slice_w, int slice_h)
av_cold void ff_vc2enc_free_transforms(VC2TransformContext *s)
static const double coeff[2][5]
static av_always_inline int diff(const struct color_info *a, const struct color_info *b, const int trans_thresh)
static const uint8_t quant[64]