History

smacker: convert palette and header reading to bytestream2.

Ronald S. Bultje committed 14 years ago

Commit b2af0571 parent c3bbd0b1 file · +10 −10Browse files

Unified · Split

libavcodec/smacker.c+10−10
@@ -357,17 +357,17 @@ static av_always_inline int smk_get_code(GetBitContext *gb, int *recode, int *la · 356 unmodified lines
357 357
358static int decode_frame(AVCodecContext *avctx, void *data, int *data_size, AVPacket *avpkt)358static 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 else388 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

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t