From 0a81fe1cf9e62c26ebda1c209b3b69467991b252 Mon Sep 17 00:00:00 2001 From: Philip Langdale Date: Sun, 9 Oct 2016 09:18:14 -0700 Subject: vd_lavc: Add hwdec wrapper for crystalhd This hardware decodes to system memory so it only requires a wrapper. --- DOCS/man/options.rst | 6 ++++++ options/options.c | 1 + video/decode/vd_lavc.c | 7 +++++++ video/hwdec.h | 1 + 4 files changed, 15 insertions(+) diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst index d17aefe347..374cdaf1a5 100644 --- a/DOCS/man/options.rst +++ b/DOCS/man/options.rst @@ -625,6 +625,7 @@ Video :rpi-copy: copies video back to system RAM (Raspberry Pi only) :cuda: requires ``--vo=opengl`` (Any platform CUDA is available) :cuda-copy: copies video back to system RAM (Any platform CUDA is available) + :crystalhd: copies video back to system RAM (Any platform supported by hardware) ``auto`` tries to automatically enable hardware decoding using the first available method. This still depends what VO you are using. For example, @@ -711,6 +712,11 @@ Video ``rpi`` always uses the hardware overlay renderer, even with ``--vo=opengl``. + ``crystalhd`` is not safe. It always converts to 4:2:2 YUV, which + may be lossy, depending on how chroma sub-sampling is done during + conversion. It also discards the top left pixel of each frame for + some reason. + All other methods, in particular the copy-back methods (like ``dxva2-copy`` etc.) are either fully safe, or not worse than software decoding. diff --git a/options/options.c b/options/options.c index 38f5d16721..3b071e3b47 100644 --- a/options/options.c +++ b/options/options.c @@ -106,6 +106,7 @@ const struct m_opt_choice_alternatives mp_hwdec_names[] = { {"mediacodec", HWDEC_MEDIACODEC}, {"cuda", HWDEC_CUDA}, {"cuda-copy", HWDEC_CUDA_COPY}, + {"crystalhd", HWDEC_CRYSTALHD}, {0} }; diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c index ed1ba6b6dc..86cf815320 100644 --- a/video/decode/vd_lavc.c +++ b/video/decode/vd_lavc.c @@ -164,6 +164,12 @@ static const struct vd_lavc_hwdec mp_vd_lavc_cuda_copy = { }; #endif +static const struct vd_lavc_hwdec mp_vd_lavc_crystalhd = { + .type = HWDEC_CRYSTALHD, + .lavc_suffix = "_crystalhd", + .copying = true, +}; + static const struct vd_lavc_hwdec *const hwdec_list[] = { #if HAVE_RPI &mp_vd_lavc_rpi, @@ -193,6 +199,7 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = { &mp_vd_lavc_cuda, &mp_vd_lavc_cuda_copy, #endif + &mp_vd_lavc_crystalhd, NULL }; diff --git a/video/hwdec.h b/video/hwdec.h index fd99043c10..34b65fe15c 100644 --- a/video/hwdec.h +++ b/video/hwdec.h @@ -24,6 +24,7 @@ enum hwdec_type { HWDEC_MEDIACODEC, HWDEC_CUDA, HWDEC_CUDA_COPY, + HWDEC_CRYSTALHD, }; #define HWDEC_IS_AUTO(x) ((x) == HWDEC_AUTO || (x) == HWDEC_AUTO_COPY) -- cgit v1.2.3