This commit adds a 12-bit DCT function to directly write to Bayer images. Will be used in the following commit.
Unified · Split
| @@ -99,6 +99,15 @@ static inline void put_pixel(uint16_t *dst, ptrdiff_t linesize, const int16_t *i · 98 unmodified lines | ||
| 99 | 99 | } |
| 100 | 100 | } |
| 101 | 101 | |
| 102 | +static inline void put_pixel_bayer_12(uint16_t *dst, ptrdiff_t linesize, | |
| 103 | + const int16_t *in) | |
| 104 | +{ | |
| 105 | + for (int y = 0; y < 8; y++, dst += linesize) { | |
| 106 | + for (int x = 0; x < 8; x++) | |
| 107 | + dst[x*2] = CLIP_12(in[(y << 3) + x]) << 4; | |
| 108 | + } | |
| 109 | +} | |
| 110 | + | |
| 102 | 111 | static void put_pixels_10(uint16_t *dst, ptrdiff_t linesize, const int16_t *in) |
| 103 | 112 | { |
| 104 | 113 | put_pixel(dst, linesize, in, 10); |
| @@ -121,6 +130,13 @@ static void prores_idct_put_12_c(uint16_t *out, ptrdiff_t linesize, int16_t *blo · 16 unmodified lines | ||
| 121 | 130 | put_pixels_12(out, linesize >> 1, block); |
| 122 | 131 | } |
| 123 | 132 | |
| 133 | +static void prores_idct_put_bayer_12_c(uint16_t *out, ptrdiff_t linesize, | |
| 134 | + int16_t *block, const int16_t *qmat) | |
| 135 | +{ | |
| 136 | + prores_idct_12(block, qmat); | |
| 137 | + put_pixel_bayer_12(out, linesize << 1, block); | |
| 138 | +} | |
| 139 | + | |
| 124 | 140 | av_cold void ff_proresdsp_init(ProresDSPContext *dsp, int bits_per_raw_sample) |
| 125 | 141 | { |
| 126 | 142 | if (bits_per_raw_sample == 10) { |
| @@ -129,6 +145,7 @@ av_cold void ff_proresdsp_init(ProresDSPContext *dsp, int bits_per_raw_sample) · 2 unmodified lines | ||
| 129 | 145 | } else { |
| 130 | 146 | av_assert1(bits_per_raw_sample == 12); |
| 131 | 147 | dsp->idct_put = prores_idct_put_12_c; |
| 148 | + dsp->idct_put_bayer = prores_idct_put_bayer_12_c; | |
| 132 | 149 | dsp->idct_permutation_type = FF_IDCT_PERM_NONE; |
| 133 | 150 | } |
| 134 | 151 | |
| @@ -30,6 +30,7 @@ typedef struct ProresDSPContext { · 29 unmodified lines | ||
| 30 | 30 | int idct_permutation_type; |
| 31 | 31 | uint8_t idct_permutation[64]; |
| 32 | 32 | void (*idct_put)(uint16_t *out, ptrdiff_t linesize, int16_t *block, const int16_t *qmat); |
| 33 | + void (*idct_put_bayer)(uint16_t *out, ptrdiff_t linesize, int16_t *block, const int16_t *qmat); | |
| 33 | 34 | } ProresDSPContext; |
| 34 | 35 | |
| 35 | 36 | void ff_proresdsp_init(ProresDSPContext *dsp, int bits_per_raw_sample); |