mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-01 14:11:15 +00:00
119 lines
3.1 KiB
C
119 lines
3.1 KiB
C
/*
|
|
* gstvaapiutils_vpx.c - vpx related utilities
|
|
*
|
|
* Copyright (C) 2020 Intel Corporation
|
|
* Author: He Junyan <junyan.he@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 "gstvaapiutils_vpx.h"
|
|
#include "gstvaapisurface.h"
|
|
|
|
struct map
|
|
{
|
|
guint value;
|
|
const gchar *name;
|
|
};
|
|
|
|
/* Profile string map */
|
|
static const struct map gst_vaapi_vp9_profile_map[] = {
|
|
/* *INDENT-OFF* */
|
|
{ GST_VAAPI_PROFILE_VP9_0, "0" },
|
|
{ GST_VAAPI_PROFILE_VP9_1, "1" },
|
|
{ GST_VAAPI_PROFILE_VP9_2, "2" },
|
|
{ GST_VAAPI_PROFILE_VP9_3, "3" },
|
|
{ 0, NULL }
|
|
/* *INDENT-ON* */
|
|
};
|
|
|
|
/* Lookup name in map */
|
|
static const struct map *
|
|
map_lookup_name (const struct map *m, const gchar * name)
|
|
{
|
|
g_return_val_if_fail (m != NULL, NULL);
|
|
|
|
if (!name)
|
|
return NULL;
|
|
|
|
for (; m->name != NULL; m++) {
|
|
if (strcmp (m->name, name) == 0)
|
|
return m;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/* Lookup value in map */
|
|
static const struct map *
|
|
map_lookup_value (const struct map *m, guint value)
|
|
{
|
|
g_return_val_if_fail (m != NULL, NULL);
|
|
|
|
for (; m->name != NULL; m++) {
|
|
if (m->value == value)
|
|
return m;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
/** Returns GstVaapiProfile from a string representation */
|
|
GstVaapiProfile
|
|
gst_vaapi_utils_vp9_get_profile_from_string (const gchar * str)
|
|
{
|
|
const struct map *const m = map_lookup_name (gst_vaapi_vp9_profile_map, str);
|
|
|
|
return m ? (GstVaapiProfile) m->value : GST_VAAPI_PROFILE_UNKNOWN;
|
|
}
|
|
|
|
/** Returns a string representation for the supplied VP9 profile */
|
|
const gchar *
|
|
gst_vaapi_utils_vp9_get_profile_string (GstVaapiProfile profile)
|
|
{
|
|
const struct map *const m =
|
|
map_lookup_value (gst_vaapi_vp9_profile_map, profile);
|
|
|
|
return m ? m->name : NULL;
|
|
}
|
|
|
|
/** Returns VP9 chroma_format_idc value from GstVaapiChromaType */
|
|
guint
|
|
gst_vaapi_utils_vp9_get_chroma_format_idc (guint 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:
|
|
case GST_VAAPI_CHROMA_TYPE_YUV420_10BPP:
|
|
chroma_format_idc = 1;
|
|
break;
|
|
case GST_VAAPI_CHROMA_TYPE_YUV422:
|
|
case GST_VAAPI_CHROMA_TYPE_YUV422_10BPP:
|
|
chroma_format_idc = 2;
|
|
break;
|
|
case GST_VAAPI_CHROMA_TYPE_YUV444:
|
|
case GST_VAAPI_CHROMA_TYPE_YUV444_10BPP:
|
|
chroma_format_idc = 3;
|
|
break;
|
|
default:
|
|
GST_DEBUG ("unsupported GstVaapiChromaType value");
|
|
chroma_format_idc = 1;
|
|
break;
|
|
}
|
|
return chroma_format_idc;
|
|
}
|