summaryrefslogtreecommitdiffstats
path: root/libavcodec/dvenc.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2014-06-18 10:39:13 +0200
committerAnton Khirnov <anton@khirnov.net>2014-06-20 14:15:16 +0200
commit778111592bf5f38630858ee6dfcfd097cd6c6da9 (patch)
tree732dffbbbbfc6d24664329702d996d3677497885 /libavcodec/dvenc.c
parent452860d7e056f9a894cac2fe52cdedeae4c38251 (diff)
downloadffmpeg-streaming-778111592bf5f38630858ee6dfcfd097cd6c6da9.zip
ffmpeg-streaming-778111592bf5f38630858ee6dfcfd097cd6c6da9.tar.gz
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.
Diffstat (limited to 'libavcodec/dvenc.c')
-rw-r--r--libavcodec/dvenc.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/libavcodec/dvenc.c b/libavcodec/dvenc.c
index 6338dee..552f691 100644
--- a/libavcodec/dvenc.c
+++ b/libavcodec/dvenc.c
@@ -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;
OpenPOWER on IntegriCloud