|
|
|
@@ -163,6 +163,18 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code |
|
|
|
if (!codec) |
|
|
|
codec = avctx->codec; |
|
|
|
|
|
|
|
if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) && |
|
|
|
avctx->codec_id == AV_CODEC_ID_NONE) { |
|
|
|
avctx->codec_type = codec->type; |
|
|
|
avctx->codec_id = codec->id; |
|
|
|
} |
|
|
|
if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type && |
|
|
|
avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); |
|
|
|
return AVERROR(EINVAL); |
|
|
|
} |
|
|
|
avctx->codec = codec; |
|
|
|
|
|
|
|
if (avctx->extradata_size < 0 || avctx->extradata_size >= FF_MAX_EXTRADATA_SIZE) |
|
|
|
return AVERROR(EINVAL); |
|
|
|
|
|
|
|
@@ -281,18 +293,6 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code |
|
|
|
goto free_and_end; |
|
|
|
} |
|
|
|
|
|
|
|
avctx->codec = codec; |
|
|
|
if ((avctx->codec_type == AVMEDIA_TYPE_UNKNOWN || avctx->codec_type == codec->type) && |
|
|
|
avctx->codec_id == AV_CODEC_ID_NONE) { |
|
|
|
avctx->codec_type = codec->type; |
|
|
|
avctx->codec_id = codec->id; |
|
|
|
} |
|
|
|
if (avctx->codec_id != codec->id || (avctx->codec_type != codec->type |
|
|
|
&& avctx->codec_type != AVMEDIA_TYPE_ATTACHMENT)) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Codec type or id mismatches\n"); |
|
|
|
ret = AVERROR(EINVAL); |
|
|
|
goto free_and_end; |
|
|
|
} |
|
|
|
avctx->frame_number = 0; |
|
|
|
avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id); |
|
|
|
|
|
|
|
|