… | |
… | |
2269 | palette = SvRV (palette); |
2269 | palette = SvRV (palette); |
2270 | |
2270 | |
2271 | STRLEN idxlen; |
2271 | STRLEN idxlen; |
2272 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2272 | const uint8_t *idx = (const uint8_t *)SvPVbyte (data, idxlen); |
2273 | |
2273 | |
2274 | region **regionmap = (region **)malloc ( |
2274 | region_ptr *regionmap = new region_ptr [av_len ((AV *)palette) + 1]; |
2275 | (av_len ((AV *)palette) + 1) * sizeof (region *)); |
|
|
2276 | uint8_t *regions = salloc<uint8_t> (THIS->size ()); |
2275 | uint8_t *regions = salloc<uint8_t> (THIS->size ()); |
2277 | |
2276 | |
2278 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2277 | for (int i = av_len ((AV *)palette) + 1; i--; ) |
2279 | regionmap [i] = region::find ( |
2278 | regionmap [i] = region::find (SvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
2280 | SvPVutf8_nolen (*av_fetch ((AV *)palette, i, 1))); |
|
|
2281 | |
2279 | |
2282 | for (int y = 0; y < THIS->height; ++y) |
2280 | for (int y = 0; y < THIS->height; ++y) |
2283 | memcpy (regions + y * THIS->width, idx + offset + y * stride, THIS->width); |
2281 | memcpy (regions + y * THIS->width, idx + offset + y * stride, THIS->width); |
2284 | |
2282 | |
2285 | sfree (THIS->regions, THIS->size ()); |
2283 | sfree (THIS->regions, THIS->size ()); |
2286 | free (THIS->regionmap); |
2284 | delete [] THIS->regionmap; |
2287 | |
2285 | |
2288 | THIS->regions = regions; |
2286 | THIS->regions = regions; |
2289 | THIS->regionmap = regionmap; |
2287 | THIS->regionmap = regionmap; |
2290 | } |
2288 | } |
2291 | |
2289 | |