- c->mc_frame_counter = 0;
- c->mc_use_5col = avctx->codec->id == CODEC_ID_A64_MULTI5;
- c->mc_meta_charset = av_malloc (32000 * c->mc_lifetime * sizeof(int));
- c->mc_best_cb = av_malloc (CHARSET_CHARS * 32 * sizeof(int));
- c->mc_charmap = av_mallocz(1000 * c->mc_lifetime * sizeof(int));
- c->mc_colram = av_mallocz(CHARSET_CHARS * sizeof(uint8_t));
- c->mc_charset = av_malloc (0x800 * (INTERLACED+1) * sizeof(uint8_t));
-
- avcodec_get_frame_defaults(&c->picture);
- avctx->coded_frame = &c->picture;
- avctx->coded_frame->pict_type = FF_I_TYPE;
+ if (!(c->mc_meta_charset = av_malloc(32000 * c->mc_lifetime * sizeof(int))) ||
+ !(c->mc_best_cb = av_malloc(CHARSET_CHARS * 32 * sizeof(int))) ||
+ !(c->mc_charmap = av_mallocz(1000 * c->mc_lifetime * sizeof(int))) ||
+ !(c->mc_colram = av_mallocz(CHARSET_CHARS * sizeof(uint8_t))) ||
+ !(c->mc_charset = av_malloc(0x800 * (INTERLACED+1) * sizeof(uint8_t)))) {
+ av_log(avctx, AV_LOG_ERROR, "Failed to allocate buffer memory.\n");
+ return AVERROR(ENOMEM);
+ }
+
+ /* set up extradata */
+ if (!(avctx->extradata = av_mallocz(8 * 4 + FF_INPUT_BUFFER_PADDING_SIZE))) {
+ av_log(avctx, AV_LOG_ERROR, "Failed to allocate memory for extradata.\n");
+ return AVERROR(ENOMEM);
+ }
+ avctx->extradata_size = 8 * 4;
+ AV_WB32(avctx->extradata, c->mc_lifetime);
+ AV_WB32(avctx->extradata + 16, INTERLACED);
+
+ avctx->coded_frame = av_frame_alloc();
+ if (!avctx->coded_frame) {
+ a64multi_close_encoder(avctx);
+ return AVERROR(ENOMEM);
+ }
+
+ avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;