|
|
|
@ -24,7 +24,7 @@ |
|
|
|
|
#include "internal.h" |
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
AVFrame pictures[2]; |
|
|
|
|
AVFrame *pictures[2]; |
|
|
|
|
int currentpic; |
|
|
|
|
} C93DecoderContext; |
|
|
|
|
|
|
|
|
@ -46,21 +46,27 @@ typedef enum { |
|
|
|
|
#define C93_HAS_PALETTE 0x01 |
|
|
|
|
#define C93_FIRST_FRAME 0x02 |
|
|
|
|
|
|
|
|
|
static av_cold int decode_init(AVCodecContext *avctx) |
|
|
|
|
static av_cold int decode_end(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
C93DecoderContext *s = avctx->priv_data; |
|
|
|
|
avctx->pix_fmt = AV_PIX_FMT_PAL8; |
|
|
|
|
avcodec_get_frame_defaults(&s->pictures[0]); |
|
|
|
|
avcodec_get_frame_defaults(&s->pictures[1]); |
|
|
|
|
C93DecoderContext * const c93 = avctx->priv_data; |
|
|
|
|
|
|
|
|
|
av_frame_free(&c93->pictures[0]); |
|
|
|
|
av_frame_free(&c93->pictures[1]); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static av_cold int decode_end(AVCodecContext *avctx) |
|
|
|
|
static av_cold int decode_init(AVCodecContext *avctx) |
|
|
|
|
{ |
|
|
|
|
C93DecoderContext * const c93 = avctx->priv_data; |
|
|
|
|
C93DecoderContext *s = avctx->priv_data; |
|
|
|
|
avctx->pix_fmt = AV_PIX_FMT_PAL8; |
|
|
|
|
|
|
|
|
|
av_frame_unref(&c93->pictures[0]); |
|
|
|
|
av_frame_unref(&c93->pictures[1]); |
|
|
|
|
s->pictures[0] = av_frame_alloc(); |
|
|
|
|
s->pictures[1] = av_frame_alloc(); |
|
|
|
|
if (!s->pictures[0] || !s->pictures[1]) { |
|
|
|
|
decode_end(avctx); |
|
|
|
|
return AVERROR(ENOMEM); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -121,8 +127,8 @@ static int decode_frame(AVCodecContext *avctx, void *data, |
|
|
|
|
const uint8_t *buf = avpkt->data; |
|
|
|
|
int buf_size = avpkt->size; |
|
|
|
|
C93DecoderContext * const c93 = avctx->priv_data; |
|
|
|
|
AVFrame * const newpic = &c93->pictures[c93->currentpic]; |
|
|
|
|
AVFrame * const oldpic = &c93->pictures[c93->currentpic^1]; |
|
|
|
|
AVFrame * const newpic = c93->pictures[c93->currentpic]; |
|
|
|
|
AVFrame * const oldpic = c93->pictures[c93->currentpic^1]; |
|
|
|
|
GetByteContext gb; |
|
|
|
|
uint8_t *out; |
|
|
|
|
int stride, ret, i, x, y, b, bt = 0; |
|
|
|
|