av_freep(&avctx->extradata);
av_freep(&x4->sei);
- if (x4->enc)
+ if (x4->enc) {
x264_encoder_close(x4->enc);
+ x4->enc = NULL;
+ }
av_frame_free(&avctx->coded_frame);
s = x264_encoder_headers(x4->enc, &nal, &nnal);
avctx->extradata = p = av_malloc(s);
if (!p)
- goto nomem;
+ return AVERROR(ENOMEM);
for (i = 0; i < nnal; i++) {
/* Don't put the SEI in extradata. */
x4->sei_size = nal[i].i_payload;
x4->sei = av_malloc(x4->sei_size);
if (!x4->sei)
- goto nomem;
+ return AVERROR(ENOMEM);
memcpy(x4->sei, nal[i].p_payload, nal[i].i_payload);
continue;
}
}
return 0;
-nomem:
- X264_close(avctx);
- return AVERROR(ENOMEM);
}
static const enum AVPixelFormat pix_fmts_8bit[] = {
.priv_class = &x264_class,
.defaults = x264_defaults,
.init_static_data = X264_init_static,
+ .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE |
+ FF_CODEC_CAP_INIT_CLEANUP,
};
AVCodec ff_libx264rgb_encoder = {