diff options
author | Martin Storsjö <martin@martin.st> | 2016-07-14 22:24:55 +0300 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2016-07-15 13:36:23 +0300 |
commit | 7a76371437f9562c3414f985523f883489e3936a (patch) | |
tree | dca365425575293c3d9963c84f3e7b49ace69f51 /libavcodec | |
parent | 2d097c16b833c532ac974a7f1fd05c0a1f3b7675 (diff) | |
download | ffmpeg-7a76371437f9562c3414f985523f883489e3936a.tar.gz |
libopenh264enc: Simplify init by setting FF_CODEC_CAP_INIT_CLEANUP
Also set FF_CODEC_CAP_INIT_THREADSAFE while adding internal capabilities.
Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavcodec')
-rw-r--r-- | libavcodec/libopenh264enc.c | 27 |
1 files changed, 8 insertions, 19 deletions
diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index bf1cf25770..a09b7cf618 100644 --- a/libavcodec/libopenh264enc.c +++ b/libavcodec/libopenh264enc.c @@ -100,8 +100,6 @@ static av_cold int svc_encode_init(AVCodecContext *avctx) if ((err = ff_libopenh264_check_version(avctx)) < 0) return err; - // Use a default error for multiple error paths below - err = AVERROR_UNKNOWN; if (WelsCreateSVCEncoder(&s->encoder)) { av_log(avctx, AV_LOG_ERROR, "Unable to create encoder\n"); @@ -167,8 +165,7 @@ FF_ENABLE_DEPRECATION_WARNINGS av_log(avctx, AV_LOG_ERROR, "Invalid combination -slices %d and -max_nal_size %d.\n", avctx->slices, s->max_nal_size); - err = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } if (avctx->slices > 1) @@ -196,14 +193,13 @@ FF_ENABLE_DEPRECATION_WARNINGS } else { av_log(avctx, AV_LOG_ERROR, "Invalid -max_nal_size, " "specify a valid max_nal_size to use -slice_mode dyn\n"); - err = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } } if ((*s->encoder)->InitializeExt(s->encoder, ¶m) != cmResultSuccess) { av_log(avctx, AV_LOG_ERROR, "Initialize failed\n"); - goto fail; + return AVERROR_UNKNOWN; } if (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER) { @@ -213,27 +209,19 @@ FF_ENABLE_DEPRECATION_WARNINGS for (i = 0; i < fbi.sLayerInfo[0].iNalCount; i++) size += fbi.sLayerInfo[0].pNalLengthInByte[i]; avctx->extradata = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); - if (!avctx->extradata) { - err = AVERROR(ENOMEM); - goto fail; - } + if (!avctx->extradata) + return AVERROR(ENOMEM); avctx->extradata_size = size; memcpy(avctx->extradata, fbi.sLayerInfo[0].pBsBuf, size); } props = ff_add_cpb_side_data(avctx); - if (!props) { - err = AVERROR(ENOMEM); - goto fail; - } + if (!props) + return AVERROR(ENOMEM); props->max_bitrate = param.iMaxBitrate; props->avg_bitrate = param.iTargetBitrate; return 0; - -fail: - svc_encode_close(avctx); - return err; } static int svc_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, @@ -306,6 +294,7 @@ AVCodec ff_libopenh264_encoder = { .encode2 = svc_encode_frame, .close = svc_encode_close, .capabilities = AV_CODEC_CAP_AUTO_THREADS, + .caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .priv_class = &class, |