33 memset(max_pixsteps, 0, 4*
sizeof(max_pixsteps[0]));
34 if (max_pixstep_comps)
35 memset(max_pixstep_comps, 0, 4*
sizeof(max_pixstep_comps[0]));
37 for (i = 0; i < 4; i++) {
41 if (max_pixstep_comps)
42 max_pixstep_comps[comp->
plane] = i;
58 s = (max_step_comp[plane] == 1 || max_step_comp[plane] == 2) ? desc->
log2_chroma_w : 0;
59 return max_step[plane] * (((width + (1 << s) - 1)) >> s);
69 memset(linesizes, 0, 4*
sizeof(linesizes[0]));
82 for (i = 0; i < 4; i++) {
83 int s = (max_step_comp[i] == 1 || max_step_comp[i] == 2) ? desc->
log2_chroma_w : 0;
84 int shifted_w = ((width + (1 << s) - 1)) >> s;
85 if (max_step[i] > INT_MAX / shifted_w)
87 linesizes[i] = max_step[i] * shifted_w;
94 uint8_t *ptr,
const int linesizes[4])
96 int i, total_size,
size[4], has_plane[4];
99 memset(data , 0,
sizeof(data[0])*4);
100 memset(size , 0,
sizeof(size));
101 memset(has_plane, 0,
sizeof(has_plane));
107 if (linesizes[0] > (INT_MAX - 1024) / height)
109 size[0] = linesizes[0] *
height;
112 size[0] = (size[0] + 3) & ~3;
113 data[1] = ptr + size[0];
114 return size[0] + 256 * 4;
117 for (i = 0; i < 4; i++)
120 total_size = size[0];
121 for (i = 1; i < 4 && has_plane[i]; i++) {
123 data[i] = data[i-1] + size[i-1];
124 h = (height + (1 << s) - 1) >> s;
125 if (linesizes[i] > INT_MAX / h)
127 size[i] = h * linesizes[i];
128 if (total_size > INT_MAX - size[i])
130 total_size += size[i];
140 for (i = 0; i < 256; i++) {
170 pal[i] = b + (g<<8) + (r<<16);
187 for (i = 0; i < 4; i++)
188 linesizes[i] =
FFALIGN(linesizes[i], align);
217 if ((
int)w>0 && (
int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8)
225 const uint8_t *src,
int src_linesize,
226 int bytewidth,
int height)
230 for (;height > 0; height--) {
231 memcpy(dst, src, bytewidth);
238 const uint8_t *src_data[4],
const int src_linesizes[4],
248 src_data[0], src_linesizes[0],
251 memcpy(dst_data[1], src_data[1], 4*256);
253 int i, planes_nb = 0;
258 for (i = 0; i < planes_nb; i++) {
261 if (i == 1 || i == 2) {
265 src_data[i], src_linesizes[i],