uint8_t * dst;
uint8_t * frame_end;
int remaining = avctx->width; // number of bytes remaining on a line
- const int wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
- int code;
+ int wrap_to_next_line;
+ int code, ret;
int yoffset;
if (avctx->reget_buffer(avctx, &vid->frame)) {
av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n");
return -1;
}
+ wrap_to_next_line = vid->frame.linesize[0] - avctx->width;
+
+ if (avpkt->side_data_elems > 0 &&
+ avpkt->side_data[0].type == AV_PKT_DATA_PALETTE) {
+ bytestream2_init(&vid->g, avpkt->side_data[0].data,
+ avpkt->side_data[0].size);
+ if ((ret = set_palette(vid)) < 0)
+ return ret;
+ }
bytestream2_init(&vid->g, avpkt->data, avpkt->size);
dst = vid->frame.data[0];
switch(block_type = bytestream2_get_byte(&vid->g)){
case PALETTE_BLOCK: {
- int ret;
*data_size = 0;
if ((ret = set_palette(vid)) < 0) {
av_log(avctx, AV_LOG_ERROR, "error reading palette\n");
}
AVCodec ff_bethsoftvid_decoder = {
- .name = "bethsoftvid",
- .type = AVMEDIA_TYPE_VIDEO,
- .id = CODEC_ID_BETHSOFTVID,
+ .name = "bethsoftvid",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = CODEC_ID_BETHSOFTVID,
.priv_data_size = sizeof(BethsoftvidContext),
- .init = bethsoftvid_decode_init,
- .close = bethsoftvid_decode_end,
- .decode = bethsoftvid_decode_frame,
- .capabilities = CODEC_CAP_DR1,
- .long_name = NULL_IF_CONFIG_SMALL("Bethesda VID video"),
+ .init = bethsoftvid_decode_init,
+ .close = bethsoftvid_decode_end,
+ .decode = bethsoftvid_decode_frame,
+ .capabilities = CODEC_CAP_DR1,
+ .long_name = NULL_IF_CONFIG_SMALL("Bethesda VID video"),
};