summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-09-28 21:55:23 +0200
committerwm4 <wm4@nowhere>2015-09-28 22:03:14 +0200
commit1dd7b7bddc694b1c018b74bccaebcc98d9144ee4 (patch)
tree8b8613ab7157e8885f9b093266eabab830cf6dcf /video
parent15ef9f9ee6e4aa70b07afd9a2fafff34606d0142 (diff)
downloadmpv-1dd7b7bddc694b1c018b74bccaebcc98d9144ee4.tar.bz2
mpv-1dd7b7bddc694b1c018b74bccaebcc98d9144ee4.tar.xz
video: remove VDA support
VideoToolbox is preferred. Now that FFmpeg released 2.8, there's no reason to support VDA anymore. In fact, we had a bug that made VDA not useable with older FFmpeg versions in some newer mpv releases. VideoToolbox is supported even on slightly older OSX versions, and if not, you still can run mpv without hw decoding.
Diffstat (limited to 'video')
-rw-r--r--video/decode/vd_lavc.c4
-rw-r--r--video/decode/vda.c118
-rw-r--r--video/fmt-conversion.c3
-rw-r--r--video/hwdec.h1
-rw-r--r--video/img_format.c1
-rw-r--r--video/img_format.h6
-rw-r--r--video/out/opengl/hwdec.c3
-rw-r--r--video/out/opengl/hwdec.h2
-rw-r--r--video/out/opengl/hwdec_vda.c7
9 files changed, 3 insertions, 142 deletions
diff --git a/video/decode/vd_lavc.c b/video/decode/vd_lavc.c
index 6df662e23c..c4d4344f47 100644
--- a/video/decode/vd_lavc.c
+++ b/video/decode/vd_lavc.c
@@ -116,7 +116,6 @@ const struct m_sub_options vd_lavc_conf = {
};
const struct vd_lavc_hwdec mp_vd_lavc_vdpau;
-const struct vd_lavc_hwdec mp_vd_lavc_vda;
const struct vd_lavc_hwdec mp_vd_lavc_videotoolbox;
const struct vd_lavc_hwdec mp_vd_lavc_vaapi;
const struct vd_lavc_hwdec mp_vd_lavc_vaapi_copy;
@@ -133,9 +132,6 @@ static const struct vd_lavc_hwdec *const hwdec_list[] = {
#if HAVE_VIDEOTOOLBOX_HWACCEL
&mp_vd_lavc_videotoolbox,
#endif
-#if HAVE_VDA_HWACCEL
- &mp_vd_lavc_vda,
-#endif
#if HAVE_VAAPI_HWACCEL
&mp_vd_lavc_vaapi,
&mp_vd_lavc_vaapi_copy,
diff --git a/video/decode/vda.c b/video/decode/vda.c
deleted file mode 100644
index 538d21b753..0000000000
--- a/video/decode/vda.c
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * This file is part of mpv.
- *
- * Copyright (c) 2013 Stefano Pigozzi <stefano.pigozzi@gmail.com>
- *
- * mpv is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with mpv. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <libavcodec/version.h>
-#include <libavcodec/vda.h>
-
-#include "common/av_common.h"
-#include "common/msg.h"
-#include "video/mp_image.h"
-#include "video/decode/lavc.h"
-#include "config.h"
-
-static int probe(struct vd_lavc_hwdec *hwdec, struct mp_hwdec_info *info,
- const char *decoder)
-{
- hwdec_request_api(info, "videotoolbox");
- if (!info || !info->hwctx)
- return HWDEC_ERR_NO_CTX;
- if (mp_codec_to_av_codec_id(decoder) != AV_CODEC_ID_H264)
- return HWDEC_ERR_NO_CODEC;
- return 0;
-}
-
-static int init(struct lavc_ctx *ctx)
-{
- return 0;
-}
-
-struct vda_error {
- int code;
- char *reason;
-};
-
-static const struct vda_error vda_errors[] = {
- { AVERROR(ENOSYS),
- "Hardware doesn't support accelerated decoding for this stream" },
- { AVERROR(EINVAL),
- "Invalid configuration provided to VDADecoderCreate" },
- { AVERROR_INVALIDDATA,
- "Generic error returned by the decoder layer. The cause can range from"
- " VDADecoder finding errors in the bitstream to another application"
- " using VDA at the moment. Only one application can use VDA at a"
- " givent time." },
- { 0, NULL },
-};
-
-static void print_vda_error(struct mp_log *log, int lev, char *message,
- int error_code)
-{
- for (int n = 0; vda_errors[n].code < 0; n++)
- if (vda_errors[n].code == error_code) {
- mp_msg(log, lev, "%s: %s (%d)\n",
- message, vda_errors[n].reason, error_code);
- return;
- }
-
- mp_msg(log, lev, "%s: %d\n", message, error_code);
-}
-
-static int init_decoder(struct lavc_ctx *ctx, int w, int h)
-{
- av_vda_default_free(ctx->avctx);
-#if HAVE_VDA_DEFAULT_INIT2
- AVVDAContext *vdactx = av_vda_alloc_context();
- vdactx->cv_pix_fmt_type = kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange;
- int err = av_vda_default_init2(ctx->avctx, vdactx);
-#else
- int err = av_vda_default_init(ctx->avctx);
-#endif
-
- if (err < 0) {
- print_vda_error(ctx->log, MSGL_ERR, "failed to init VDA decoder", err);
- return -1;
- }
- return 0;
-}
-
-static void uninit(struct lavc_ctx *ctx)
-{
- if (ctx->avctx)
- av_vda_default_free(ctx->avctx);
-}
-
-static struct mp_image *process_image(struct lavc_ctx *ctx, struct mp_image *img)
-{
- // Same representation. IMGFMT_VDA is only needed to select the libavcodec
- // hwaccel driver.
- if (img->imgfmt == IMGFMT_VDA)
- mp_image_setfmt(img, IMGFMT_VIDEOTOOLBOX);
-
- return img;
-}
-
-const struct vd_lavc_hwdec mp_vd_lavc_vda = {
- .type = HWDEC_VDA,
- .image_format = IMGFMT_VDA,
- .probe = probe,
- .init = init,
- .uninit = uninit,
- .init_decoder = init_decoder,
- .process_image = process_image,
-};
diff --git a/video/fmt-conversion.c b/video/fmt-conversion.c
index 797d243002..6482f5429f 100644
--- a/video/fmt-conversion.c
+++ b/video/fmt-conversion.c
@@ -118,9 +118,6 @@ static const struct {
#endif
{IMGFMT_VDPAU, AV_PIX_FMT_VDPAU},
-#if HAVE_VDA_HWACCEL
- {IMGFMT_VDA, AV_PIX_FMT_VDA},
-#endif
#if HAVE_VIDEOTOOLBOX_HWACCEL
{IMGFMT_VIDEOTOOLBOX, AV_PIX_FMT_VIDEOTOOLBOX},
#endif
diff --git a/video/hwdec.h b/video/hwdec.h
index d950a86ef2..f2a72aef99 100644
--- a/video/hwdec.h
+++ b/video/hwdec.h
@@ -10,7 +10,6 @@ enum hwdec_type {
HWDEC_AUTO = -1,
HWDEC_NONE = 0,
HWDEC_VDPAU = 1,
- HWDEC_VDA = 2,
HWDEC_VIDEOTOOLBOX = 3,
HWDEC_VAAPI = 4,
HWDEC_VAAPI_COPY = 5,
diff --git a/video/img_format.c b/video/img_format.c
index bb6f106e1a..7ed4c722e8 100644
--- a/video/img_format.c
+++ b/video/img_format.c
@@ -37,7 +37,6 @@ static const struct mp_imgfmt_entry mp_imgfmt_list[] = {
// not in ffmpeg
{"vdpau_output", IMGFMT_VDPAU_OUTPUT},
// FFmpeg names have an annoying "_vld" suffix
- {"vda", IMGFMT_VDA},
{"videotoolbox", IMGFMT_VIDEOTOOLBOX},
{"vaapi", IMGFMT_VAAPI},
// names below this are not preferred over the FFmpeg names
diff --git a/video/img_format.h b/video/img_format.h
index f88592e7f9..fefe0b82e4 100644
--- a/video/img_format.h
+++ b/video/img_format.h
@@ -205,11 +205,7 @@ enum mp_imgfmt {
IMGFMT_VAAPI,
IMGFMT_DXVA2, // IDirect3DSurface9 (NV12)
IMGFMT_MMAL, // MMAL_BUFFER_HEADER_T
- // These use the same underlying format, but FFmpeg requires us to keep
- // them separate. The VDA decoder will change the format to
- // IMGFMT_VIDEOTOOLBOX, though.
- IMGFMT_VIDEOTOOLBOX,
- IMGFMT_VDA,
+ IMGFMT_VIDEOTOOLBOX, // CVPixelBufferRef
// Generic pass-through of AV_PIX_FMT_*. Used for formats which don't have
// a corresponding IMGFMT_ value.
diff --git a/video/out/opengl/hwdec.c b/video/out/opengl/hwdec.c
index 7665d0c056..6eefbc4744 100644
--- a/video/out/opengl/hwdec.c
+++ b/video/out/opengl/hwdec.c
@@ -31,7 +31,6 @@
extern const struct gl_hwdec_driver gl_hwdec_vaegl;
extern const struct gl_hwdec_driver gl_hwdec_vaglx;
-extern const struct gl_hwdec_driver gl_hwdec_vda;
extern const struct gl_hwdec_driver gl_hwdec_videotoolbox;
extern const struct gl_hwdec_driver gl_hwdec_vdpau;
extern const struct gl_hwdec_driver gl_hwdec_dxva2;
@@ -46,7 +45,7 @@ static const struct gl_hwdec_driver *const mpgl_hwdec_drivers[] = {
#if HAVE_VDPAU_GL_X11
&gl_hwdec_vdpau,
#endif
-#if HAVE_VIDEOTOOLBOX_VDA_GL
+#if HAVE_VIDEOTOOLBOX_GL
&gl_hwdec_videotoolbox,
#endif
#if HAVE_DXVA2_HWACCEL
diff --git a/video/out/opengl/hwdec.h b/video/out/opengl/hwdec.h
index c48ec8b164..7d6f300db7 100644
--- a/video/out/opengl/hwdec.h
+++ b/video/out/opengl/hwdec.h
@@ -21,7 +21,7 @@ struct gl_hwdec {
// IMGFMT_RGB0 indicates that the video texture is RGB.
int converted_imgfmt;
// Normally this is GL_TEXTURE_2D, but the hwdec driver can set it to
- // GL_TEXTURE_RECTANGLE. This is needed because VDA is shit.
+ // GL_TEXTURE_RECTANGLE. This is needed because VideoToolbox is shit.
GLenum gl_texture_target;
};
diff --git a/video/out/opengl/hwdec_vda.c b/video/out/opengl/hwdec_vda.c
index e921df2f80..19d93e74d6 100644
--- a/video/out/opengl/hwdec_vda.c
+++ b/video/out/opengl/hwdec_vda.c
@@ -17,8 +17,6 @@
* with mpv. If not, see <http://www.gnu.org/licenses/>.
*/
-// Note: handles both VDA and VideoToolbox
-
#include <assert.h>
#include <IOSurface/IOSurface.h>
@@ -160,12 +158,7 @@ static int create_common(struct gl_hwdec *hw, struct vda_format *format)
static int create(struct gl_hwdec *hw)
{
- // For videotoolbox, we always request NV12.
-#if HAVE_VDA_DEFAULT_INIT2
struct vda_format *f = vda_get_gl_format_from_imgfmt(IMGFMT_NV12);
-#else
- struct vda_format *f = vda_get_gl_format_from_imgfmt(IMGFMT_UYVY);
-#endif
if (create_common(hw, f))
return -1;