Unified · Split
| @@ -357,17 +357,17 @@ static av_always_inline int smk_get_code(GetBitContext *gb, int *recode, int *la · 356 unmodified lines | |||
| 357 | 357 | ||
| 358 | static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) | 358 | static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt) |
| 359 | { | 359 | { |
| 360 | const uint8_t *buf = avpkt->data; | ||
| 361 | int buf_size = avpkt->size; | ||
| 362 | SmackVContext * const smk = avctx->priv_data; | 360 | SmackVContext * const smk = avctx->priv_data; |
| 363 | uint8_t *out; | 361 | uint8_t *out; |
| 364 | uint32_t *pal; | 362 | uint32_t *pal; |
| 363 | GetByteContext gb2; | ||
| 365 | GetBitContext gb; | 364 | GetBitContext gb; |
| 366 | int blocks, blk, bw, bh; | 365 | int blocks, blk, bw, bh; |
| 367 | int i; | 366 | int i; |
| 368 | int stride; | 367 | int stride; |
| 368 | int flags; | ||
| 369 | 369 | ||
| 370 | if(buf_size <= 769) | 370 | if (avpkt->size <= 769) |
| 371 | return 0; | 371 | return 0; |
| 372 | 372 | ||
| 373 | smk->pic.reference = 1; | 373 | smk->pic.reference = 1; |
| @@ -379,23 +379,23 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac · 5 unmodified lines | |||
| 379 | 379 | ||
| 380 | /* make the palette available on the way out */ | 380 | /* make the palette available on the way out */ |
| 381 | pal = (uint32_t*)smk->pic.data[1]; | 381 | pal = (uint32_t*)smk->pic.data[1]; |
| 382 | smk->pic.palette_has_changed = buf[0] & 1; | 382 | bytestream2_init(&gb2, avpkt->data, avpkt->size); |
| 383 | smk->pic.key_frame = !!(buf[0] & 2); | 383 | flags = bytestream2_get_byteu(&gb2); |
| 384 | smk->pic.palette_has_changed = flags & 1; | ||
| 385 | smk->pic.key_frame = !!(flags & 2); | ||
| 384 | if(smk->pic.key_frame) | 386 | if(smk->pic.key_frame) |
| 385 | smk->pic.pict_type = AV_PICTURE_TYPE_I; | 387 | smk->pic.pict_type = AV_PICTURE_TYPE_I; |
| 386 | else | 388 | else |
| 387 | smk->pic.pict_type = AV_PICTURE_TYPE_P; | 389 | smk->pic.pict_type = AV_PICTURE_TYPE_P; |
| 388 | 390 | ||
| 389 | buf++; | ||
| 390 | for(i = 0; i < 256; i++) | 391 | for(i = 0; i < 256; i++) |
| 391 | *pal++ = bytestream_get_be24(&buf); | 392 | *pal++ = bytestream2_get_be24u(&gb2); |
| 392 | buf_size -= 769; | ||
| 393 | 393 | ||
| 394 | last_reset(smk->mmap_tbl, smk->mmap_last); | 394 | last_reset(smk->mmap_tbl, smk->mmap_last); |
| 395 | last_reset(smk->mclr_tbl, smk->mclr_last); | 395 | last_reset(smk->mclr_tbl, smk->mclr_last); |
| 396 | last_reset(smk->full_tbl, smk->full_last); | 396 | last_reset(smk->full_tbl, smk->full_last); |
| 397 | last_reset(smk->type_tbl, smk->type_last); | 397 | last_reset(smk->type_tbl, smk->type_last); |
| 398 | init_get_bits(&gb, buf, buf_size * 8); | 398 | init_get_bits(&gb, avpkt->data + 769, (avpkt->size - 769) * 8); |
| 399 | 399 | ||
| 400 | blk = 0; | 400 | blk = 0; |
| 401 | bw = avctx->width >> 2; | 401 | bw = avctx->width >> 2; |
| @@ -506,7 +506,7 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPac · 104 unmodified lines | |||
| 506 | *(AVFrame*)data = smk->pic; | 506 | *(AVFrame*)data = smk->pic; |
| 507 | 507 | ||
| 508 | /* always report that the buffer was completely consumed */ | 508 | /* always report that the buffer was completely consumed */ |
| 509 | return buf_size; | 509 | return avpkt->size; |
| 510 | } | 510 | } |
| 511 | 511 | ||
| 512 | 512 | ||