24 int srcStride[],
int srcSliceY,
int srcSliceH,
25 uint8_t *dst[],
int dstStride[])
28 int nb_components =
desc->nb_components;
30 int plane_count =
isGray(
c->srcFormat) ? 1 : 3;
31 int sixteen_bits =
desc->comp[0].depth >= 9;
32 unsigned off = 1<<(
desc->comp[0].depth - 1);
35 int target_table[2][3];
37 for (plane = 0; plane < plane_count; plane++) {
40 a = (1<<(
desc->comp[0].depth - 1))/2;
41 b = 3*(1<<(
desc->comp[0].depth-1))/2;
49 for (plane = 0; plane < plane_count; plane++) {
50 int w = plane ?
c->chrSrcW :
c->srcW;
51 int x_subsample = plane ?
desc->log2_chroma_w: 0;
52 int y_subsample = plane ?
desc->log2_chroma_h: 0;
54 if (x_subsample || y_subsample) {
58 ptrdiff_t alpha_step = srcStride[plane_count] >> 1;
59 const uint16_t *
s = (
const uint16_t *)(
src[plane ] + srcStride[plane ] * y);
60 const uint16_t *
a = (
const uint16_t *)(
src[plane_count] + (srcStride[plane_count] * y << y_subsample));
61 uint16_t *d = ( uint16_t *)(dst[plane ] + dstStride[plane ] * y);
63 for (
x = 0;
x <
w;
x++) {
66 a[2*
x + alpha_step] +
a[2*
x + alpha_step + 1]) >> 2;
73 for (
x = 0;
x <
w;
x++) {
84 ptrdiff_t alpha_step = srcStride[plane_count];
85 const uint8_t *
s =
src[plane ] + srcStride[plane] * y;
86 const uint8_t *
a =
src[plane_count] + (srcStride[plane_count] * y << y_subsample);
87 uint8_t *d = dst[plane ] + dstStride[plane] * y;
88 for (
x = 0;
x <
w;
x++) {
91 a[2*
x + alpha_step] +
a[2*
x + alpha_step + 1]) >> 2;
94 u =
s[
x]*
alpha + target_table[((
x^y)>>5)&1][plane]*(255-
alpha) + 128;
100 const uint16_t *
s = (
const uint16_t *)(
src[plane ] + srcStride[plane ] * y);
101 const uint16_t *
a = (
const uint16_t *)(
src[plane_count] + srcStride[plane_count] * y);
102 uint16_t *d = ( uint16_t *)(dst[plane ] + dstStride[plane ] * y);
104 for (
x = 0;
x <
w;
x++) {
105 unsigned u =
s[
x]*
a[
x] + target_table[((
x^y)>>5)&1][plane]*(
max-
a[
x]) + off;
109 for (
x = 0;
x <
w;
x++) {
111 unsigned u =
av_bswap16(
s[
x])*aswap + target_table[((
x^y)>>5)&1][plane]*(
max-aswap) + off;
116 const uint8_t *
s =
src[plane ] + srcStride[plane] * y;
117 const uint8_t *
a =
src[plane_count] + srcStride[plane_count] * y;
118 uint8_t *d = dst[plane ] + dstStride[plane] * y;
119 for (
x = 0;
x <
w;
x++) {
120 unsigned u =
s[
x]*
a[
x] + target_table[((
x^y)>>5)&1][plane]*(255-
a[
x]) + 128;
121 d[
x] = (257*
u) >> 16;
128 int alpha_pos =
desc->comp[plane_count].offset;
130 for (y = srcSliceY; y <
srcSliceH; y++) {
132 const uint16_t *
s = (
const uint16_t *)(
src[0] + srcStride[0] * y + 2*!alpha_pos);
133 const uint16_t *
a = (
const uint16_t *)(
src[0] + srcStride[0] * y + alpha_pos);
134 uint16_t *d = ( uint16_t *)(dst[0] + dstStride[0] * y);
136 for (
x = 0;
x <
w;
x++) {
137 for (plane = 0; plane < plane_count; plane++) {
138 int x_index = (plane_count + 1) *
x;
139 unsigned u =
s[x_index + plane]*
a[x_index] + target_table[((
x^y)>>5)&1][plane]*(
max-
a[x_index]) + off;
144 for (
x = 0;
x <
w;
x++) {
145 for (plane = 0; plane < plane_count; plane++) {
146 int x_index = (plane_count + 1) *
x;
148 unsigned u =
av_bswap16(
s[x_index + plane])*aswap + target_table[((
x^y)>>5)&1][plane]*(
max-aswap) + off;
154 const uint8_t *
s =
src[0] + srcStride[0] * y + !alpha_pos;
155 const uint8_t *
a =
src[0] + srcStride[0] * y + alpha_pos;
156 uint8_t *d = dst[0] + dstStride[0] * y;
157 for (
x = 0;
x <
w;
x++) {
158 for (plane = 0; plane < plane_count; plane++) {
159 int x_index = (plane_count + 1) *
x;
160 unsigned u =
s[x_index + plane]*
a[x_index] + target_table[((
x^y)>>5)&1][plane]*(255-
a[x_index]) + 128;
161 d[plane_count*
x + plane] = (257*
u) >> 16;