#include "avcodec.h"
#include "bytestream.h"
+#include "internal.h"
/**
* @file
* @brief CD Graphics Video Decoder
* @author Michael Tison
- * @sa http://wiki.multimedia.cx/index.php?title=CD_Graphics
- * @sa http://www.ccs.neu.edu/home/bchafy/cdb/info/cdg
+ * @see http://wiki.multimedia.cx/index.php?title=CD_Graphics
+ * @see http://www.ccs.neu.edu/home/bchafy/cdb/info/cdg
*/
/// default screen sizes
avctx->width = CDG_FULL_WIDTH;
avctx->height = CDG_FULL_HEIGHT;
- avctx->pix_fmt = PIX_FMT_PAL8;
+ avctx->pix_fmt = AV_PIX_FMT_PAL8;
return 0;
}
vscmd = (data[2] & 0x30) >> 4;
h_off = FFMIN(data[1] & 0x07, CDG_BORDER_WIDTH - 1);
- v_off = FFMIN(data[2] & 0x07, CDG_BORDER_HEIGHT - 1);
+ v_off = FFMIN(data[2] & 0x0F, CDG_BORDER_HEIGHT - 1);
/// find the difference and save the offset for cdg_tile_block usage
hinc = h_off - cc->hscroll;
}
static int cdg_decode_frame(AVCodecContext *avctx,
- void *data, int *data_size, AVPacket *avpkt)
+ void *data, int *got_frame, AVPacket *avpkt)
{
const uint8_t *buf = avpkt->data;
int buf_size = avpkt->size;
}
cdg_init_frame(&new_frame);
- ret = avctx->get_buffer(avctx, &new_frame);
+ ret = ff_get_buffer(avctx, &new_frame);
if (ret) {
av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
return ret;
break;
}
- *data_size = sizeof(AVFrame);
+ *got_frame = 1;
} else {
- *data_size = 0;
+ *got_frame = 0;
buf_size = 0;
}
}
AVCodec ff_cdgraphics_decoder = {
- "cdgraphics",
- AVMEDIA_TYPE_VIDEO,
- CODEC_ID_CDGRAPHICS,
- sizeof(CDGraphicsContext),
- cdg_decode_init,
- NULL,
- cdg_decode_end,
- cdg_decode_frame,
- CODEC_CAP_DR1,
- .max_lowres = 5,
- .long_name = NULL_IF_CONFIG_SMALL("CD Graphics video"),
+ .name = "cdgraphics",
+ .type = AVMEDIA_TYPE_VIDEO,
+ .id = AV_CODEC_ID_CDGRAPHICS,
+ .priv_data_size = sizeof(CDGraphicsContext),
+ .init = cdg_decode_init,
+ .close = cdg_decode_end,
+ .decode = cdg_decode_frame,
+ .capabilities = CODEC_CAP_DR1,
+ .long_name = NULL_IF_CONFIG_SMALL("CD Graphics video"),
};