summaryrefslogtreecommitdiffstats
path: root/video/out/opengl/hwdec_osx.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-11-17 21:07:41 +0100
committerwm4 <wm4@nowhere>2015-11-17 21:21:19 +0100
commit0ec35fa111391b8069640ba2f616746a1b5530a5 (patch)
treee5356e8ab396e1c370a7784843f3101d3195469f /video/out/opengl/hwdec_osx.c
parent25fe9e89e7db1658acac84ec8ac0a292b2e86165 (diff)
downloadmpv-0ec35fa111391b8069640ba2f616746a1b5530a5.tar.bz2
mpv-0ec35fa111391b8069640ba2f616746a1b5530a5.tar.xz
videotoolbox: make decoder format customizable
Because apparently there's no ideal universally working format. The weird OpenGL texture format for kCVPixelFormatType_32BGRA is from: http://stackoverflow.com/questions/22077544/draw-an-iosurface-to-an-opengl-context (Which apparently got it from the linked Apple example code.)
Diffstat (limited to 'video/out/opengl/hwdec_osx.c')
-rw-r--r--video/out/opengl/hwdec_osx.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/video/out/opengl/hwdec_osx.c b/video/out/opengl/hwdec_osx.c
index 84e8abca41..d1212e220f 100644
--- a/video/out/opengl/hwdec_osx.c
+++ b/video/out/opengl/hwdec_osx.c
@@ -26,6 +26,8 @@
#include "video/mp_image_pool.h"
#include "hwdec.h"
+#include "common/global.h"
+#include "options/options.h"
struct vt_gl_plane_format {
GLenum gl_format;
@@ -55,7 +57,23 @@ static struct vt_format vt_formats[] = {
{ GL_RED, GL_UNSIGNED_BYTE, GL_RED },
{ GL_RG, GL_UNSIGNED_BYTE, GL_RG } ,
}
- }
+ },
+ {
+ .cvpixfmt = kCVPixelFormatType_422YpCbCr8,
+ .imgfmt = IMGFMT_UYVY,
+ .planes = 1,
+ .gl = {
+ { GL_RGB_422_APPLE, GL_UNSIGNED_SHORT_8_8_APPLE, GL_RGB }
+ }
+ },
+ {
+ .cvpixfmt = kCVPixelFormatType_32BGRA,
+ .imgfmt = IMGFMT_RGB0,
+ .planes = 1,
+ .gl = {
+ { GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, GL_RGBA }
+ }
+ },
};
static struct vt_format *vt_get_gl_format(uint32_t cvpixfmt)
@@ -134,7 +152,8 @@ static int create(struct gl_hwdec *hw)
return -1;
struct priv *p = talloc_zero(hw, struct priv);
- struct vt_format *f = vt_get_gl_format_from_imgfmt(IMGFMT_NV12);
+ struct vt_format *f =
+ vt_get_gl_format_from_imgfmt(hw->global->opts->videotoolbox_format);
if (!f)
return -1;
@@ -143,6 +162,7 @@ static int create(struct gl_hwdec *hw)
hw->hwctx = &p->hwctx;
hw->hwctx->download_image = download_image;
hw->hwctx->type = HWDEC_VIDEOTOOLBOX;
+ hw->hwctx->priv = (void *)(uintptr_t)f->cvpixfmt;
hw->gl_texture_target = GL_TEXTURE_RECTANGLE;
hw->gl->GenTextures(MP_MAX_PLANES, p->gl_planes);