mirror of https://git.ffmpeg.org/ffmpeg.git
avdevice/decklink_dec: fix leaks on error
In case of errors in this function, the allocated context was not properly freed in several cases. Signed-off-by: Marton Balint <cus@passwd.hu>
This commit is contained in:
parent
7554346cb5
commit
8e76c99301
|
@ -1114,7 +1114,8 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(avctx, AV_LOG_ERROR, "Value of channels option must be one of 2, 8 or 16\n");
|
av_log(avctx, AV_LOG_ERROR, "Value of channels option must be one of 2, 8 or 16\n");
|
||||||
return AVERROR(EINVAL);
|
ret = AVERROR(EINVAL);
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check audio bit depth option for valid values: 16 or 32 */
|
/* Check audio bit depth option for valid values: 16 or 32 */
|
||||||
|
@ -1124,18 +1125,20 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
av_log(avctx, AV_LOG_ERROR, "Value for audio bit depth option must be either 16 or 32\n");
|
av_log(avctx, AV_LOG_ERROR, "Value for audio bit depth option must be either 16 or 32\n");
|
||||||
return AVERROR(EINVAL);
|
ret = AVERROR(EINVAL);
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* List available devices. */
|
/* List available devices. */
|
||||||
if (ctx->list_devices) {
|
if (ctx->list_devices) {
|
||||||
ff_decklink_list_devices_legacy(avctx, 1, 0);
|
ff_decklink_list_devices_legacy(avctx, 1, 0);
|
||||||
return AVERROR_EXIT;
|
ret = AVERROR_EXIT;
|
||||||
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ff_decklink_init_device(avctx, avctx->url);
|
ret = ff_decklink_init_device(avctx, avctx->url);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
goto error;
|
||||||
|
|
||||||
/* Get input device. */
|
/* Get input device. */
|
||||||
if (ctx->dl->QueryInterface(IID_IDeckLinkInput, (void **) &ctx->dli) != S_OK) {
|
if (ctx->dl->QueryInterface(IID_IDeckLinkInput, (void **) &ctx->dli) != S_OK) {
|
||||||
|
@ -1336,6 +1339,7 @@ av_cold int ff_decklink_read_header(AVFormatContext *avctx)
|
||||||
|
|
||||||
error:
|
error:
|
||||||
ff_decklink_cleanup(avctx);
|
ff_decklink_cleanup(avctx);
|
||||||
|
av_freep(&cctx->ctx);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue