[vlc-commits] videotoolbox: add vt_utils helper
Thomas Guillem
git at videolan.org
Fri Jun 2 18:44:00 CEST 2017
vlc | branch: master | Thomas Guillem <thomas at gllm.fr> | Tue Apr 4 18:00:16 2017 +0200| [1521d9bd8cc9f042cf88ee7498ccebe6a217e08b] | committer: Thomas Guillem
videotoolbox: add vt_utils helper
This helper will be used by the videotoobox codec, the cvpx chroma and by the
cvpx opengl converter.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=1521d9bd8cc9f042cf88ee7498ccebe6a217e08b
---
modules/codec/Makefile.am | 1 +
modules/codec/vt_utils.c | 64 ++++++++++++++++++++++++++++++++++++++++
modules/codec/vt_utils.h | 40 +++++++++++++++++++++++++
modules/video_chroma/Makefile.am | 3 +-
modules/video_output/Makefile.am | 3 +-
5 files changed, 109 insertions(+), 2 deletions(-)
diff --git a/modules/codec/Makefile.am b/modules/codec/Makefile.am
index bc8ee821f2..14fc7f00b1 100644
--- a/modules/codec/Makefile.am
+++ b/modules/codec/Makefile.am
@@ -317,6 +317,7 @@ EXTRA_LTLIBRARIES += liboggspots_plugin.la
codec_LTLIBRARIES += $(LTLIBoggspots)
libvideotoolbox_plugin_la_SOURCES = video_chroma/copy.c video_chroma/copy.h \
+ codec/vt_utils.c codec/vt_utils.h \
codec/videotoolbox.m codec/hxxx_helper.c codec/hxxx_helper.h \
packetizer/hxxx_nal.h packetizer/hxxx_nal.c \
packetizer/hxxx_sei.h packetizer/hxxx_sei.c \
diff --git a/modules/codec/vt_utils.c b/modules/codec/vt_utils.c
new file mode 100644
index 0000000000..fc15780471
--- /dev/null
+++ b/modules/codec/vt_utils.c
@@ -0,0 +1,64 @@
+/*****************************************************************************
+ * vt_utils.c: videotoolbox/cvpx utility functions
+ *****************************************************************************
+ * Copyright (C) 2017 VLC authors, VideoLAN and VideoLabs
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
+#include "vt_utils.h"
+
+struct cvpxpic_ctx
+{
+ void (*pf_destroy)(void *); /* must be first @ref picture_Release() */
+ CVPixelBufferRef cvpx;
+};
+
+static void
+cvpxpic_destroy_cb(void *opaque)
+{
+ struct cvpxpic_ctx *ctx = opaque;
+
+ CFRelease(ctx->cvpx);
+ free(opaque);
+}
+
+int
+cvpxpic_attach(picture_t *p_pic, CVPixelBufferRef cvpx)
+{
+ /* will be freed by the vout */
+ struct cvpxpic_ctx *ctx = malloc(sizeof(struct cvpxpic_ctx));
+ if (ctx == NULL)
+ {
+ picture_Release(p_pic);
+ return VLC_ENOMEM;
+ }
+ ctx->pf_destroy = cvpxpic_destroy_cb;
+ ctx->cvpx = CVPixelBufferRetain(cvpx);
+ p_pic->context = ctx;
+
+ return VLC_SUCCESS;
+}
+
+CVPixelBufferRef
+cvpxpic_get_ref(picture_t *pic)
+{
+ assert(pic->context != NULL);
+ return ((struct cvpxpic_ctx *)pic->context)->cvpx;
+}
diff --git a/modules/codec/vt_utils.h b/modules/codec/vt_utils.h
new file mode 100644
index 0000000000..a338ff0aac
--- /dev/null
+++ b/modules/codec/vt_utils.h
@@ -0,0 +1,40 @@
+/*****************************************************************************
+ * vt_utils.h: videotoolbox/cvpx utility functions
+ *****************************************************************************
+ * Copyright (C) 2017 VLC authors, VideoLAN and VideoLabs
+ *
+ * This program 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.
+ *
+ * This program 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 this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#ifndef VLC_CODEC_VTUTILS_H_
+#define VLC_CODEC_VTUTILS_H_
+
+#include <VideoToolbox/VideoToolbox.h>
+#include <vlc_picture.h>
+
+/*
+ * Attach a cvpx buffer to a picture
+ *
+ * The cvpx ref will be released when the picture is released
+ * @return VLC_SUCCESS or VLC_ENOMEM
+ */
+int cvpxpic_attach(picture_t *p_pic, CVPixelBufferRef cvpx);
+
+/*
+ * Get the cvpx buffer attached to a picture
+ */
+CVPixelBufferRef cvpxpic_get_ref(picture_t *pic);
+
+#endif
diff --git a/modules/video_chroma/Makefile.am b/modules/video_chroma/Makefile.am
index 5857334c25..5d5003c2ff 100644
--- a/modules/video_chroma/Makefile.am
+++ b/modules/video_chroma/Makefile.am
@@ -132,7 +132,8 @@ chroma_LTLIBRARIES += \
libd3d11_surface_plugin.la
endif
-libcvpx_plugin_la_SOURCES = video_chroma/cvpx.c video_chroma/copy.c video_chroma/copy.h
+libcvpx_plugin_la_SOURCES = video_chroma/cvpx.c video_chroma/copy.c video_chroma/copy.h \
+ codec/vt_utils.c codec/vt_utils.h
libcvpx_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(chromadir)' -Wl,-framework,Foundation -Wl,-framework,VideoToolbox -Wl,-framework,CoreMedia -Wl,-framework,CoreVideo
EXTRA_LTLIBRARIES += libcvpx_plugin.la
chroma_LTLIBRARIES += $(LTLIBcvpx)
diff --git a/modules/video_output/Makefile.am b/modules/video_output/Makefile.am
index 783c047932..dae0183d96 100644
--- a/modules/video_output/Makefile.am
+++ b/modules/video_output/Makefile.am
@@ -13,7 +13,8 @@ if HAVE_ANDROID
OPENGL_COMMONSOURCES += video_output/opengl/converter_android.c
endif
if HAVE_OSX
-OPENGL_COMMONSOURCES += video_output/opengl/converter_cvpx.c
+OPENGL_COMMONSOURCES += video_output/opengl/converter_cvpx.c \
+ codec/vt_utils.c codec/vt_utils.h
OPENGL_COMMONCFLAGS += -DVLCGL_CONV_CVPX
OPENGL_COMMONLDFLAGS += -Wl,-framework,IOSurface -Wl,-framework,CoreVideo
endif
More information about the vlc-commits
mailing list