X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=libavcodec%2Fbethsoftvideo.c;h=6de502822b16af47e8a3d8a2b6953b0556eb5213;hb=2b01b7918beebe7b392ebf255f887e396a59e4c6;hp=9fc286fb0026af9f887351c349e8cbe3126053c0;hpb=55e5af3c03898ffbac352fe4af83208fa4129c71;p=platform%2Fupstream%2Fffmpeg.git diff --git a/libavcodec/bethsoftvideo.c b/libavcodec/bethsoftvideo.c index 9fc286f..6de5028 100644 --- a/libavcodec/bethsoftvideo.c +++ b/libavcodec/bethsoftvideo.c @@ -32,7 +32,7 @@ #include "bethsoftvideo.h" #include "bytestream.h" #include "codec_internal.h" -#include "internal.h" +#include "decode.h" typedef struct BethsoftvidContext { AVFrame *frame; @@ -51,19 +51,23 @@ static av_cold int bethsoftvid_decode_init(AVCodecContext *avctx) return 0; } -static int set_palette(BethsoftvidContext *ctx) +static int set_palette(BethsoftvidContext *ctx, GetByteContext *g) { uint32_t *palette = (uint32_t *)ctx->frame->data[1]; int a; - if (bytestream2_get_bytes_left(&ctx->g) < 256*3) + if (bytestream2_get_bytes_left(g) < 256*3) return AVERROR_INVALIDDATA; for(a = 0; a < 256; a++){ - palette[a] = 0xFFU << 24 | bytestream2_get_be24u(&ctx->g) * 4; + palette[a] = 0xFFU << 24 | bytestream2_get_be24u(g) * 4; palette[a] |= palette[a] >> 6 & 0x30303; } +#if FF_API_PALETTE_HAS_CHANGED +FF_DISABLE_DEPRECATION_WARNINGS ctx->frame->palette_has_changed = 1; +FF_ENABLE_DEPRECATION_WARNINGS +#endif return 0; } @@ -79,26 +83,31 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int code, ret; int yoffset; + bytestream2_init(&vid->g, avpkt->data, avpkt->size); + block_type = bytestream2_get_byte(&vid->g); + if (block_type < 1 || block_type > 4) + return AVERROR_INVALIDDATA; + if ((ret = ff_reget_buffer(avctx, vid->frame, 0)) < 0) return ret; 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, + GetByteContext g; + bytestream2_init(&g, avpkt->side_data[0].data, avpkt->side_data[0].size); - if ((ret = set_palette(vid)) < 0) + if ((ret = set_palette(vid, &g)) < 0) return ret; } - bytestream2_init(&vid->g, avpkt->data, avpkt->size); dst = vid->frame->data[0]; frame_end = vid->frame->data[0] + vid->frame->linesize[0] * avctx->height; - switch(block_type = bytestream2_get_byte(&vid->g)){ + switch(block_type){ case PALETTE_BLOCK: { *got_frame = 0; - if ((ret = set_palette(vid)) < 0) { + if ((ret = set_palette(vid, &vid->g)) < 0) { av_log(avctx, AV_LOG_ERROR, "error reading palette\n"); return ret; } @@ -160,7 +169,7 @@ static av_cold int bethsoftvid_decode_end(AVCodecContext *avctx) const FFCodec ff_bethsoftvid_decoder = { .p.name = "bethsoftvid", - .p.long_name = NULL_IF_CONFIG_SMALL("Bethesda VID video"), + CODEC_LONG_NAME("Bethesda VID video"), .p.type = AVMEDIA_TYPE_VIDEO, .p.id = AV_CODEC_ID_BETHSOFTVID, .priv_data_size = sizeof(BethsoftvidContext), @@ -168,5 +177,4 @@ const FFCodec ff_bethsoftvid_decoder = { .close = bethsoftvid_decode_end, FF_CODEC_DECODE_CB(bethsoftvid_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1, - .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE, };