[Pkg-gstreamer-commits] [gstreamer-vaapi] 46/176: utils: add new H.264 helper functions.
Vincent Cheng
vcheng at moszumanska.debian.org
Tue Jun 3 08:09:26 UTC 2014
This is an automated email from the git hooks/post-receive script.
vcheng pushed a commit to branch upstream
in repository gstreamer-vaapi.
commit 47dee4db9620877af21b1da948147ae7174f28ef
Author: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
Date: Fri Dec 6 17:21:52 2013 +0100
utils: add new H.264 helper functions.
* Profiles:
- gst_vaapi_utils_h264_get_profile():
Returns GstVaapiProfile from H.264 profile_idc value
- gst_vaapi_utils_h264_get_profile_idc():
Returns H.264 profile_idc value from GstVaapiProfile
* Chroma formats:
- gst_vaapi_utils_h264_get_chroma_type():
Returns GstVaapiChromaType from H.264 chroma_format_idc value
- gst_vaapi_utils_h264_get_chroma_format_idc():
Returns H.264 chroma_format_idc value from GstVaapiChromaType
---
gst-libs/gst/vaapi/Makefile.am | 2 +
gst-libs/gst/vaapi/gstvaapidecoder_h264.c | 44 +----------
gst-libs/gst/vaapi/gstvaapiutils_h264.c | 127 ++++++++++++++++++++++++++++++
gst-libs/gst/vaapi/gstvaapiutils_h264.h | 54 +++++++++++++
4 files changed, 186 insertions(+), 41 deletions(-)
diff --git a/gst-libs/gst/vaapi/Makefile.am b/gst-libs/gst/vaapi/Makefile.am
index 993c762..6fc4583 100644
--- a/gst-libs/gst/vaapi/Makefile.am
+++ b/gst-libs/gst/vaapi/Makefile.am
@@ -69,6 +69,7 @@ libgstvaapi_source_c = \
gstvaapisurfacepool.c \
gstvaapisurfaceproxy.c \
gstvaapiutils.c \
+ gstvaapiutils_h264.c \
gstvaapivalue.c \
gstvaapivideopool.c \
gstvaapiwindow.c \
@@ -120,6 +121,7 @@ libgstvaapi_source_priv_h = \
gstvaapisurface_priv.h \
gstvaapisurfaceproxy_priv.h \
gstvaapiutils.h \
+ gstvaapiutils_h264.h \
gstvaapiversion.h \
gstvaapivideopool_priv.h \
gstvaapiwindow_priv.h \
diff --git a/gst-libs/gst/vaapi/gstvaapidecoder_h264.c b/gst-libs/gst/vaapi/gstvaapidecoder_h264.c
index ba4c0b5..3b0af8a 100644
--- a/gst-libs/gst/vaapi/gstvaapidecoder_h264.c
+++ b/gst-libs/gst/vaapi/gstvaapidecoder_h264.c
@@ -34,6 +34,7 @@
#include "gstvaapidecoder_priv.h"
#include "gstvaapidisplay_priv.h"
#include "gstvaapiobject_priv.h"
+#include "gstvaapiutils_h264.h"
#define DEBUG 1
#include "gstvaapidebug.h"
@@ -762,45 +763,6 @@ gst_vaapi_decoder_h264_create(GstVaapiDecoder *base_decoder)
return TRUE;
}
-static guint
-h264_get_profile(GstH264SPS *sps)
-{
- guint profile = 0;
-
- switch (sps->profile_idc) {
- case GST_H264_PROFILE_BASELINE:
- profile = GST_VAAPI_PROFILE_H264_BASELINE;
- break;
- case GST_H264_PROFILE_MAIN:
- profile = GST_VAAPI_PROFILE_H264_MAIN;
- break;
- case GST_H264_PROFILE_HIGH:
- profile = GST_VAAPI_PROFILE_H264_HIGH;
- break;
- }
- return profile;
-}
-
-static guint
-h264_get_chroma_type(GstH264SPS *sps)
-{
- guint chroma_type = 0;
-
- switch (sps->chroma_format_idc) {
- case 1:
- chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420;
- break;
- case 2:
- chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
- break;
- case 3:
- if (!sps->separate_colour_plane_flag)
- chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444;
- break;
- }
- return chroma_type;
-}
-
static GstVaapiProfile
get_profile(GstVaapiDecoderH264 *decoder, GstH264SPS *sps)
{
@@ -809,7 +771,7 @@ get_profile(GstVaapiDecoderH264 *decoder, GstH264SPS *sps)
GstVaapiProfile profile, profiles[2];
guint i, n_profiles = 0;
- profile = h264_get_profile(sps);
+ profile = gst_vaapi_utils_h264_get_profile(sps->profile_idc);
if (!profile)
return GST_VAAPI_PROFILE_UNKNOWN;
@@ -857,7 +819,7 @@ ensure_context(GstVaapiDecoderH264 *decoder, GstH264SPS *sps)
priv->profile = profile;
}
- chroma_type = h264_get_chroma_type(sps);
+ chroma_type = gst_vaapi_utils_h264_get_chroma_type(sps->chroma_format_idc);
if (!chroma_type || chroma_type != GST_VAAPI_CHROMA_TYPE_YUV420) {
GST_ERROR("unsupported chroma_format_idc %u", sps->chroma_format_idc);
return GST_VAAPI_DECODER_STATUS_ERROR_UNSUPPORTED_CHROMA_FORMAT;
diff --git a/gst-libs/gst/vaapi/gstvaapiutils_h264.c b/gst-libs/gst/vaapi/gstvaapiutils_h264.c
new file mode 100644
index 0000000..8ddc7fb
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapiutils_h264.c
@@ -0,0 +1,127 @@
+/*
+ * gstvaapiutils_h264.c - H.264 related utilities
+ *
+ * Copyright (C) 2011-2013 Intel Corporation
+ * Author: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
+ *
+ * This library 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 library 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 library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#include "sysdeps.h"
+#include <gst/codecparsers/gsth264parser.h>
+#include "gstvaapiutils_h264.h"
+
+/** Returns GstVaapiProfile from H.264 profile_idc value */
+GstVaapiProfile
+gst_vaapi_utils_h264_get_profile (guint8 profile_idc)
+{
+ GstVaapiProfile profile;
+
+ switch (profile_idc) {
+ case GST_H264_PROFILE_BASELINE:
+ profile = GST_VAAPI_PROFILE_H264_BASELINE;
+ break;
+ case GST_H264_PROFILE_MAIN:
+ profile = GST_VAAPI_PROFILE_H264_MAIN;
+ break;
+ case GST_H264_PROFILE_HIGH:
+ profile = GST_VAAPI_PROFILE_H264_HIGH;
+ break;
+ default:
+ g_assert (0 && "unsupported profile_idc value");
+ profile = GST_VAAPI_PROFILE_UNKNOWN;
+ break;
+ }
+ return profile;
+}
+
+/** Returns H.264 profile_idc value from GstVaapiProfile */
+guint8
+gst_vaapi_utils_h264_get_profile_idc (GstVaapiProfile profile)
+{
+ guint8 profile_idc;
+
+ switch (profile) {
+ case GST_VAAPI_PROFILE_H264_BASELINE:
+ profile_idc = GST_H264_PROFILE_BASELINE;
+ break;
+ case GST_VAAPI_PROFILE_H264_MAIN:
+ profile_idc = GST_H264_PROFILE_MAIN;
+ break;
+ case GST_VAAPI_PROFILE_H264_HIGH:
+ profile_idc = GST_H264_PROFILE_HIGH;
+ break;
+ default:
+ g_assert (0 && "unsupported GstVaapiProfile value");
+ profile_idc = 0;
+ break;
+ }
+ return profile_idc;
+}
+
+/** Returns GstVaapiChromaType from H.264 chroma_format_idc value */
+GstVaapiChromaType
+gst_vaapi_utils_h264_get_chroma_type (guint chroma_format_idc)
+{
+ GstVaapiChromaType chroma_type;
+
+ switch (chroma_format_idc) {
+ case 0:
+ chroma_type = GST_VAAPI_CHROMA_TYPE_YUV400;
+ break;
+ case 1:
+ chroma_type = GST_VAAPI_CHROMA_TYPE_YUV420;
+ break;
+ case 2:
+ chroma_type = GST_VAAPI_CHROMA_TYPE_YUV422;
+ break;
+ case 3:
+ chroma_type = GST_VAAPI_CHROMA_TYPE_YUV444;
+ break;
+ default:
+ g_assert (0 && "unsupported chroma_format_idc value");
+ chroma_type = (GstVaapiChromaType) 0;
+ break;
+ }
+ return chroma_type;
+}
+
+/** Returns H.264 chroma_format_idc value from GstVaapiChromaType */
+guint
+gst_vaapi_utils_h264_get_chroma_format_idc (GstVaapiChromaType chroma_type)
+{
+ guint chroma_format_idc;
+
+ switch (chroma_type) {
+ case GST_VAAPI_CHROMA_TYPE_YUV400:
+ chroma_format_idc = 0;
+ break;
+ case GST_VAAPI_CHROMA_TYPE_YUV420:
+ chroma_format_idc = 1;
+ break;
+ case GST_VAAPI_CHROMA_TYPE_YUV422:
+ chroma_format_idc = 2;
+ break;
+ case GST_VAAPI_CHROMA_TYPE_YUV444:
+ chroma_format_idc = 3;
+ break;
+ default:
+ g_assert (0 && "unsupported GstVaapiChromaType value");
+ chroma_format_idc = 1;
+ break;
+ }
+ return chroma_format_idc;
+}
diff --git a/gst-libs/gst/vaapi/gstvaapiutils_h264.h b/gst-libs/gst/vaapi/gstvaapiutils_h264.h
new file mode 100644
index 0000000..f1abf22
--- /dev/null
+++ b/gst-libs/gst/vaapi/gstvaapiutils_h264.h
@@ -0,0 +1,54 @@
+/*
+ * gstvaapiutils_h264.h - H.264 related utilities
+ *
+ * Copyright (C) 2011-2013 Intel Corporation
+ * Author: Gwenole Beauchesne <gwenole.beauchesne at intel.com>
+ *
+ * This library 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 library 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 library; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef GST_VAAPI_UTILS_H264_H
+#define GST_VAAPI_UTILS_H264_H
+
+#include <va/va.h>
+#include <gst/vaapi/gstvaapiprofile.h>
+#include <gst/vaapi/gstvaapisurface.h>
+
+G_BEGIN_DECLS
+
+/* Returns GstVaapiProfile from H.264 profile_idc value */
+G_GNUC_INTERNAL
+GstVaapiProfile
+gst_vaapi_utils_h264_get_profile (guint8 profile_idc);
+
+/* Returns H.264 profile_idc value from GstVaapiProfile */
+G_GNUC_INTERNAL
+guint8
+gst_vaapi_utils_h264_get_profile_idc (GstVaapiProfile profile);
+
+/* Returns GstVaapiChromaType from H.264 chroma_format_idc value */
+G_GNUC_INTERNAL
+GstVaapiChromaType
+gst_vaapi_utils_h264_get_chroma_type (guint chroma_format_idc);
+
+/* Returns H.264 chroma_format_idc value from GstVaapiChromaType */
+G_GNUC_INTERNAL
+guint
+gst_vaapi_utils_h264_get_chroma_format_idc (GstVaapiChromaType chroma_type);
+
+G_END_DECLS
+
+#endif /* GST_VAAPI_UTILS_H264_H */
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gstreamer/gstreamer-vaapi.git
More information about the Pkg-gstreamer-commits
mailing list