X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Flibopenh264enc.c;h=648f59b76795a59c7b9af27b5d5005f6968c43d3;hb=79307ae56374b35cf12563a7c8e3e759658f847e;hp=14afe90795914aca8d9c57594b189df0135c505e;hpb=06136275e59c38806b04a1fc9cc92beb82db79b6;p=ffmpeg diff --git a/libavcodec/libopenh264enc.c b/libavcodec/libopenh264enc.c index 14afe907959..648f59b7679 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,7 +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); - goto fail; + return AVERROR(EINVAL); } if (avctx->slices > 1) @@ -195,13 +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"); - 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) { @@ -211,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, @@ -304,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,