Go to the documentation of this file.
31 #define IN_IDCT_DEPTH 16
46 #define IN_IDCT_DEPTH 32
59 for (
int i = 0;
i < 64;
i++)
62 for (
int i = 0;
i < 8;
i++)
63 idctRowCondDC_extrashift_10(
block +
i*8, 2);
65 for (
int i = 0;
i < 8;
i++) {
67 idctSparseCol_extrashift_10(
block +
i);
73 for (
int i = 0;
i < 64;
i++)
76 for (
int i = 0;
i < 8;
i++)
77 idctRowCondDC_int16_12bit(
block +
i*8, 0);
79 for (
int i = 0;
i < 8;
i++) {
81 idctSparseCol_int16_12bit(
block +
i);
91 for (
int i = 0;
i < 64;
i++)
94 for (
int i = 0;
i < 8;
i++)
95 idctRowCondDC_int32_12bit(
block +
i*8, 0);
97 for (
int i = 0;
i < 8;
i++) {
99 idctSparseCol_int32_12bit(
block +
i);
103 #define CLIP_MIN (1 << 2)
104 #define CLIP_MAX_10 (1 << 10) - CLIP_MIN - 1
105 #define CLIP_MAX_12 (1 << 12) - CLIP_MIN - 1
107 #define CLIP_10(x) (av_clip((x), CLIP_MIN, CLIP_MAX_10))
108 #define CLIP_12(x) (av_clip((x), CLIP_MIN, CLIP_MAX_12))
114 static inline void put_pixel(uint16_t *
dst, ptrdiff_t linesize,
const int16_t *in,
int bits_per_raw_sample) {
115 for (
int y = 0; y < 8; y++,
dst += linesize) {
116 for (
int x = 0; x < 8; x++) {
117 int src_offset = (y << 3) + x;
119 if (bits_per_raw_sample == 10) {
130 const int32_t *in,
const uint16_t *lin_curve)
132 for (
int y = 0; y < 8; y++,
dst += linesize) {
133 for (
int x = 0; x < 8; x++) {
136 uint32_t seg = (uint32_t)
u >> 13;
137 uint32_t frac = (uint32_t)
u & 0x1FFF;
138 uint32_t cp0 = lin_curve[seg];
139 uint32_t cp1 = seg < 7 ? lin_curve[seg + 1] : 0;
140 uint32_t o = (cp0 * 8192 + ((cp1 - cp0) & 0xFFFF) * frac + 4096) >> 13;
170 const uint16_t *lin_curve)
178 if (bits_per_raw_sample == 10) {
188 #if ARCH_X86 && HAVE_X86ASM
#define u(width, name, range_min, range_max)
int idct_permutation_type
void ff_proresdsp_init_x86(ProresDSPContext *dsp, int bits_per_raw_sample)
static void put_pixel(uint16_t *dst, ptrdiff_t linesize, const int16_t *in, int bits_per_raw_sample)
Add bias value, clamp and output pixels of a slice.
static void put_pixels_12(uint16_t *dst, ptrdiff_t linesize, const int16_t *in)
static void prores_idct_10(int16_t *restrict block, const int16_t *restrict qmat)
Special version of ff_simple_idct_int16_10bit() which does dequantization and scales by a factor of 2...
uint8_t idct_permutation[64]
av_cold void ff_proresdsp_init(ProresDSPContext *dsp, int bits_per_raw_sample)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
#define i(width, name, range_min, range_max)
void(* idct_put_bayer)(uint16_t *out, ptrdiff_t linesize, int32_t *block, const int16_t *qmat, const uint16_t *lin_curve)
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
static void put_pixel_bayer_lin_curve_12(uint16_t *dst, ptrdiff_t linesize, const int32_t *in, const uint16_t *lin_curve)
static void prores_idct_bayer_32(int32_t *restrict block, const int16_t *restrict qmat)
static void prores_idct_put_bayer_12_c(uint16_t *out, ptrdiff_t linesize, int32_t *block, const int16_t *qmat, const uint16_t *lin_curve)
static void prores_idct_12(int16_t *restrict block, const int16_t *restrict qmat)
static void put_pixels_10(uint16_t *dst, ptrdiff_t linesize, const int16_t *in)
static void prores_idct_put_10_c(uint16_t *out, ptrdiff_t linesize, int16_t *block, const int16_t *qmat)
av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation, enum idct_permutation_type perm_type)
The exact code depends on how similar the blocks are and how related they are to the block
void(* idct_put)(uint16_t *out, ptrdiff_t linesize, int16_t *block, const int16_t *qmat)
static void prores_idct_put_12_c(uint16_t *out, ptrdiff_t linesize, int16_t *block, const int16_t *qmat)