mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-12-12 01:40:04 +01:00
lavc: set AVCodecContext.codec in avcodec_get_context_defaults3().
This way, if the AVCodecContext is allocated for a specific codec, the caller doesn't need to store this codec separately and then pass it again to avcodec_open2(). It also allows to set codec private options using av_opt_set_* before opening the codec.
This commit is contained in:
@@ -630,6 +630,18 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD
|
||||
if (avcodec_is_open(avctx))
|
||||
return 0;
|
||||
|
||||
if ((!codec && !avctx->codec)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "No codec provided to avcodec_open2().\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
if ((codec && avctx->codec && codec != avctx->codec)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "This AVCodecContext was allocated for %s, "
|
||||
"but %s passed to avcodec_open2().\n", avctx->codec->name, codec->name);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
if (!codec)
|
||||
codec = avctx->codec;
|
||||
|
||||
if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
@@ -649,11 +661,6 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, AVCodec *codec, AVD
|
||||
goto end;
|
||||
}
|
||||
|
||||
if(avctx->codec || !codec) {
|
||||
ret = AVERROR(EINVAL);
|
||||
goto end;
|
||||
}
|
||||
|
||||
avctx->internal = av_mallocz(sizeof(AVCodecInternal));
|
||||
if (!avctx->internal) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
|
||||
Reference in New Issue
Block a user