diff options
Diffstat (limited to 'video/decode')
-rw-r--r-- | video/decode/hw_mediacodec.c | 47 | ||||
-rw-r--r-- | video/decode/vd_lavc.c | 2 |
2 files changed, 49 insertions, 0 deletions
diff --git a/video/decode/hw_mediacodec.c b/video/decode/hw_mediacodec.c index 9d3ef44f8b..b1a06c19ed 100644 --- a/video/decode/hw_mediacodec.c +++ b/video/decode/hw_mediacodec.c @@ -15,8 +15,55 @@ * License along with mpv. If not, see <http://www.gnu.org/licenses/>. */ +#include <stdbool.h> + +#include <libavcodec/mediacodec.h> + +#include "options/options.h" #include "video/decode/lavc.h" +static int probe(struct lavc_ctx *ctx, struct vd_lavc_hwdec *hwdec, + const char *codec) +{ + if (ctx->opts->vo->WinID == 0) + return HWDEC_ERR_NO_CTX; + + return 0; +} + +static int init(struct lavc_ctx *ctx) +{ + return 0; +} + +static int init_decoder(struct lavc_ctx *ctx, int w, int h) +{ + av_mediacodec_default_free(ctx->avctx); + + AVMediaCodecContext *mcctx = av_mediacodec_alloc_context(); + if (!mcctx) + return -1; + + void *surface = (void *)(intptr_t)(ctx->opts->vo->WinID); + return av_mediacodec_default_init(ctx->avctx, mcctx, surface); +} + +static void uninit(struct lavc_ctx *ctx) +{ + if (ctx->avctx) + av_mediacodec_default_free(ctx->avctx); +} + +const struct vd_lavc_hwdec mp_vd_lavc_mediacodec = { + .type = HWDEC_MEDIACODEC, + .image_format = IMGFMT_MEDIACODEC, + .lavc_suffix = "_mediacodec", + .probe = probe, + .init = init, + .init_decoder = init_decoder, + .uninit = uninit, +}; + const struct vd_lavc_hwdec mp_vd_lavc_mediacodec_copy = { .type = HWDEC_MEDIACODEC_COPY, .lavc_suffix = "_mediacodec", diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index ec22b42571..fe0de0e43f 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -129,6 +129,7 @@ const struct m_sub_options vd_lavc_conf = { }, }; +extern const struct vd_lavc_hwdec mp_vd_lavc_mediacodec; extern const struct vd_lavc_hwdec mp_vd_lavc_mediacodec_copy; extern const struct vd_lavc_hwdec mp_vd_lavc_videotoolbox; extern const struct vd_lavc_hwdec mp_vd_lavc_videotoolbox_copy; @@ -261,6 +262,7 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = { &mp_vd_lavc_d3d11va_copy, #endif #if HAVE_ANDROID + &mp_vd_lavc_mediacodec, &mp_vd_lavc_mediacodec_copy, #endif #if HAVE_CUDA_HWACCEL |