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 | 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 | 360 | SmackVContext * const smk = avctx->priv_data; |
| 363 | 361 | uint8_t *out; |
| 364 | 362 | uint32_t *pal; |
| 363 | + GetByteContext gb2; | |
| 365 | 364 | GetBitContext gb; |
| 366 | 365 | int blocks, blk, bw, bh; |
| 367 | 366 | int i; |
| 368 | 367 | int stride; |
| 368 | + int flags; | |
| 369 | 369 | |
| 370 | − if(buf_size <= 769) | |
| 370 | + if (avpkt->size <= 769) | |
| 371 | 371 | return 0; |
| 372 | 372 | |
| 373 | 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 | 380 | /* make the palette available on the way out */ |
| 381 | 381 | pal = (uint32_t*)smk->pic.data[1]; |
| 382 | − smk->pic.palette_has_changed = buf[0] & 1; | |
| 383 | − smk->pic.key_frame = !!(buf[0] & 2); | |
| 382 | + bytestream2_init(&gb2, avpkt->data, avpkt->size); | |
| 383 | + flags = bytestream2_get_byteu(&gb2); | |
| 384 | + smk->pic.palette_has_changed = flags & 1; | |
| 385 | + smk->pic.key_frame = !!(flags & 2); | |
| 384 | 386 | if(smk->pic.key_frame) |
| 385 | 387 | smk->pic.pict_type = AV_PICTURE_TYPE_I; |
| 386 | 388 | else |
| 387 | 389 | smk->pic.pict_type = AV_PICTURE_TYPE_P; |
| 388 | 390 | |
| 389 | − buf++; | |
| 390 | 391 | for(i = 0; i < 256; i++) |
| 391 | − *pal++ = bytestream_get_be24(&buf); | |
| 392 | − buf_size -= 769; | |
| 392 | + *pal++ = bytestream2_get_be24u(&gb2); | |
| 393 | 393 | |
| 394 | 394 | last_reset(smk->mmap_tbl, smk->mmap_last); |
| 395 | 395 | last_reset(smk->mclr_tbl, smk->mclr_last); |
| 396 | 396 | last_reset(smk->full_tbl, smk->full_last); |
| 397 | 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 | 400 | blk = 0; |
| 401 | 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 | 506 | *(AVFrame*)data = smk->pic; |
| 507 | 507 | |
| 508 | 508 | /* always report that the buffer was completely consumed */ |
| 509 | − return buf_size; | |
| 509 | + return avpkt->size; | |
| 510 | 510 | } |
| 511 | 511 | |
| 512 | 512 | |