if (desc->flags & AV_PIX_FMT_FLAG_PAL ||
desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) {
- size[0] = (size[0] + 3) & ~3;
data[1] = ptr + size[0]; /* palette is stored here as 256 32 bits words */
return size[0] + 256 * 4;
}
av_free(buf);
return ret;
}
- if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)
+ if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) {
avpriv_set_systematic_pal2((uint32_t*)pointers[1], pix_fmt);
+ if (align < 4) {
+ av_log(NULL, AV_LOG_ERROR, "Formats with a palette require a minimum alignment of 4\n");
+ return AVERROR(EINVAL);
+ }
+ }
if ((desc->flags & AV_PIX_FMT_FLAG_PAL ||
desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) &&
// do not include palette for these pseudo-paletted formats
if (desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)
- return width * height;
+ return FFALIGN(width, align) * height;
return av_image_fill_arrays(data, linesize, NULL, pix_fmt,
width, height, align);
}
if (desc->flags & AV_PIX_FMT_FLAG_PAL) {
- uint32_t *d32 = (uint32_t *)(((size_t)dst + 3) & ~3);
+ uint32_t *d32 = (uint32_t *)dst;
+
for (i = 0; i<256; i++)
AV_WL32(d32 + i, AV_RN32(src_data[1] + 4*i));
}