Go to the documentation of this file.
19 #ifndef AVCODEC_IDCTDSP_H
20 #define AVCODEC_IDCTDSP_H
37 const uint8_t permutation[64]);
46 uint8_t *restrict pixels ,
49 uint8_t *restrict pixels ,
52 uint8_t *restrict pixels ,
63 ptrdiff_t line_size, int16_t *
block );
70 ptrdiff_t line_size, int16_t *
block );
100 unsigned high_bit_depth);
102 unsigned high_bit_depth);
104 unsigned high_bit_depth);
106 unsigned high_bit_depth);
108 unsigned high_bit_depth);
110 unsigned high_bit_depth);
112 unsigned high_bit_depth);
114 unsigned high_bit_depth);
int ff_init_scantable_permutation_x86(uint8_t *idct_permutation, enum idct_permutation_type perm_type)
void ff_idctdsp_init(IDCTDSPContext *c, struct AVCodecContext *avctx)
void(* idct_add)(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
block -> idct -> add dest -> clip to unsigned 8 bit -> dest.
void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels, ptrdiff_t line_size)
void(* idct)(int16_t *block)
void(* idct_put)(uint8_t *dest, ptrdiff_t line_size, int16_t *block)
block -> idct -> clip to unsigned 8 bit -> dest.
void ff_idctdsp_init_riscv(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void ff_idctdsp_init_alpha(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void ff_permute_scantable(uint8_t dst[64], const uint8_t src[64], const uint8_t permutation[64])
void ff_init_scantable_permutation(uint8_t *idct_permutation, enum idct_permutation_type perm_type)
void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels, ptrdiff_t line_size)
void ff_idctdsp_init_x86(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void(* put_signed_pixels_clamped)(const int16_t *block, uint8_t *restrict pixels, ptrdiff_t line_size)
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
void(* add_pixels_clamped)(const int16_t *block, uint8_t *restrict pixels, ptrdiff_t line_size)
void ff_idctdsp_init_mips(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void(* put_pixels_clamped)(const int16_t *block, uint8_t *restrict pixels, ptrdiff_t line_size)
uint8_t ptrdiff_t const uint8_t ptrdiff_t int intptr_t intptr_t int int16_t * dst
void ff_idctdsp_init_ppc(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void ff_idctdsp_init_aarch64(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
main external API structure.
enum idct_permutation_type perm_type
uint8_t idct_permutation[64]
IDCT input permutation.
The exact code depends on how similar the blocks are and how related they are to the block
void ff_idctdsp_init_arm(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)
void ff_idctdsp_init_loongarch(IDCTDSPContext *c, struct AVCodecContext *avctx, unsigned high_bit_depth)