31#include "config_components.h"
82 const uint8_t *
src0,
const uint8_t *
src1,
int w)
87 s->hencdsp.diff_int16((uint16_t *)
dst, (
const uint16_t *)
src0, (
const uint16_t *)
src1,
s->mask,
w);
95 int min_width =
FFMIN(
w, 32);
98 for (
i = 0;
i < min_width;
i++) {
105 s->llvidencdsp.diff_bytes(
dst + 32,
src + 32,
src + 31,
w - 32);
108 const uint16_t *src16 = (
const uint16_t *)
src;
109 uint16_t *dst16 = ( uint16_t *)
dst;
110 for (
i = 0;
i < min_width;
i++) {
111 const int temp = src16[
i];
117 s->hencdsp.diff_int16(dst16 + 32, src16 + 32, src16 + 31,
s->mask,
w - 32);
123 const uint8_t *
src,
int w,
124 int *red,
int *green,
int *blue,
129 int min_width =
FFMIN(
w, 8);
135 for (
i = 0;
i < min_width;
i++) {
136 const int rt =
src[
i * 4 +
R];
137 const int gt =
src[
i * 4 +
G];
138 const int bt =
src[
i * 4 +
B];
139 const int at =
src[
i * 4 +
A];
150 s->llvidencdsp.diff_bytes(
dst + 32,
src + 32,
src + 32 - 4,
w * 4 - 32);
152 *red =
src[(
w - 1) * 4 +
R];
153 *green =
src[(
w - 1) * 4 +
G];
154 *blue =
src[(
w - 1) * 4 +
B];
159 const uint8_t *
src,
int w,
160 int *red,
int *green,
int *blue)
168 const int rt =
src[
i * 3 + 0];
169 const int gt =
src[
i * 3 + 1];
170 const int bt =
src[
i * 3 + 2];
171 dst[
i * 3 + 0] = rt -
r;
172 dst[
i * 3 + 1] = gt -
g;
173 dst[
i * 3 + 2] = bt -
b;
179 s->llvidencdsp.diff_bytes(
dst + 48,
src + 48,
src + 48 - 3,
w * 3 - 48);
181 *red =
src[(
w - 1) * 3 + 0];
182 *green =
src[(
w - 1) * 3 + 1];
183 *blue =
src[(
w - 1) * 3 + 2];
187 const uint8_t *
src1,
const uint8_t *
src2,
188 int w,
int *
left,
int *left_top)
193 s->hencdsp.sub_hfyu_median_pred_int16((uint16_t *)
dst, (
const uint16_t *)
src1,
194 (
const uint16_t *)
src2,
s->mask,
w,
left, left_top);
204 for (
i = 0;
i < n;) {
208 for (;
i < n &&
len[
i] ==
val && repeat < 255;
i++)
214 buf[
index++] = repeat;
230 count = 1 +
s->alpha + 2*
s->chroma;
232 for (
i = 0;
i < count;
i++) {
262#define STATS_OUT_SIZE 21*MAX_N*3 + 4
270 s->bps =
desc->comp[0].depth;
272 s->chroma =
desc->nb_components > 2;
274 s->chroma_h_shift =
desc->log2_chroma_w;
275 s->chroma_v_shift =
desc->log2_chroma_h;
277 s->mask = (1 <<
s->bps) - 1;
285 if (avctx->
width & 1) {
334 s->bitstream_bpp = 32;
337 s->bitstream_bpp = 24;
349 "context=1 is not compatible with "
350 "2 pass huffyuv encoding\n");
356 if (
s->interlaced != ( avctx->
height > 288 ))
358 "using huffyuv 2.2.0 or newer interlacing flag\n");
362 av_log(avctx,
AV_LOG_ERROR,
"Ver > 3 is under development, files encoded with it may not be decodable with future versions!!!\n"
363 "Use vstrict=-2 / -strict -2 to use it anyway.\n");
367 if (
s->bitstream_bpp >= 24 &&
s->predictor ==
MEDIAN &&
s->version <= 2) {
369 "Error: RGB is incompatible with median predictor\n");
373 avctx->
extradata[0] =
s->predictor | (
s->decorrelate << 6);
374 avctx->
extradata[2] =
s->interlaced ? 0x10 : 0x20;
377 if (
s->version < 3) {
381 avctx->
extradata[1] = ((
s->bps-1)<<4) |
s->chroma_h_shift | (
s->chroma_v_shift<<2);
393 for (
i = 0;
i < 4;
i++)
394 for (j = 0; j <
s->vlc_n; j++)
398 for (
i = 0;
i < 4;
i++) {
401 for (j = 0; j <
s->vlc_n; j++) {
402 s->stats[
i][j] += strtol(p, &next, 0);
403 if (next == p)
return -1;
407 if (p[0] == 0 || p[1] == 0 || p[2] == 0)
break;
410 for (
i = 0;
i < 4;
i++)
411 for (j = 0; j <
s->vlc_n; j++) {
412 int d =
FFMIN(j,
s->vlc_n - j);
414 s->stats[
i][j] = 100000000 / (d*d + 1);
424 for (
i = 0;
i < 4;
i++) {
425 int pels = avctx->
width * avctx->
height / (
i ? 40 : 10);
426 for (j = 0; j <
s->vlc_n; j++) {
427 int d =
FFMIN(j,
s->vlc_n - j);
428 s->stats[
i][j] = pels/(d*d + 1);
432 for (
i = 0;
i < 4;
i++)
433 for (j = 0; j <
s->vlc_n; j++)
439 for (
int i = 0;
i < 3;
i++) {
450 const uint8_t *y =
s->temp[0] +
offset;
451 const uint8_t *
u =
s->temp[1] +
offset / 2;
452 const uint8_t *v =
s->temp[2] +
offset / 2;
461 int y1 = y[2 * i + 1];\
468 for(
i = 0;
i < count;
i++) {
479 for (
i = 0;
i < count;
i++) {
491 for(
i = 0;
i < count;
i++) {
512 int y0 = s->temp[0][width-1];
514 int y0 = s->temp16[0][width-1] & mask;
516 int y0 = s->temp16[0][width-1];
518 s->stats[plane][y0]++;
520 s->stats[plane][y0>>2]++;
522 put_bits(&s->pb, s->len[plane][y0], s->bits[plane][y0]);
524 put_bits(&s->pb, s->len[plane][y0>>2], s->bits[plane][y0>>2]);\
525 put_bits(&s->pb, 2, y0&3);
528 int y0 = s->temp[0][2 * i];\
529 int y1 = s->temp[0][2 * i + 1];
531 int y0 = s->temp16[0][2 * i] & mask;\
532 int y1 = s->temp16[0][2 * i + 1] & mask;
534 int y0 = s->temp16[0][2 * i];\
535 int y1 = s->temp16[0][2 * i + 1];
537 s->stats[plane][y0]++;\
538 s->stats[plane][y1]++;
540 s->stats[plane][y0>>2]++;\
541 s->stats[plane][y1>>2]++;
543 put_bits(&s->pb, s->len[plane][y0], s->bits[plane][y0]);\
544 put_bits(&s->pb, s->len[plane][y1], s->bits[plane][y1]);
546 put_bits(&s->pb, s->len[plane][y0>>2], s->bits[plane][y0>>2]);\
547 put_bits(&s->pb, 2, y0&3);\
548 put_bits(&s->pb, s->len[plane][y1>>2], s->bits[plane][y1>>2]);\
549 put_bits(&s->pb, 2, y1&3);
551#define ENCODE_PLANE(LOAD, LOADEND, WRITE, WRITEEND, STAT, STATEND) \
553 if (s->flags & AV_CODEC_FLAG_PASS1) { \
554 for (int i = 0; i < count; i++) { \
563 if (s->avctx->flags2 & AV_CODEC_FLAG2_NO_OUTPUT) \
567 for (int i = 0; i < count; i++) { \
578 for (int i = 0; i < count; i++) { \
591 }
else if (
s->bps <= 14) {
592 unsigned mask =
s->mask;
614 int y0 = s->temp[0][2 * i];\
615 int y1 = s->temp[0][2 * i + 1];
620 put_bits(&s->pb, s->len[0][y0], s->bits[0][y0]);\
621 put_bits(&s->pb, s->len[0][y1], s->bits[0][y1]);
626 for (
i = 0;
i < count;
i++) {
635 for (
i = 0;
i < count;
i++) {
641 for (
i = 0;
i < count;
i++) {
659 int g = s->temp[0][planes == 3 ? 3 * i + 1 : 4 * i + G]; \
660 int b =(s->temp[0][planes == 3 ? 3 * i + 2 : 4 * i + B] - g) & 0xFF;\
661 int r =(s->temp[0][planes == 3 ? 3 * i + 0 : 4 * i + R] - g) & 0xFF;\
662 int a = s->temp[0][planes * i + A];
672 put_bits(&s->pb, s->len[1][g], s->bits[1][g]); \
673 put_bits(&s->pb, s->len[0][b], s->bits[0][b]); \
674 put_bits(&s->pb, s->len[2][r], s->bits[2][r]); \
676 put_bits(&s->pb, s->len[2][a], s->bits[2][a]);
680 for (
i = 0;
i < count;
i++) {
685 for (
i = 0;
i < count;
i++) {
691 for (
i = 0;
i < count;
i++) {
700 const AVFrame *p,
int *got_packet)
704 const int width2 = avctx->
width >> 1;
706 const int fake_ystride = (1 +
s->interlaced) * p->linesize[0];
707 const int fake_ustride = (1 +
s->interlaced) * p->linesize[1];
708 const int fake_vstride = (1 +
s->interlaced) * p->linesize[2];
709 int i, j,
size = 0, ret;
719 for (
i = 0;
i < 4;
i++)
720 for (j = 0; j <
s->vlc_n; j++)
721 s->stats[
i][j] >>= 1;
728 int lefty, leftu, leftv, y, cy;
730 put_bits(&
s->pb, 8, leftv = p->data[2][0]);
731 put_bits(&
s->pb, 8, lefty = p->data[0][1]);
732 put_bits(&
s->pb, 8, leftu = p->data[1][0]);
742 int lefttopy, lefttopu, lefttopv;
759 lefttopy = p->data[0][3];
760 lefttopu = p->data[1][1];
761 lefttopv = p->data[2][1];
762 s->llvidencdsp.sub_median_pred(
s->temp[0], p->data[0] + 4, p->data[0] + fake_ystride + 4,
width - 4, &lefty, &lefttopy);
763 s->llvidencdsp.sub_median_pred(
s->temp[1], p->data[1] + 2, p->data[1] + fake_ustride + 2, width2 - 2, &leftu, &lefttopu);
764 s->llvidencdsp.sub_median_pred(
s->temp[2], p->data[2] + 2, p->data[2] + fake_vstride + 2, width2 - 2, &leftv, &lefttopv);
768 for (; y <
height; y++,cy++) {
769 const uint8_t *ydst, *udst, *vdst;
771 if (
s->bitstream_bpp == 12) {
773 ydst = p->data[0] + p->linesize[0] * y;
774 s->llvidencdsp.sub_median_pred(
s->temp[0], ydst - fake_ystride, ydst,
width, &lefty, &lefttopy);
780 ydst = p->data[0] + p->linesize[0] * y;
781 udst = p->data[1] + p->linesize[1] * cy;
782 vdst = p->data[2] + p->linesize[2] * cy;
784 s->llvidencdsp.sub_median_pred(
s->temp[0], ydst - fake_ystride, ydst,
width, &lefty, &lefttopy);
785 s->llvidencdsp.sub_median_pred(
s->temp[1], udst - fake_ustride, udst, width2, &leftu, &lefttopu);
786 s->llvidencdsp.sub_median_pred(
s->temp[2], vdst - fake_vstride, vdst, width2, &leftv, &lefttopv);
791 for (cy = y = 1; y <
height; y++, cy++) {
792 const uint8_t *ydst, *udst, *vdst;
795 if (
s->bitstream_bpp == 12) {
796 ydst = p->data[0] + p->linesize[0] * y;
798 if (
s->predictor ==
PLANE &&
s->interlaced < y) {
799 s->llvidencdsp.diff_bytes(
s->temp[1], ydst, ydst - fake_ystride,
width);
810 ydst = p->data[0] + p->linesize[0] * y;
811 udst = p->data[1] + p->linesize[1] * cy;
812 vdst = p->data[2] + p->linesize[2] * cy;
814 if (
s->predictor ==
PLANE &&
s->interlaced < cy) {
815 s->llvidencdsp.diff_bytes(
s->temp[1], ydst, ydst - fake_ystride,
width);
816 s->llvidencdsp.diff_bytes(
s->temp[2], udst, udst - fake_ustride, width2);
817 s->llvidencdsp.diff_bytes(
s->temp[2] + width2, vdst, vdst - fake_vstride, width2);
832 const uint8_t *
data = p->data[0] + (
height - 1) * p->linesize[0];
833 const int stride = -p->linesize[0];
834 const int fake_stride = -fake_ystride;
835 int leftr, leftg, leftb, lefta;
843 &leftr, &leftg, &leftb, &lefta);
846 for (
int y = 1; y <
height; y++) {
848 if (
s->predictor ==
PLANE &&
s->interlaced < y) {
849 s->llvidencdsp.diff_bytes(
s->temp[1],
dst,
dst - fake_stride,
width * 4);
851 &leftr, &leftg, &leftb, &lefta);
854 &leftr, &leftg, &leftb, &lefta);
859 const uint8_t *
data = p->data[0] + (
height - 1) * p->linesize[0];
860 const int stride = -p->linesize[0];
861 const int fake_stride = -fake_ystride;
862 int leftr, leftg, leftb;
870 &leftr, &leftg, &leftb);
873 for (
int y = 1; y <
height; y++) {
875 if (
s->predictor ==
PLANE &&
s->interlaced < y) {
876 s->llvidencdsp.diff_bytes(
s->temp[1],
dst,
dst - fake_stride,
879 &leftr, &leftg, &leftb);
882 &leftr, &leftg, &leftb);
886 }
else if (
s->version > 2) {
888 for (plane = 0; plane < 1 + 2*
s->chroma +
s->alpha; plane++) {
892 int fake_stride = fake_ystride;
894 if (
s->chroma && (plane == 1 || plane == 2)) {
895 w >>=
s->chroma_h_shift;
896 h >>=
s->chroma_v_shift;
897 fake_stride = plane == 1 ? fake_ustride : fake_vstride;
917 const uint8_t *
dst = p->data[plane] + p->linesize[plane] * y;
924 for (y = 1; y <
h; y++) {
925 const uint8_t *
dst = p->data[plane] + p->linesize[plane] * y;
927 if (
s->predictor ==
PLANE &&
s->interlaced < y) {
952 for (
i = 0;
i < 4;
i++) {
953 for (j = 0; j <
s->vlc_n; j++) {
954 snprintf(p, end-p,
"%"PRIu64
" ",
s->stats[
i][j]);
967 s->bdsp.bswap_buf((uint32_t *)
pkt->data, (uint32_t *)
pkt->data,
size);
984 for (
int i = 0;
i < 3;
i++)
990#define OFFSET(x) offsetof(HYuvEncContext, x)
991#define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
997 {
"non_deterministic",
"Allow multithreading for e.g. context=1 at the expense of determinism",
1008 .class_name =
"huffyuv",
1015 .p.name =
"huffyuv",
1031#if CONFIG_FFVHUFF_ENCODER
1032static const AVClass ff_class = {
1033 .class_name =
"ffvhuff",
1040 .p.name =
"ffvhuff",
1050 .p.priv_class = &ff_class,
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
static double val(void *priv, double ch)
const FFCodec ff_huffyuv_encoder
const FFCodec ff_ffvhuff_encoder
static av_cold int encode_init(AVCodecContext *avctx)
#define av_unreachable(msg)
Asserts that are used as compiler optimization hints depending upon ASSERT_LEVEL and NBDEBUG.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
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(...)
#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 FF_COMPLIANCE_EXPERIMENTAL
Allow nonstandardized experimental things.
int(* init)(AVBSFContext *ctx)
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
#define FF_INPUT_BUFFER_MIN_SIZE
Used by some encoders as upper bound for the length of headers.
static void predictor(uint8_t *src, ptrdiff_t size)
static int encode_frame(OutputFile *of, OutputStream *ost, AVFrame *frame, AVPacket *pkt)
@ AV_OPT_TYPE_CONST
Special option type for declaring named constants.
@ AV_OPT_TYPE_INT
Underlying C type is int.
@ AV_OPT_TYPE_BOOL
Underlying C type is int.
#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_PASS2
Use internal 2pass ratecontrol in second pass mode.
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define AV_CODEC_FLAG_PASS1
Use internal 2pass ratecontrol in first pass mode.
#define AV_CODEC_FLAG_INTERLACED_ME
interlaced motion estimation
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
#define AV_CODEC_FLAG2_NO_OUTPUT
Skip bitstream encoding.
#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.
#define LIBAVUTIL_VERSION_INT
int ff_huff_gen_len_table(uint8_t *dst, const uint64_t *stats, int stats_size, int skip0)
huffman tree builder and VLC generator
int ff_huffyuv_generate_bits_table(uint32_t *dst, const uint8_t *len_table, int n)
huffyuv codec for libavcodec.
#define READ_LOWBYTE(plane, bps)
static void diff_bytes(HYuvEncContext *s, uint8_t *dst, const uint8_t *src0, const uint8_t *src1, int w)
static int store_table(HYuvEncContext *s, const uint8_t *len, uint8_t *buf)
static void sub_median_prediction(HYuvEncContext *s, uint8_t *dst, const uint8_t *src1, const uint8_t *src2, int w, int *left, int *left_top)
static int sub_left_prediction(HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int left)
static void sub_left_prediction_bgr32(HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue, int *alpha)
static int store_huffman_tables(HYuvEncContext *s, uint8_t *buf)
static int encode_bgra_bitstream(HYuvEncContext *s, int count, int planes)
static av_cold int encode_init(AVCodecContext *avctx)
static int encode_plane_bitstream(HYuvEncContext *s, int width, int plane)
static const AVClass normal_class
static int encode_gray_bitstream(HYuvEncContext *s, int count)
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *p, int *got_packet)
static av_cold int encode_end(AVCodecContext *avctx)
static void sub_left_prediction_rgb24(HYuvEncContext *s, uint8_t *dst, const uint8_t *src, int w, int *red, int *green, int *blue)
#define ENCODE_PLANE(LOAD, LOADEND, WRITE, WRITEEND, STAT, STATEND)
static int encode_422_bitstream(HYuvEncContext *s, int offset, int count)
static const int16_t alpha[]
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
#define u(width, name, range_min, range_max)
av_cold void ff_huffyuvencdsp_init(HuffYUVEncDSPContext *c, int bpp, int width)
static const struct @257111027162314367033347246032313251342043035002 planes[]
av_cold void ff_llvidencdsp_init(LLVidEncDSPContext *c)
static const uint16_t mask[17]
Memory handling functions.
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
#define AV_PIX_FMT_FLAG_ALPHA
The pixel format has an alpha channel.
#define AV_PIX_FMT_FLAG_RGB
The pixel format contains RGB-like data (as opposed to YUV/grayscale).
#define AV_PIX_FMT_FLAG_PLANAR
At least one pixel component is not in the first data plane.
#define AV_PIX_FMT_YUV420P16
#define AV_PIX_FMT_YUV444P12
#define AV_PIX_FMT_YUV444P9
#define AV_PIX_FMT_YUV420P10
#define AV_PIX_FMT_YUV422P9
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
#define AV_PIX_FMT_YUVA444P10
#define AV_PIX_FMT_YUVA420P16
#define AV_PIX_FMT_YUV420P12
#define AV_PIX_FMT_YUVA420P10
#define AV_PIX_FMT_YUVA422P9
#define AV_PIX_FMT_YUV422P12
#define AV_PIX_FMT_GBRP10
#define AV_PIX_FMT_YUV422P10
#define AV_PIX_FMT_GBRP12
#define AV_PIX_FMT_YUV420P9
#define AV_PIX_FMT_YUVA420P9
#define AV_PIX_FMT_YUVA422P10
#define AV_PIX_FMT_YUV420P14
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
@ AV_PIX_FMT_YUV410P
planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
@ AV_PIX_FMT_YUVA422P
planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
#define AV_PIX_FMT_YUV422P14
#define AV_PIX_FMT_YUV422P16
#define AV_PIX_FMT_GRAY16
#define AV_PIX_FMT_YUVA444P16
#define AV_PIX_FMT_YUVA422P16
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_YUV444P14
#define AV_PIX_FMT_YUVA444P9
#define AV_PIX_FMT_GBRP14
#define AV_PIX_FMT_YUV444P16
#define AV_PIX_FMT_YUV444P10
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int put_bits_count(PutBitContext *s)
static int put_bytes_left(const PutBitContext *s, int round_up)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
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.
char * stats_out
pass1 encoding statistics output buffer
int strict_std_compliance
strictly follow the standard (MPEG-4, ...).
char * stats_in
pass2 encoding statistics input buffer Concatenated stuff from stats_out of pass1 should be placed he...
int bits_per_coded_sample
bits per sample/pixel from the demuxer (needed for huffyuv).
const struct AVCodec * codec
int flags
AV_CODEC_FLAG_*.
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
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...
uint8_t len[4][MAX_VLC_N]
uint64_t stats[4][MAX_VLC_N]
HuffYUVEncDSPContext hencdsp
LLVidEncDSPContext llvidencdsp
uint32_t bits[4][MAX_VLC_N]