diff --git a/video/decode/hw_mediacodec.c b/video/decode/hw_mediacodec.c index b1a06c19ed..0f52695857 100644 --- a/video/decode/hw_mediacodec.c +++ b/video/decode/hw_mediacodec.c @@ -31,12 +31,7 @@ static int probe(struct lavc_ctx *ctx, struct vd_lavc_hwdec *hwdec, return 0; } -static int init(struct lavc_ctx *ctx) -{ - return 0; -} - -static int init_decoder(struct lavc_ctx *ctx, int w, int h) +static int init_decoder(struct lavc_ctx *ctx) { av_mediacodec_default_free(ctx->avctx); @@ -59,7 +54,6 @@ const struct vd_lavc_hwdec mp_vd_lavc_mediacodec = { .image_format = IMGFMT_MEDIACODEC, .lavc_suffix = "_mediacodec", .probe = probe, - .init = init, .init_decoder = init_decoder, .uninit = uninit, }; diff --git a/video/decode/lavc.h b/video/decode/lavc.h index cf5485d3b6..70ff4cde97 100644 --- a/video/decode/lavc.h +++ b/video/decode/lavc.h @@ -31,7 +31,6 @@ typedef struct lavc_ctx { AVFrame *pic; struct vd_lavc_hwdec *hwdec; AVRational codec_timebase; - enum AVPixelFormat pix_fmt; enum AVDiscard skip_frame; bool flushing; const char *decoder; @@ -62,11 +61,6 @@ typedef struct lavc_ctx { struct mp_hwdec_ctx *hwdec_dev; bool owns_hwdec_dev; - int hwdec_fmt; - int hwdec_w; - int hwdec_h; - int hwdec_profile; - bool hwdec_request_reinit; int hwdec_fail_count; @@ -102,7 +96,7 @@ struct vd_lavc_hwdec { int (*probe)(struct lavc_ctx *ctx, struct vd_lavc_hwdec *hwdec, const char *codec); int (*init)(struct lavc_ctx *ctx); - int (*init_decoder)(struct lavc_ctx *ctx, int w, int h); + int (*init_decoder)(struct lavc_ctx *ctx); void (*uninit)(struct lavc_ctx *ctx); // Process the image returned by the libavcodec decoder. struct mp_image *(*process_image)(struct lavc_ctx *ctx, struct mp_image *img); diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index 75cf8a6416..c455dbdab6 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -562,9 +562,7 @@ static void init_avctx(struct dec_video *vd, const char *decoder, if (strstr(decoder, "_mmal")) ctx->codec_timebase = (AVRational){1, 1000000}; - ctx->pix_fmt = AV_PIX_FMT_NONE; ctx->hwdec = hwdec; - ctx->hwdec_fmt = 0; ctx->hwdec_failed = false; ctx->hwdec_request_reinit = false; ctx->avctx = avcodec_alloc_context3(lavc_codec); @@ -590,8 +588,6 @@ static void init_avctx(struct dec_video *vd, const char *decoder, avctx->hwaccel_flags |= AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH; if (ctx->hwdec->image_format) avctx->get_format = get_format_hwdec; - if (ctx->hwdec->init && ctx->hwdec->init(ctx) < 0) - goto error; if (ctx->hwdec->generic_hwaccel) { ctx->hwdec_dev = hwdec_create_dev(vd, ctx->hwdec, false); if (!ctx->hwdec_dev) @@ -818,28 +814,10 @@ static enum AVPixelFormat get_format_hwdec(struct AVCodecContext *avctx, if (ctx->hwdec->generic_hwaccel) { if (init_generic_hwaccel(vd, fmt[i]) < 0) break; - select = fmt[i]; - break; - } - // There could be more reasons for a change, and it's possible - // that we miss some. (Might also depend on the hwaccel type.) - bool change = - ctx->hwdec_w != avctx->coded_width || - ctx->hwdec_h != avctx->coded_height || - ctx->hwdec_fmt != ctx->hwdec->image_format || - ctx->hwdec_profile != avctx->profile || - ctx->hwdec_request_reinit; - ctx->hwdec_w = avctx->coded_width; - ctx->hwdec_h = avctx->coded_height; - ctx->hwdec_fmt = ctx->hwdec->image_format; - ctx->hwdec_profile = avctx->profile; - ctx->hwdec_request_reinit = false; - if (change && ctx->hwdec->init_decoder) { - if (ctx->hwdec->init_decoder(ctx, ctx->hwdec_w, ctx->hwdec_h) < 0) - { - ctx->hwdec_fmt = 0; + } else { + ctx->hwdec_request_reinit = false; + if (ctx->hwdec->init_decoder && ctx->hwdec->init_decoder(ctx) < 0) break; - } } select = fmt[i]; break;