diff --git a/gst-libs/gst/gl/gstglsl.c b/gst-libs/gst/gl/gstglsl.c index e3fe9c540e..2a9fa4f234 100644 --- a/gst-libs/gst/gl/gstglsl.c +++ b/gst-libs/gst/gl/gstglsl.c @@ -191,11 +191,11 @@ _is_valid_version_profile (GstGLSLVersion version, GstGLSLProfile profile) return profile == GST_GLSL_PROFILE_ES; /* required profile and no ES profile for normal GL contexts */ - if (version >= GST_GLSL_VERSION_330) + if (version == GST_GLSL_VERSION_150 || version >= GST_GLSL_VERSION_330) return profile == GST_GLSL_PROFILE_NONE || profile == GST_GLSL_PROFILE_CORE || profile == GST_GLSL_PROFILE_COMPATIBILITY; - if (version <= GST_GLSL_VERSION_150) + if (version <= GST_GLSL_VERSION_140) return profile == GST_GLSL_PROFILE_NONE || profile == GST_GLSL_PROFILE_COMPATIBILITY; @@ -213,7 +213,7 @@ gst_glsl_version_profile_to_string (GstGLSLVersion version, version_s = gst_glsl_version_to_string (version); /* no profiles in GL/ES <= 150 */ - if (version <= GST_GLSL_VERSION_150) + if (version <= GST_GLSL_VERSION_140) profile_s = NULL; else profile_s = gst_glsl_profile_to_string (profile); @@ -233,10 +233,10 @@ _fixup_version_profile (GstGLSLVersion * version, GstGLSLProfile * profile) if (*version == GST_GLSL_VERSION_100 || *version == GST_GLSL_VERSION_300 || *version == GST_GLSL_VERSION_310 || *version == GST_GLSL_VERSION_320) *profile = GST_GLSL_PROFILE_ES; - else if (*version <= GST_GLSL_VERSION_150) + else if (*version <= GST_GLSL_VERSION_140) *profile = GST_GLSL_PROFILE_COMPATIBILITY; else if (*profile == GST_GLSL_PROFILE_NONE - && *version >= GST_GLSL_VERSION_330) + && (*version >= GST_GLSL_VERSION_150 || *version >= GST_GLSL_VERSION_330)) *profile = GST_GLSL_PROFILE_CORE; } @@ -324,7 +324,7 @@ gst_glsl_version_profile_from_string (const gchar * string, goto error; } /* got a profile when none was expected */ - if (version <= GST_GLSL_VERSION_150 && profile != GST_GLSL_PROFILE_NONE) { + if (version <= GST_GLSL_VERSION_140 && profile != GST_GLSL_PROFILE_NONE) { GST_WARNING ("Found a profile (%s) with a version (%s) that does not support " "profiles", gst_glsl_version_to_string (version), diff --git a/tests/check/libs/gstglsl.c b/tests/check/libs/gstglsl.c index d7a7c0c08b..969d73d074 100644 --- a/tests/check/libs/gstglsl.c +++ b/tests/check/libs/gstglsl.c @@ -63,13 +63,21 @@ static const struct {GstGLSLProfile profile; const gchar * name;} glsl_profiles[ {GST_GLSL_PROFILE_COMPATIBILITY, "compatibility"}, }; -static const struct {GstGLSLVersion version; GstGLSLProfile profile; const gchar * name;} glsl_version_profiles[] = { +struct version_profile_s +{ + GstGLSLVersion version; + GstGLSLProfile profile; + const gchar * name; +}; + +static const struct version_profile_s glsl_version_profiles_valid[] = { {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES, "100"}, {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_COMPATIBILITY, "110"}, {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_COMPATIBILITY, "120"}, {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_COMPATIBILITY, "130"}, {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_COMPATIBILITY, "140"}, - {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_COMPATIBILITY, "150"}, + {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_CORE, "150 core"}, + {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_COMPATIBILITY, "150 compatibility"}, {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_ES, "300 es"}, {GST_GLSL_VERSION_310, GST_GLSL_PROFILE_ES, "310 es"}, {GST_GLSL_VERSION_320, GST_GLSL_PROFILE_ES, "320 es"}, @@ -89,6 +97,39 @@ static const struct {GstGLSLVersion version; GstGLSLProfile profile; const gchar {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_COMPATIBILITY, "450 compatibility"}, }; +/* combinations that produce different results between serializing/deserializing + * due to default values being imposed */ +static const struct version_profile_s glsl_version_profiles_valid_serialize[] = { + {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_NONE, "100"}, + {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_NONE, "110"}, + {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_NONE, "120"}, + {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_NONE, "130"}, + {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_NONE, "140"}, + {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_NONE, "150"}, + {GST_GLSL_VERSION_330, GST_GLSL_PROFILE_NONE, "330"}, + {GST_GLSL_VERSION_400, GST_GLSL_PROFILE_NONE, "400"}, + {GST_GLSL_VERSION_410, GST_GLSL_PROFILE_NONE, "410"}, + {GST_GLSL_VERSION_420, GST_GLSL_PROFILE_NONE, "420"}, + {GST_GLSL_VERSION_430, GST_GLSL_PROFILE_NONE, "430"}, + {GST_GLSL_VERSION_440, GST_GLSL_PROFILE_NONE, "440"}, + {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_NONE, "450"}, +}; +static const struct version_profile_s glsl_version_profiles_valid_deserialize[] = { + {GST_GLSL_VERSION_100, GST_GLSL_PROFILE_ES, "100"}, + {GST_GLSL_VERSION_110, GST_GLSL_PROFILE_COMPATIBILITY, "110"}, + {GST_GLSL_VERSION_120, GST_GLSL_PROFILE_COMPATIBILITY, "120"}, + {GST_GLSL_VERSION_130, GST_GLSL_PROFILE_COMPATIBILITY, "130"}, + {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_COMPATIBILITY, "140"}, + {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_CORE, "150"}, + {GST_GLSL_VERSION_330, GST_GLSL_PROFILE_CORE, "330"}, + {GST_GLSL_VERSION_400, GST_GLSL_PROFILE_CORE, "400"}, + {GST_GLSL_VERSION_410, GST_GLSL_PROFILE_CORE, "410"}, + {GST_GLSL_VERSION_420, GST_GLSL_PROFILE_CORE, "420"}, + {GST_GLSL_VERSION_430, GST_GLSL_PROFILE_CORE, "430"}, + {GST_GLSL_VERSION_440, GST_GLSL_PROFILE_CORE, "440"}, + {GST_GLSL_VERSION_450, GST_GLSL_PROFILE_CORE, "450"}, +}; + static const gchar * invalid_deserialize_glsl[] = { "", " \t\r\n", @@ -101,8 +142,6 @@ static const gchar * invalid_deserialize_glsl[] = { "100 core", "100 compatibility", "150 es", - "150 core", - "150 compatibility", "300 core", "300 compatibility", "310 core", @@ -124,7 +163,6 @@ static const struct {GstGLSLVersion version; GstGLSLProfile profile;} invalid_se {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_ES}, {GST_GLSL_VERSION_140, GST_GLSL_PROFILE_CORE}, {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_ES}, - {GST_GLSL_VERSION_150, GST_GLSL_PROFILE_CORE}, {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_NONE}, {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_CORE}, {GST_GLSL_VERSION_300, GST_GLSL_PROFILE_COMPATIBILITY}, @@ -190,27 +228,55 @@ GST_START_TEST (test_serialization) gst_glsl_profile_to_string (profile)); } - for (i = 0; i < G_N_ELEMENTS (glsl_version_profiles); i++) { + for (i = 0; i < G_N_ELEMENTS (glsl_version_profiles_valid); i++) { gchar *version_profile_s; GstGLSLVersion version; GstGLSLProfile profile; version_profile_s = - gst_glsl_version_profile_to_string (glsl_version_profiles[i].version, - glsl_version_profiles[i].profile); + gst_glsl_version_profile_to_string (glsl_version_profiles_valid + [i].version, glsl_version_profiles_valid[i].profile); fail_unless (g_strcmp0 (version_profile_s, - glsl_version_profiles[i].name) == 0, "%s != %s", version_profile_s, - glsl_version_profiles[i].name); - fail_unless (gst_glsl_version_profile_from_string (glsl_version_profiles - [i].name, &version, &profile), "Failed to parse %s", - glsl_version_profiles[i].name); - fail_unless (profile == glsl_version_profiles[i].profile - && version == glsl_version_profiles[i].version, "%s != %s %s", - glsl_version_profiles[i].name, gst_glsl_version_to_string (version), + glsl_version_profiles_valid[i].name) == 0, "%s != %s", + version_profile_s, glsl_version_profiles_valid[i].name); + fail_unless (gst_glsl_version_profile_from_string + (glsl_version_profiles_valid[i].name, &version, &profile), + "Failed to parse %s", glsl_version_profiles_valid[i].name); + fail_unless (profile == glsl_version_profiles_valid[i].profile + && version == glsl_version_profiles_valid[i].version, "%s != %s %s", + glsl_version_profiles_valid[i].name, + gst_glsl_version_to_string (version), gst_glsl_profile_to_string (profile)); g_free (version_profile_s); } + for (i = 0; i < G_N_ELEMENTS (glsl_version_profiles_valid_serialize); i++) { + gchar *version_profile_s; + + version_profile_s = + gst_glsl_version_profile_to_string + (glsl_version_profiles_valid_serialize[i].version, + glsl_version_profiles_valid_serialize[i].profile); + fail_unless (g_strcmp0 (version_profile_s, + glsl_version_profiles_valid_serialize[i].name) == 0, "%s != %s", + version_profile_s, glsl_version_profiles_valid_serialize[i].name); + g_free (version_profile_s); + } + + for (i = 0; i < G_N_ELEMENTS (glsl_version_profiles_valid_deserialize); i++) { + GstGLSLVersion version; + GstGLSLProfile profile; + + fail_unless (gst_glsl_version_profile_from_string + (glsl_version_profiles_valid_deserialize[i].name, &version, &profile), + "Failed to parse %s", glsl_version_profiles_valid_deserialize[i].name); + fail_unless (profile == glsl_version_profiles_valid_deserialize[i].profile + && version == glsl_version_profiles_valid_deserialize[i].version, + "%s != %s %s", glsl_version_profiles_valid_deserialize[i].name, + gst_glsl_version_to_string (version), + gst_glsl_profile_to_string (profile)); + } + /* failures */ for (i = 0; i < G_N_ELEMENTS (invalid_deserialize_glsl); i++) { GstGLSLVersion version;