vd_lavc: drop mediacodec direct rendering support temporarily

The libavcodec mediacodec support does not conform to the new hwaccel
APIs yet. It has been agreed uppon that this glue code can be deleted
for now, and support for it will be restored at a later point.

Readding would require that it supports the AVCodecContext.hw_device_ctx
API. The hw_device_ctx would then contain the surface ID.
vo_mediacodec_embed would actually perform the task of creating
vo.hwdec_devs and adding a mp_hwdec_ctx, whose av_device_ref is a
AVHWDeviceContext containing the android surface.
This commit is contained in:
wm4 2017-12-01 18:01:15 +01:00
parent 9f52a92899
commit 80359c6615
4 changed files with 9 additions and 70 deletions

View File

@ -2524,6 +2524,7 @@ Window
value cast to ``intptr_t``. Use with ``--vo=mediacodec_embed`` and
``--hwdec=mediacodec`` for direct rendering using MediaCodec, or with
``--vo=gpu --gpu-context=android`` (with or without ``--hwdec=mediacodec-copy``).
This is currently broken.
``--no-window-dragging``
Don't move the window when clicking on it and moving the mouse pointer.

View File

@ -1,65 +0,0 @@
/*
* This file is part of mpv.
*
* mpv is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* mpv is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* 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_decoder(struct lavc_ctx *ctx)
{
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_decoder = init_decoder,
.uninit = uninit,
};
const struct vd_lavc_hwdec mp_vd_lavc_mediacodec_copy = {
.type = HWDEC_MEDIACODEC_COPY,
.lavc_suffix = "_mediacodec",
.copying = true,
};

View File

@ -123,9 +123,6 @@ 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;
#if HAVE_RPI
static const struct vd_lavc_hwdec mp_vd_lavc_rpi = {
.type = HWDEC_RPI,
@ -279,6 +276,14 @@ static const struct vd_lavc_hwdec mp_vd_lavc_dxva2_copy = {
};
#endif
#if HAVE_ANDROID
static const struct vd_lavc_hwdec mp_vd_lavc_mediacodec_copy = {
.type = HWDEC_MEDIACODEC_COPY,
.lavc_suffix = "_mediacodec",
.copying = true,
};
#endif
static const struct vd_lavc_hwdec *const hwdec_list[] = {
#if HAVE_D3D_HWACCEL
&mp_vd_lavc_d3d11va,
@ -310,7 +315,6 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = {
&mp_vd_lavc_vaapi_copy,
#endif
#if HAVE_ANDROID
&mp_vd_lavc_mediacodec,
&mp_vd_lavc_mediacodec_copy,
#endif
#if HAVE_CUDA_HWACCEL

View File

@ -363,7 +363,6 @@ def build(ctx):
( "video/vdpau.c", "vdpau" ),
( "video/vdpau_mixer.c", "vdpau" ),
( "video/decode/dec_video.c"),
( "video/decode/hw_mediacodec.c", "android" ),
( "video/decode/vd_lavc.c" ),
( "video/filter/refqueue.c" ),
( "video/filter/vf.c" ),