41 #define DEFAULT_SLICE_MB_WIDTH 8 55 static const int bitrate_table[] = { 1000, 2100, 3500, 5400, 7000, 10000};
66 4, 7, 9, 11, 13, 14, 15, 63,
67 7, 7, 11, 12, 14, 15, 63, 63,
68 9, 11, 13, 14, 15, 63, 63, 63,
69 11, 11, 13, 14, 63, 63, 63, 63,
70 11, 13, 14, 63, 63, 63, 63, 63,
71 13, 14, 63, 63, 63, 63, 63, 63,
72 13, 63, 63, 63, 63, 63, 63, 63,
73 63, 63, 63, 63, 63, 63, 63, 63
75 4, 5, 6, 7, 9, 11, 13, 15,
76 5, 5, 7, 8, 11, 13, 15, 17,
77 6, 7, 9, 11, 13, 15, 15, 17,
78 7, 7, 9, 11, 13, 15, 17, 19,
79 7, 9, 11, 13, 14, 16, 19, 23,
80 9, 11, 13, 14, 16, 19, 23, 29,
81 9, 11, 13, 15, 17, 21, 28, 35,
82 11, 13, 16, 17, 21, 28, 35, 41
84 4, 4, 5, 5, 6, 7, 7, 9,
85 4, 4, 5, 6, 7, 7, 9, 9,
86 5, 5, 6, 7, 7, 9, 9, 10,
87 5, 5, 6, 7, 7, 9, 9, 10,
88 5, 6, 7, 7, 8, 9, 10, 12,
89 6, 7, 7, 8, 9, 10, 12, 15,
90 6, 7, 7, 9, 10, 11, 14, 17,
91 7, 7, 9, 10, 11, 14, 17, 21
93 4, 4, 4, 4, 4, 4, 4, 4,
94 4, 4, 4, 4, 4, 4, 4, 4,
95 4, 4, 4, 4, 4, 4, 4, 4,
96 4, 4, 4, 4, 4, 4, 4, 5,
97 4, 4, 4, 4, 4, 4, 5, 5,
98 4, 4, 4, 4, 4, 5, 5, 6,
99 4, 4, 4, 4, 5, 5, 6, 7,
100 4, 4, 4, 4, 5, 6, 7, 7
102 4, 4, 4, 4, 4, 4, 4, 4,
103 4, 4, 4, 4, 4, 4, 4, 4,
104 4, 4, 4, 4, 4, 4, 4, 4,
105 4, 4, 4, 4, 4, 4, 4, 5,
106 4, 4, 4, 4, 4, 4, 5, 5,
107 4, 4, 4, 4, 4, 5, 5, 6,
108 4, 4, 4, 4, 5, 5, 6, 7,
109 4, 4, 4, 4, 5, 6, 7, 7
111 2, 2, 2, 2, 2, 2, 2, 2,
112 2, 2, 2, 2, 2, 2, 2, 2,
113 2, 2, 2, 2, 2, 2, 2, 2,
114 2, 2, 2, 2, 2, 2, 2, 3,
115 2, 2, 2, 2, 2, 2, 3, 3,
116 2, 2, 2, 2, 2, 3, 3, 3,
117 2, 2, 2, 2, 3, 3, 3, 4,
118 2, 2, 2, 2, 3, 3, 4, 4,
124 4, 7, 9, 11, 13, 14, 63, 63,
125 7, 7, 11, 12, 14, 63, 63, 63,
126 9, 11, 13, 14, 63, 63, 63, 63,
127 11, 11, 13, 14, 63, 63, 63, 63,
128 11, 13, 14, 63, 63, 63, 63, 63,
129 13, 14, 63, 63, 63, 63, 63, 63,
130 13, 63, 63, 63, 63, 63, 63, 63,
131 63, 63, 63, 63, 63, 63, 63, 63
133 4, 5, 6, 7, 9, 11, 13, 15,
134 5, 5, 7, 8, 11, 13, 15, 17,
135 6, 7, 9, 11, 13, 15, 15, 17,
136 7, 7, 9, 11, 13, 15, 17, 19,
137 7, 9, 11, 13, 14, 16, 19, 23,
138 9, 11, 13, 14, 16, 19, 23, 29,
139 9, 11, 13, 15, 17, 21, 28, 35,
140 11, 13, 16, 17, 21, 28, 35, 41
142 4, 4, 5, 5, 6, 7, 7, 9,
143 4, 4, 5, 6, 7, 7, 9, 9,
144 5, 5, 6, 7, 7, 9, 9, 10,
145 5, 5, 6, 7, 7, 9, 9, 10,
146 5, 6, 7, 7, 8, 9, 10, 12,
147 6, 7, 7, 8, 9, 10, 12, 15,
148 6, 7, 7, 9, 10, 11, 14, 17,
149 7, 7, 9, 10, 11, 14, 17, 21
151 4, 4, 4, 4, 4, 4, 4, 4,
152 4, 4, 4, 4, 4, 4, 4, 4,
153 4, 4, 4, 4, 4, 4, 4, 4,
154 4, 4, 4, 4, 4, 4, 4, 5,
155 4, 4, 4, 4, 4, 4, 5, 5,
156 4, 4, 4, 4, 4, 5, 5, 6,
157 4, 4, 4, 4, 5, 5, 6, 7,
158 4, 4, 4, 4, 5, 6, 7, 7
160 4, 4, 4, 4, 4, 4, 4, 4,
161 4, 4, 4, 4, 4, 4, 4, 4,
162 4, 4, 4, 4, 4, 4, 4, 4,
163 4, 4, 4, 4, 4, 4, 4, 5,
164 4, 4, 4, 4, 4, 4, 5, 5,
165 4, 4, 4, 4, 4, 5, 5, 6,
166 4, 4, 4, 4, 5, 5, 6, 7,
167 4, 4, 4, 4, 5, 6, 7, 7
169 4, 4, 4, 4, 4, 4, 4, 4,
170 4, 4, 4, 4, 4, 4, 4, 4,
171 4, 4, 4, 4, 4, 4, 4, 4,
172 4, 4, 4, 4, 4, 4, 4, 5,
173 4, 4, 4, 4, 4, 4, 5, 5,
174 4, 4, 4, 4, 4, 5, 5, 6,
175 4, 4, 4, 4, 5, 5, 6, 7,
176 4, 4, 4, 4, 5, 6, 7, 7
189 int qmat_luma[16][64];
190 int qmat_chroma[16][64];
202 unsigned int rice_order, exp_order, switch_bits, first_exp,
exp, zeros;
205 switch_bits = codebook & 3;
206 rice_order = codebook >> 5;
207 exp_order = (codebook >> 2) & 7;
209 first_exp = ((switch_bits + 1) << rice_order);
211 if (val >= first_exp) {
213 val += (1 << exp_order);
215 zeros = exp - exp_order + switch_bits + 1;
218 }
else if (rice_order) {
219 put_bits(pb, (val >> rice_order), 0);
228 #define QSCALE(qmat,ind,val) ((val) / ((qmat)[ind])) 229 #define TO_GOLOMB(val) (((val) * 2) ^ ((val) >> 31)) 230 #define DIFF_SIGN(val, sign) (((val) >> 31) ^ (sign)) 231 #define IS_NEGATIVE(val) ((((val) >> 31) ^ -1) + 1) 232 #define TO_GOLOMB2(val,sign) ((val)==0 ? 0 : ((val) << 1) + (sign)) 236 int sign = (val >> 31);
237 return (val ^ sign) - sign;
240 #define FIRST_DC_CB 0xB8 245 int blocks_per_slice,
int *qmat)
249 int new_dc,
delta, diff_sign, new_code;
251 prev_dc =
QSCALE(qmat, 0, in[0] - 16384);
255 code = 5; sign = 0; idx = 64;
256 for (i = 1; i < blocks_per_slice; i++, idx += 64) {
257 new_dc =
QSCALE(qmat, 0, in[idx] - 16384);
258 delta = new_dc - prev_dc;
271 0x29, 0x29, 0x29, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x4C };
273 0x28, 0x28, 0x28, 0x4C };
276 int16_t *
in,
int blocks_per_slice,
int *qmat,
const uint8_t ff_prores_scan[64])
282 for (i = 1; i < 64; i++) {
283 int indp = ff_prores_scan[
i];
284 for (j = 0; j < blocks_per_slice; j++) {
285 int val =
QSCALE(qmat, indp, in[(j << 6) + indp]);
310 for (i = 0; i < 8; i++) {
332 for (i = 0; i < mb_count; i++) {
333 fdct_get(fdsp, src, src_stride, block + (0 << 6));
334 fdct_get(fdsp, src + 16, src_stride, block + (1 << 6));
335 fdct_get(fdsp, src + 8 * src_stride, src_stride, block + (2 << 6));
336 fdct_get(fdsp, src + 16 + 8 * src_stride, src_stride, block + (3 << 6));
341 }
else if (chroma && is_422){
342 for (i = 0; i < mb_count; i++) {
343 fdct_get(fdsp, src, src_stride, block + (0 << 6));
344 fdct_get(fdsp, src + 8 * src_stride, src_stride, block + (1 << 6));
349 for (i = 0; i < mb_count; i++) {
350 fdct_get(fdsp, src, src_stride, block + (0 << 6));
351 fdct_get(fdsp, src + 8 * src_stride, src_stride, block + (1 << 6));
352 fdct_get(fdsp, src + 16, src_stride, block + (2 << 6));
353 fdct_get(fdsp, src + 16 + 8 * src_stride, src_stride, block + (3 << 6));
362 const uint8_t ff_prores_scan[64])
364 int blocks_per_slice;
367 blocks_per_slice = mb_count << (2 - sub_sample_chroma);
378 int16_t * blocks_y, int16_t * blocks_u, int16_t * blocks_v,
379 unsigned mb_count,
uint8_t *buf,
unsigned data_size,
380 unsigned* y_data_size,
unsigned* u_data_size,
unsigned* v_data_size,
389 *u_data_size =
encode_slice_plane(blocks_u, mb_count, buf + *y_data_size, data_size - *y_data_size,
392 *v_data_size =
encode_slice_plane(blocks_v, mb_count, buf + *y_data_size + *u_data_size,
393 data_size - *y_data_size - *u_data_size,
397 return *y_data_size + *u_data_size + *v_data_size;
402 const int abits = 16;
404 const int dsize = 1 << dbits - 1;
405 int diff = cur - prev;
407 diff = av_mod_uintp2(diff, abits);
408 if (diff >= (1 << abits) - dsize)
410 if (diff < -dsize || diff > dsize || !diff) {
434 unsigned mb_count,
uint8_t *buf,
unsigned data_size,
unsigned* a_data_size)
436 const int abits = 16;
437 const int mask = (1 << abits) - 1;
438 const int num_coeffs = mb_count * 256;
439 int prev =
mask, cur;
442 int16_t * blocks = (int16_t *)src_a;
459 }
while (idx < num_coeffs);
467 "Underestimated required buffer size.\n");
476 unsigned dst_width,
unsigned dst_height,
int is_alpha_plane,
477 int is_interlaced,
int is_top_field)
479 int box_width =
FFMIN(width - x, dst_width);
480 int i, j, src_stride, box_height;
481 uint16_t last_pix, *last_line;
483 if (!is_interlaced) {
484 src_stride = stride >> 1;
485 src += y * src_stride + x;
486 box_height =
FFMIN(height - y, dst_height);
489 src += y * src_stride + x;
490 box_height =
FFMIN(height/2 - y, dst_height);
495 for (i = 0; i < box_height; ++
i) {
496 for (j = 0; j < box_width; ++j) {
497 if (!is_alpha_plane) {
500 dst[j] = src[j] << 6;
503 if (!is_alpha_plane) {
504 last_pix = dst[j - 1];
506 last_pix = dst[j - 1] << 6;
508 for (; j < dst_width; j++)
513 last_line = dst - dst_width;
514 for (; i < dst_height; i++) {
515 for (j = 0; j < dst_width; ++j) {
516 dst[j] = last_line[j];
524 unsigned dst_width,
unsigned dst_height,
int is_interlaced,
int is_top_field)
526 subimage_with_fill_template(src, x, y, stride, width, height, dst, dst_width, dst_height, 0, is_interlaced, is_top_field);
532 unsigned dst_width,
unsigned dst_height,
int is_interlaced,
int is_top_field)
534 subimage_with_fill_template(src, x, y, stride, width, height, dst, dst_width, dst_height, 1, is_interlaced, is_top_field);
538 int mb_y,
unsigned mb_count,
uint8_t *buf,
unsigned data_size,
539 int unsafe,
int *qp,
int is_interlaced,
int is_top_field)
541 int luma_stride, chroma_stride, alpha_stride = 0;
544 int ret = 0, slice_size;
545 uint8_t *dest_y, *dest_u, *dest_v;
546 unsigned y_data_size = 0, u_data_size = 0, v_data_size = 0, a_data_size = 0;
549 int low_bytes = (tgt_bits - (tgt_bits >> 3)) >> 3;
550 int high_bytes = (tgt_bits + (tgt_bits >> 3)) >> 3;
562 if (!is_interlaced) {
563 dest_y = pic->
data[0] + (mb_y << 4) * luma_stride + (mb_x << 5);
564 dest_u = pic->
data[1] + (mb_y << 4) * chroma_stride + (mb_x << (5 - ctx->
is_422));
565 dest_v = pic->
data[2] + (mb_y << 4) * chroma_stride + (mb_x << (5 - ctx->
is_422));
567 dest_y = pic->
data[0] + (mb_y << 4) * luma_stride * 2 + (mb_x << 5);
568 dest_u = pic->
data[1] + (mb_y << 4) * chroma_stride * 2 + (mb_x << (5 - ctx->
is_422));
569 dest_v = pic->
data[2] + (mb_y << 4) * chroma_stride * 2 + (mb_x << (5 - ctx->
is_422));
571 dest_y += luma_stride;
572 dest_u += chroma_stride;
573 dest_v += chroma_stride;
580 (uint16_t *) ctx->
fill_y, mb_count << 4, 16, is_interlaced, is_top_field);
583 (uint16_t *) ctx->
fill_u, mb_count << (4 - ctx->
is_422), 16, is_interlaced, is_top_field);
586 (uint16_t *) ctx->
fill_v, mb_count << (4 - ctx->
is_422), 16, is_interlaced, is_top_field);
594 mb_count, buf + hdr_size, data_size - hdr_size,
595 &y_data_size, &u_data_size, &v_data_size,
598 if (!is_interlaced) {
599 calc_plane_dct(fdsp, dest_y, blocks_y, luma_stride, mb_count, 0, 0);
603 calc_plane_dct(fdsp, dest_y, blocks_y, luma_stride * 2, mb_count, 0, 0);
609 mb_count, buf + hdr_size, data_size - hdr_size,
610 &y_data_size, &u_data_size, &v_data_size,
617 mb_count, buf + hdr_size, data_size - hdr_size,
618 &y_data_size, &u_data_size, &v_data_size,
621 }
else if (slice_size < low_bytes && *qp
626 mb_count, buf + hdr_size, data_size - hdr_size,
627 &y_data_size, &u_data_size, &v_data_size,
633 buf[0] = hdr_size << 3;
643 (uint16_t *) ctx->
fill_a, mb_count << 4, 16, is_interlaced, is_top_field);
645 buf + hdr_size + slice_size,
646 data_size - hdr_size - slice_size, &a_data_size);
652 return hdr_size + y_data_size + u_data_size + v_data_size + a_data_size;
656 uint8_t *buf,
const int buf_size,
const int picture_index,
const int is_top_field)
659 int mb_width = (avctx->
width + 15) >> 4;
660 int hdr_size, sl_size,
i;
661 int mb_y, sl_data_size, qp, mb_height, picture_height, unsafe_mb_height_limit;
662 int unsafe_bot, unsafe_right;
663 uint8_t *sl_data, *sl_data_sizes;
664 int slice_per_line = 0, rem = mb_width;
667 mb_height = (avctx->
height + 15) >> 4;
668 unsafe_mb_height_limit = mb_height;
671 picture_height = (avctx->
height + 1) / 2;
673 picture_height = avctx->
height / 2;
675 mb_height = (picture_height + 15) >> 4;
676 unsafe_mb_height_limit = mb_height;
680 slice_per_line += rem >>
i;
685 hdr_size = 8; sl_data_size = buf_size - hdr_size;
686 sl_data_sizes = buf + hdr_size;
687 sl_data = sl_data_sizes + (slice_per_line * mb_height * 2);
688 for (mb_y = 0; mb_y < mb_height; mb_y++) {
691 while (mb_x < mb_width) {
692 while (mb_width - mb_x < slice_mb_count)
693 slice_mb_count >>= 1;
695 unsafe_bot = (avctx->
height & 0xf) && (mb_y == unsafe_mb_height_limit - 1);
696 unsafe_right = (avctx->
width & 0xf) && (mb_x + slice_mb_count == mb_width);
698 sl_size =
encode_slice(avctx, pic, mb_x, mb_y, slice_mb_count,
699 sl_data, sl_data_size, unsafe_bot || unsafe_right, &qp, ctx->
is_interlaced, is_top_field);
704 bytestream_put_be16(&sl_data_sizes, sl_size);
706 sl_data_size -= sl_size;
707 mb_x += slice_mb_count;
711 buf[0] = hdr_size << 3;
712 AV_WB32(buf + 1, sl_data - buf);
713 AV_WB16(buf + 5, slice_per_line * mb_height);
716 return sl_data - buf;
720 const AVFrame *pict,
int *got_packet)
723 int header_size = 148;
725 int compress_frame_size, pic_size,
ret, is_top_field_first = 0;
734 compress_frame_size = 8 + header_size;
736 bytestream_put_be32(&buf, compress_frame_size);
739 bytestream_put_be16(&buf, header_size);
740 bytestream_put_be16(&buf, 0);
742 bytestream_put_be16(&buf, avctx->
width);
743 bytestream_put_be16(&buf, avctx->
height);
751 is_top_field_first = 1;
759 *buf++ = frame_flags;
781 pkt->
size - compress_frame_size, 0, is_top_field_first);
785 compress_frame_size += pic_size;
789 pkt->
size - compress_frame_size, 1, !is_top_field_first);
793 compress_frame_size += pic_size;
798 pkt->
size = compress_frame_size;
807 for (i = 0; i < 64; i++)
808 dst[i] = src[i] * scale;
825 if (avctx->
width & 0x1) {
827 "frame width needs to be multiple of 2\n");
831 if (avctx->
width > 65534 || avctx->
height > 65535) {
833 "The maximum dimensions are 65534x65535\n");
837 if (strlen(ctx->
vendor) != 4) {
846 "encoding with ProRes standard (apcn) profile\n");
850 "encoding with ProRes 4444 (ap4h) profile\n");
854 "encoding with ProRes 4444+ (ap4h) profile\n");
864 "unknown profile %d, use [0 - apco, 1 - apcs, 2 - apcn (default), 3 - apch, 4 - ap4h, 5 - ap4x]\n",
869 "encoding with ProRes 444/Xq (ap4h/ap4x) profile, need YUV444P10 input\n");
874 "encoding with ProRes Proxy/LT/422/422 HQ (apco, apcs, apcn, ap4h) profile, need YUV422P10 input\n");
908 for (i = 1; i <= 16; i++) {
925 #define OFFSET(x) offsetof(ProresContext, x) 926 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
static const unsigned codebook[256][2]
static const AVClass prores_enc_class
This structure describes decoded (raw) audio or video data.
static int encode_slice(AVCodecContext *avctx, const AVFrame *pic, int mb_x, int mb_y, unsigned mb_count, uint8_t *buf, unsigned data_size, int unsafe, int *qp, int is_interlaced, int is_top_field)
static int prores_encode_picture(AVCodecContext *avctx, const AVFrame *pic, uint8_t *buf, const int buf_size, const int picture_index, const int is_top_field)
#define AV_CODEC_FLAG_INTERLACED_DCT
Use interlaced DCT.
static void put_sbits(PutBitContext *pb, int n, int32_t value)
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define LIBAVUTIL_VERSION_INT
#define TO_GOLOMB2(val, sign)
static av_cold int init(AVCodecContext *avctx)
SMPTE ST 432-1 (2010) / P3 D65 / Display P3.
#define LOCAL_ALIGNED(a, t, v,...)
const char * av_default_item_name(void *ptr)
Return the context name.
static void encode_ac_coeffs(PutBitContext *pb, int16_t *in, int blocks_per_slice, int *qmat, const uint8_t ff_prores_scan[64])
static av_cold int prores_encode_init(AVCodecContext *avctx)
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static const AVOption options[]
#define FF_PROFILE_PRORES_LT
SMPTE ST 431-2 (2011) / DCI P3.
static void calc_plane_dct(FDCTDSPContext *fdsp, uint8_t *src, int16_t *blocks, int src_stride, int mb_count, int chroma, int is_422)
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx)
static const uint8_t QMAT_CHROMA[6][64]
#define FF_PROFILE_PRORES_XQ
static av_always_inline int encode_alpha_slice_data(AVCodecContext *avctx, int8_t *src_a, unsigned mb_count, uint8_t *buf, unsigned data_size, unsigned *a_data_size)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
The exact code depends on how similar the blocks are and how related they are to the block
static void encode_dc_coeffs(PutBitContext *pb, int16_t *in, int blocks_per_slice, int *qmat)
static const int qp_start_table[]
const uint8_t * scantable
int interlaced_frame
The content of the picture is interlaced.
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
#define AV_INPUT_BUFFER_MIN_SIZE
minimum encoding buffer size Used to avoid some checks during header writing.
const AVProfile ff_prores_profiles[]
static const int bitrate_table[]
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
static const uint8_t lev_to_cb[10]
static const int valid_primaries[]
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
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 prores_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
static int put_bits_left(PutBitContext *s)
static const uint16_t mask[17]
static void put_alpha_run(PutBitContext *pb, int run)
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
static av_cold int prores_encode_close(AVCodecContext *avctx)
int flags
AV_CODEC_FLAG_*.
enum AVColorSpace colorspace
YUV colorspace type.
also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
const char * name
Name of the codec implementation.
#define AV_PIX_FMT_YUV444P10
static const int valid_trc[]
#define AV_CODEC_CAP_FRAME_THREADS
Codec supports frame-level multithreading.
int flags
A combination of AV_PKT_FLAG values.
static int put_bits_count(PutBitContext *s)
static av_always_inline int get_level(int val)
SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems.
static void scale_mat(const uint8_t *src, int *dst, int scale)
static void put_alpha_diff(PutBitContext *pb, int cur, int prev)
static const AVProfile profiles[]
int width
picture width / height.
#define FF_PROFILE_PRORES_STANDARD
#define FF_PROFILE_UNKNOWN
ITU-R BT2020 non-constant luminance system.
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
#define FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
#define DEFAULT_SLICE_MB_WIDTH
void(* fdct)(int16_t *block)
#define AV_PIX_FMT_YUVA444P10
AVCodec ff_prores_encoder
#define FF_PROFILE_PRORES_4444
#define AV_LOG_INFO
Standard information.
const uint8_t ff_prores_interlaced_scan[64]
Libavcodec external API header.
int linesize[AV_NUM_DATA_POINTERS]
For video, size in bytes of each picture line.
static int encode_slice_plane(int16_t *blocks, int mb_count, uint8_t *buf, unsigned buf_size, int *qmat, int sub_sample_chroma, const uint8_t ff_prores_scan[64])
main external API structure.
static const uint8_t dc_codebook[7]
const uint8_t ff_prores_progressive_scan[64]
static const int qp_end_table[]
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
uint8_t pi<< 24) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8, uint8_t,(*(const uint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16, int16_t,(*(const int16_t *) pi >> 8)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16, int16_t,*(const int16_t *) pi *(1.0/(1<< 15))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32, int32_t,(*(const int32_t *) pi >> 24)+0x80) CONV_FUNC_GROUP(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32, int32_t,*(const int32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, float, av_clip_uint8(lrintf(*(const float *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, float, av_clip_int16(lrintf(*(const float *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, float, av_clipl_int32(llrintf(*(const float *) pi *(1U<< 31)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, double, av_clip_uint8(lrint(*(const double *) pi *(1<< 7))+0x80)) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, double, av_clip_int16(lrint(*(const double *) pi *(1<< 15)))) CONV_FUNC_GROUP(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, double, av_clipl_int32(llrint(*(const double *) pi *(1U<< 31))))#define SET_CONV_FUNC_GROUP(ofmt, ifmt) static void set_generic_function(AudioConvert *ac){}void ff_audio_convert_free(AudioConvert **ac){if(!*ac) return;ff_dither_free(&(*ac) ->dc);av_freep(ac);}AudioConvert *ff_audio_convert_alloc(AVAudioResampleContext *avr, enum AVSampleFormat out_fmt, enum AVSampleFormat in_fmt, int channels, int sample_rate, int apply_map){AudioConvert *ac;int in_planar, out_planar;ac=av_mallocz(sizeof(*ac));if(!ac) return NULL;ac->avr=avr;ac->out_fmt=out_fmt;ac->in_fmt=in_fmt;ac->channels=channels;ac->apply_map=apply_map;if(avr->dither_method!=AV_RESAMPLE_DITHER_NONE &&av_get_packed_sample_fmt(out_fmt)==AV_SAMPLE_FMT_S16 &&av_get_bytes_per_sample(in_fmt) > 2){ac->dc=ff_dither_alloc(avr, out_fmt, in_fmt, channels, sample_rate, apply_map);if(!ac->dc){av_free(ac);return NULL;}return ac;}in_planar=ff_sample_fmt_is_planar(in_fmt, channels);out_planar=ff_sample_fmt_is_planar(out_fmt, channels);if(in_planar==out_planar){ac->func_type=CONV_FUNC_TYPE_FLAT;ac->planes=in_planar?ac->channels:1;}else if(in_planar) ac->func_type=CONV_FUNC_TYPE_INTERLEAVE;else ac->func_type=CONV_FUNC_TYPE_DEINTERLEAVE;set_generic_function(ac);if(ARCH_AARCH64) ff_audio_convert_init_aarch64(ac);if(ARCH_ARM) ff_audio_convert_init_arm(ac);if(ARCH_X86) ff_audio_convert_init_x86(ac);return ac;}int ff_audio_convert(AudioConvert *ac, AudioData *out, AudioData *in){int use_generic=1;int len=in->nb_samples;int p;if(ac->dc){av_log(ac->avr, AV_LOG_TRACE,"%d samples - audio_convert: %s to %s (dithered)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt));return ff_convert_dither(ac-> in
Describe the class of an AVClass context structure.
const char * name
short name for the profile
static av_always_inline unsigned encode_slice_data(AVCodecContext *avctx, int16_t *blocks_y, int16_t *blocks_u, int16_t *blocks_v, unsigned mb_count, uint8_t *buf, unsigned data_size, unsigned *y_data_size, unsigned *u_data_size, unsigned *v_data_size, int qp)
#define FF_PROFILE_PRORES_HQ
#define QSCALE(qmat, ind, val)
static const AVClass proresaw_enc_class
static void encode_codeword(PutBitContext *pb, int val, int codebook)
static enum AVPixelFormat pix_fmts[]
static void subimage_alpha_with_fill(uint16_t *src, unsigned x, unsigned y, unsigned stride, unsigned width, unsigned height, uint16_t *dst, unsigned dst_width, unsigned dst_height, int is_interlaced, int is_top_field)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
#define AV_PIX_FMT_YUV422P10
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
static void fdct_get(FDCTDSPContext *fdsp, uint8_t *pixels, int stride, int16_t *block)
GLint GLenum GLboolean GLsizei stride
AVCodec ff_prores_aw_encoder
static const uint8_t QMAT_LUMA[6][64]
common internal api header.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static av_always_inline void bytestream_put_buffer(uint8_t **b, const uint8_t *src, unsigned int size)
ARIB STD-B67, known as "Hybrid log-gamma".
static void subimage_with_fill_template(uint16_t *src, unsigned x, unsigned y, unsigned stride, unsigned width, unsigned height, uint16_t *dst, unsigned dst_width, unsigned dst_height, int is_alpha_plane, int is_interlaced, int is_top_field)
static av_always_inline int diff(const uint32_t a, const uint32_t b)
#define xf(width, name, var, range_min, range_max, subs,...)
int top_field_first
If the content is interlaced, is top field displayed first.
enum AVColorPrimaries color_primaries
also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
#define FF_PROFILE_PRORES_PROXY
enum AVColorTransferCharacteristic color_trc
static const int valid_colorspace[]
int ff_int_from_list_or_default(void *ctx, const char *val_name, int val, const int *array_valid_values, int default_value)
Check if a value is in the list.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later.That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another.Frame references ownership and permissions
#define DIFF_SIGN(val, sign)
static const uint8_t run_to_cb[16]
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
AVPixelFormat
Pixel format.
static double val(void *priv, double ch)
This structure stores compressed data.
static void subimage_with_fill(uint16_t *src, unsigned x, unsigned y, unsigned stride, unsigned width, unsigned height, uint16_t *dst, unsigned dst_width, unsigned dst_height, int is_interlaced, int is_top_field)