1
0
mirror of https://github.com/mpv-player/mpv synced 2025-03-22 11:18:32 +00:00

vd_lavc: clean out more hwdec legacy code

All this code used to be required by the old variants of the libavcodec
hw decoding APIs. Almost all of that is gone, although the mediacodec
API unfortunately still pulls in some old stuff (but not all of it).

(mediacodec build/functionality is untested, but should work.)
This commit is contained in:
wm4 2017-10-31 17:11:45 +01:00
parent f27a9aaa17
commit 95c6a482eb
3 changed files with 5 additions and 39 deletions

View File

@ -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,
};

View File

@ -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);

View File

@ -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;