"alignment", G_TYPE_STRING, "au", NULL);
if (err == OMX_ErrorNone) {
- switch (param.eProfile) {
- case OMX_VIDEO_AVCProfileBaseline:
- profile = "baseline";
- break;
- case OMX_VIDEO_AVCProfileMain:
- profile = "main";
- break;
- case OMX_VIDEO_AVCProfileExtended:
- profile = "extended";
- break;
- case OMX_VIDEO_AVCProfileHigh:
- profile = "high";
- break;
- case OMX_VIDEO_AVCProfileHigh10:
- profile = "high-10";
- break;
- case OMX_VIDEO_AVCProfileHigh422:
- profile = "high-4:2:2";
- break;
- case OMX_VIDEO_AVCProfileHigh444:
- profile = "high-4:4:4";
- break;
- default:
- g_assert_not_reached ();
- gst_caps_unref (caps);
- return NULL;
+ profile = gst_omx_h264_utils_get_profile_from_enum (param.eProfile);
+ if (!profile) {
+ g_assert_not_reached ();
+ gst_caps_unref (caps);
+ return NULL;
}
switch (param.eLevel) {
#include "gstomxh264utils.h"
+typedef struct
+{
+ const gchar *profile;
+ OMX_VIDEO_AVCPROFILETYPE e;
+} H264ProfileMapping;
+
+static const H264ProfileMapping h264_profiles[] = {
+ {"baseline", OMX_VIDEO_AVCProfileBaseline},
+ {"constrained-baseline", OMX_VIDEO_AVCProfileBaseline},
+ {"main", OMX_VIDEO_AVCProfileMain},
+ {"extended", OMX_VIDEO_AVCProfileExtended},
+ {"high", OMX_VIDEO_AVCProfileHigh},
+ {"high-10", OMX_VIDEO_AVCProfileHigh10},
+ {"high-4:2:2", OMX_VIDEO_AVCProfileHigh422},
+ {"high-4:4:4", OMX_VIDEO_AVCProfileHigh444},
+};
+
OMX_VIDEO_AVCPROFILETYPE
gst_omx_h264_utils_get_profile_from_str (const gchar * profile)
{
- if (g_str_equal (profile, "baseline")) {
- return OMX_VIDEO_AVCProfileBaseline;
- } else if (g_str_equal (profile, "main")) {
- return OMX_VIDEO_AVCProfileMain;
- } else if (g_str_equal (profile, "extended")) {
- return OMX_VIDEO_AVCProfileExtended;
- } else if (g_str_equal (profile, "high")) {
- return OMX_VIDEO_AVCProfileHigh;
- } else if (g_str_equal (profile, "high-10")) {
- return OMX_VIDEO_AVCProfileHigh10;
- } else if (g_str_equal (profile, "high-4:2:2")) {
- return OMX_VIDEO_AVCProfileHigh422;
- } else if (g_str_equal (profile, "high-4:4:4")) {
- return OMX_VIDEO_AVCProfileHigh444;
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h264_profiles); i++) {
+ if (g_str_equal (profile, h264_profiles[i].profile))
+ return h264_profiles[i].e;
}
return OMX_VIDEO_AVCProfileMax;
}
+const gchar *
+gst_omx_h264_utils_get_profile_from_enum (OMX_VIDEO_AVCPROFILETYPE e)
+{
+ guint i;
+
+ for (i = 0; i < G_N_ELEMENTS (h264_profiles); i++) {
+ if (e == h264_profiles[i].e)
+ return h264_profiles[i].profile;
+ }
+
+ return NULL;
+}
+
OMX_VIDEO_AVCLEVELTYPE
gst_omx_h264_utils_get_level_from_str (const gchar * level)
{