size[0] = linesizes[0] * height;
if (desc->flags & AV_PIX_FMT_FLAG_PAL ||
- desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) {
+ desc->flags & FF_PSEUDOPAL) {
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 & FF_PSEUDOPAL && pointers[1])) {
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");
}
if ((desc->flags & AV_PIX_FMT_FLAG_PAL ||
- desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) &&
+ desc->flags & FF_PSEUDOPAL) && pointers[1] &&
pointers[1] - pointers[0] > linesizes[0] * h) {
/* zero-initialize the padding before the palette */
memset(pointers[0] + linesizes[0] * h, 0,
{
if (!dst || !src)
return;
- av_assert0(abs(src_linesize) >= bytewidth);
- av_assert0(abs(dst_linesize) >= bytewidth);
+ av_assert0(FFABS(src_linesize) >= bytewidth);
+ av_assert0(FFABS(dst_linesize) >= bytewidth);
for (;height > 0; height--) {
memcpy(dst, src, bytewidth);
dst += dst_linesize;
return;
if (desc->flags & AV_PIX_FMT_FLAG_PAL ||
- desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) {
+ desc->flags & FF_PSEUDOPAL) {
copy_plane(dst_data[0], dst_linesizes[0],
src_data[0], src_linesizes[0],
width, height);
/* copy the palette */
- memcpy(dst_data[1], src_data[1], 4*256);
+ if ((desc->flags & AV_PIX_FMT_FLAG_PAL) || (dst_data[1] && src_data[1]))
+ memcpy(dst_data[1], src_data[1], 4*256);
} else {
int i, planes_nb = 0;
return ret;
// do not include palette for these pseudo-paletted formats
- if (desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)
+ if (desc->flags & FF_PSEUDOPAL)
return FFALIGN(width, align) * height;
return av_image_fill_arrays(data, linesize, NULL, pix_fmt,
static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear,
size_t clear_size)
{
- size_t pos = 0;
int same = 1;
int i;
if (clear_size == 1) {
memset(dst, clear[0], dst_size);
dst_size = 0;
- } else if (clear_size == 2) {
- uint16_t val = AV_RN16(clear);
- for (; dst_size >= 2; dst_size -= 2) {
- AV_WN16(dst, val);
- dst += 2;
- }
- } else if (clear_size == 4) {
- uint32_t val = AV_RN32(clear);
- for (; dst_size >= 4; dst_size -= 4) {
- AV_WN32(dst, val);
- dst += 4;
- }
- } else if (clear_size == 8) {
- uint32_t val = AV_RN64(clear);
- for (; dst_size >= 8; dst_size -= 8) {
- AV_WN64(dst, val);
- dst += 8;
- }
+ } else {
+ if (clear_size > dst_size)
+ clear_size = dst_size;
+ memcpy(dst, clear, clear_size);
+ av_memcpy_backptr(dst + clear_size, clear_size, dst_size - clear_size);
}
-
- for (; dst_size; dst_size--)
- *dst++ = clear[pos++ % clear_size];
}
// Maximum size in bytes of a plane element (usually a pixel, or multiple pixels