|
@@ -456,7 +456,7 @@ AVFrame *avcodec_alloc_frame(void){
|
|
|
|
|
|
int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
{
|
|
|
- int ret= -1;
|
|
|
+ int ret = 0;
|
|
|
|
|
|
/* If there is a user-supplied mutex locking routine, call it. */
|
|
|
if (ff_lockmgr_cb) {
|
|
@@ -467,11 +467,14 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
entangled_thread_counter++;
|
|
|
if(entangled_thread_counter != 1){
|
|
|
av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n");
|
|
|
+ ret = -1;
|
|
|
goto end;
|
|
|
}
|
|
|
|
|
|
- if(avctx->codec || !codec)
|
|
|
+ if(avctx->codec || !codec) {
|
|
|
+ ret = AVERROR(EINVAL);
|
|
|
goto end;
|
|
|
+ }
|
|
|
|
|
|
if (codec->priv_data_size > 0) {
|
|
|
if(!avctx->priv_data){
|
|
@@ -521,6 +524,7 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
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;
|
|
@@ -535,6 +539,7 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
if (avctx->codec->max_lowres < avctx->lowres) {
|
|
|
av_log(avctx, AV_LOG_ERROR, "The maximum value for lowres supported by the decoder is %d\n",
|
|
|
avctx->codec->max_lowres);
|
|
|
+ ret = AVERROR(EINVAL);
|
|
|
goto free_and_end;
|
|
|
}
|
|
|
if (avctx->codec->sample_fmts && avctx->codec->encode) {
|
|
@@ -544,6 +549,7 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
break;
|
|
|
if (avctx->codec->sample_fmts[i] == AV_SAMPLE_FMT_NONE) {
|
|
|
av_log(avctx, AV_LOG_ERROR, "Specified sample_fmt is not supported.\n");
|
|
|
+ ret = AVERROR(EINVAL);
|
|
|
goto free_and_end;
|
|
|
}
|
|
|
}
|
|
@@ -554,7 +560,6 @@ int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec)
|
|
|
goto free_and_end;
|
|
|
}
|
|
|
}
|
|
|
- ret=0;
|
|
|
end:
|
|
|
entangled_thread_counter--;
|
|
|
|