dvenc: initialize the profile only once, at init

We do not allow the frame parameters to change during encoding, so there
is no need to do this for each frame.
This commit is contained in:
Anton Khirnov 2014-06-18 10:39:13 +02:00
parent 452860d7e0
commit 778111592b

View File

@ -35,13 +35,22 @@
static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
{
if (!avpriv_dv_codec_profile(avctx)) {
DVVideoContext *s = avctx->priv_data;
int ret;
s->sys = avpriv_dv_codec_profile(avctx);
if (!s->sys) {
av_log(avctx, AV_LOG_ERROR, "Found no DV profile for %ix%i %s video. "
"Valid DV profiles are:\n",
avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt));
ff_dv_print_profiles(avctx, AV_LOG_ERROR);
return AVERROR(EINVAL);
}
ret = ff_dv_init_dynamic_tables(s->sys);
if (ret < 0) {
av_log(avctx, AV_LOG_ERROR, "Error initializing work tables.\n");
return ret;
}
avctx->coded_frame = av_frame_alloc();
if (!avctx->coded_frame)
@ -660,9 +669,6 @@ static int dvvideo_encode_frame(AVCodecContext *c, AVPacket *pkt,
DVVideoContext *s = c->priv_data;
int ret;
s->sys = avpriv_dv_codec_profile(c);
if (!s->sys || ff_dv_init_dynamic_tables(s->sys))
return -1;
if ((ret = ff_alloc_packet(pkt, s->sys->frame_size)) < 0) {
av_log(c, AV_LOG_ERROR, "Error getting output packet.\n");
return ret;