#include "avcodec.h"
#include "bswapdsp.h"
+#include "decode.h"
#include "get_bits.h"
#include "internal.h"
#include "raw.h"
}
if (avctx->pix_fmt == AV_PIX_FMT_PAL8) {
- int pal_size;
- const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE,
- &pal_size);
int ret;
- if (pal && pal_size != AVPALETTE_SIZE) {
- av_log(avctx, AV_LOG_ERROR, "Palette size %d is wrong\n", pal_size);
- pal = NULL;
- }
-
if (!context->palette)
context->palette = av_buffer_alloc(AVPALETTE_SIZE);
if (!context->palette) {
return ret;
}
- if (pal) {
- memcpy(context->palette->data, pal, AVPALETTE_SIZE);
+ if (ff_copy_palette(context->palette->data, avpkt, avctx)) {
frame->palette_has_changed = 1;
} else if (context->is_nut_pal8) {
int vid_size = avctx->width * avctx->height;
int pal_size = avpkt->size - vid_size;
if (avpkt->size > vid_size && pal_size <= AVPALETTE_SIZE) {
- pal = avpkt->data + vid_size;
+ const uint8_t *pal = avpkt->data + vid_size;
memcpy(context->palette->data, pal, pal_size);
frame->palette_has_changed = 1;
}
avctx->pix_fmt == AV_PIX_FMT_RGBA64BE) {
uint8_t *dst = frame->data[0];
uint64_t v;
- int x;
- for (x = 0; x >> 3 < avctx->width * avctx->height; x += 8) {
- v = AV_RB64(&dst[x]);
- AV_WB64(&dst[x], v << 16 | v >> 48);
+ int x, y;
+ for (y = 0; y < avctx->height; y++) {
+ for (x = 0; x >> 3 < avctx->width; x += 8) {
+ v = AV_RB64(&dst[x]);
+ AV_WB64(&dst[x], v << 16 | v >> 48);
+ }
+ dst += frame->linesize[0];
}
}
RawVideoContext *context = avctx->priv_data;
av_buffer_unref(&context->palette);
+ av_freep(&context->bitstream_buf);
return 0;
}