FrapsContext * const s = avctx->priv_data;
avcodec_get_frame_defaults(&s->frame);
- avctx->coded_frame = (AVFrame*)&s->frame;
+ avctx->coded_frame = &s->frame;
s->avctx = avctx;
s->tmpbuf = NULL;
- dsputil_init(&s->dsp, avctx);
+ ff_dsputil_init(&s->dsp, avctx);
return 0;
}
if(j) dst[i] += dst[i - stride];
else if(Uoff) dst[i] += 0x80;
if (get_bits_left(&gb) < 0) {
- free_vlc(&vlc);
+ ff_free_vlc(&vlc);
return AVERROR_INVALIDDATA;
}
}
dst += stride;
}
- free_vlc(&vlc);
+ ff_free_vlc(&vlc);
return 0;
}
int buf_size = avpkt->size;
FrapsContext * const s = avctx->priv_data;
AVFrame *frame = data;
- AVFrame * const f = (AVFrame*)&s->frame;
+ AVFrame * const f = &s->frame;
uint32_t header;
unsigned int version,header_size;
unsigned int x, y;
int i, j, is_chroma;
const int planes = 3;
uint8_t *out;
-
+ enum PixelFormat pix_fmt;
header = AV_RL32(buf);
version = header & 0xff;
buf += header_size;
- avctx->pix_fmt = version & 1 ? PIX_FMT_BGR24 : PIX_FMT_YUVJ420P;
-
if (version < 2) {
unsigned needed_size = avctx->width*avctx->height*3;
if (version == 0) needed_size /= 2;
f->key_frame = 1;
f->reference = 0;
f->buffer_hints = FF_BUFFER_HINTS_VALID;
+
+ pix_fmt = version & 1 ? PIX_FMT_BGR24 : PIX_FMT_YUVJ420P;
+ if (avctx->pix_fmt != pix_fmt && f->data[0]) {
+ avctx->release_buffer(avctx, f);
+ }
+ avctx->pix_fmt = pix_fmt;
+
if (ff_thread_get_buffer(avctx, f)) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return -1;
.close = decode_end,
.decode = decode_frame,
.capabilities = CODEC_CAP_DR1 | CODEC_CAP_FRAME_THREADS,
- .long_name = NULL_IF_CONFIG_SMALL("Fraps"),
+ .long_name = NULL_IF_CONFIG_SMALL("Fraps"),
};