[FFmpeg-devel] [PATCH 4/6] avcodec/libvpxdec: pass decoder instances to vpx_init directly
Marton Balint
cus at passwd.hu
Sun Oct 27 19:10:34 EET 2019
If the alpha decoder init failed we presented the error message from the normal
decoder. This change should prevent such mistakes.
Signed-off-by: Marton Balint <cus at passwd.hu>
---
libavcodec/libvpxdec.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/libavcodec/libvpxdec.c b/libavcodec/libvpxdec.c
index cc91140886..5c72be5439 100644
--- a/libavcodec/libvpxdec.c
+++ b/libavcodec/libvpxdec.c
@@ -42,10 +42,9 @@ typedef struct VPxDecoderContext {
} VPxContext;
static av_cold int vpx_init(AVCodecContext *avctx,
- const struct vpx_codec_iface *iface,
- int is_alpha_decoder)
+ struct vpx_codec_ctx* decoder,
+ const struct vpx_codec_iface *iface)
{
- VPxContext *ctx = avctx->priv_data;
struct vpx_codec_dec_cfg deccfg = {
.threads = FFMIN(avctx->thread_count ? avctx->thread_count : av_cpu_count(), 16)
};
@@ -53,10 +52,8 @@ static av_cold int vpx_init(AVCodecContext *avctx,
av_log(avctx, AV_LOG_INFO, "%s\n", vpx_codec_version_str());
av_log(avctx, AV_LOG_VERBOSE, "%s\n", vpx_codec_build_config());
- if (vpx_codec_dec_init(
- is_alpha_decoder ? &ctx->decoder_alpha : &ctx->decoder,
- iface, &deccfg, 0) != VPX_CODEC_OK) {
- const char *error = vpx_codec_error(&ctx->decoder);
+ if (vpx_codec_dec_init(decoder, iface, &deccfg, 0) != VPX_CODEC_OK) {
+ const char *error = vpx_codec_error(decoder);
av_log(avctx, AV_LOG_ERROR, "Failed to initialize decoder: %s\n",
error);
return AVERROR(EINVAL);
@@ -199,15 +196,16 @@ static int vpx_decode(AVCodecContext *avctx,
if (!ctx->has_alpha_channel) {
ctx->has_alpha_channel = 1;
ret = vpx_init(avctx,
+ &ctx->decoder_alpha,
#if CONFIG_LIBVPX_VP8_DECODER && CONFIG_LIBVPX_VP9_DECODER
(avctx->codec_id == AV_CODEC_ID_VP8) ?
- &vpx_codec_vp8_dx_algo : &vpx_codec_vp9_dx_algo,
+ &vpx_codec_vp8_dx_algo : &vpx_codec_vp9_dx_algo
#elif CONFIG_LIBVPX_VP8_DECODER
- &vpx_codec_vp8_dx_algo,
+ &vpx_codec_vp8_dx_algo
#else
- &vpx_codec_vp9_dx_algo,
+ &vpx_codec_vp9_dx_algo
#endif
- 1);
+ );
if (ret)
return ret;
}
@@ -275,7 +273,8 @@ static av_cold int vpx_free(AVCodecContext *avctx)
#if CONFIG_LIBVPX_VP8_DECODER
static av_cold int vp8_init(AVCodecContext *avctx)
{
- return vpx_init(avctx, &vpx_codec_vp8_dx_algo, 0);
+ VPxContext *ctx = avctx->priv_data;
+ return vpx_init(avctx, &ctx->decoder, &vpx_codec_vp8_dx_algo);
}
AVCodec ff_libvpx_vp8_decoder = {
@@ -295,7 +294,8 @@ AVCodec ff_libvpx_vp8_decoder = {
#if CONFIG_LIBVPX_VP9_DECODER
static av_cold int vp9_init(AVCodecContext *avctx)
{
- return vpx_init(avctx, &vpx_codec_vp9_dx_algo, 0);
+ VPxContext *ctx = avctx->priv_data;
+ return vpx_init(avctx, &ctx->decoder, &vpx_codec_vp9_dx_algo);
}
AVCodec ff_libvpx_vp9_decoder = {
--
2.16.4
More information about the ffmpeg-devel
mailing list