From c8fa8085ba72538109b1e0a7af1ca399443b5e47 Mon Sep 17 00:00:00 2001 From: Edward Hervey Date: Wed, 22 Dec 2010 11:41:41 +0100 Subject: [PATCH] encoding-target: Add method to get a profile by name API: gst_encoding_target_get_profile --- docs/libs/gst-plugins-base-libs-sections.txt | 1 + gst-libs/gst/pbutils/encoding-profile.c | 10 ++-------- gst-libs/gst/pbutils/encoding-target.c | 29 ++++++++++++++++++++++++++++ gst-libs/gst/pbutils/encoding-target.h | 2 ++ tests/check/libs/profile.c | 25 ++++++++++++++++++++++++ win32/common/libgstpbutils.def | 1 + 6 files changed, 60 insertions(+), 8 deletions(-) diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt index da6134b..00e8bd7 100644 --- a/docs/libs/gst-plugins-base-libs-sections.txt +++ b/docs/libs/gst-plugins-base-libs-sections.txt @@ -1957,6 +1957,7 @@ gst_encoding_target_get_name gst_encoding_target_get_category gst_encoding_target_get_description gst_encoding_target_get_profiles +gst_encoding_target_get_profile gst_encoding_target_add_profile gst_encoding_target_save gst_encoding_target_save_to diff --git a/gst-libs/gst/pbutils/encoding-profile.c b/gst-libs/gst/pbutils/encoding-profile.c index f981f7e..174bfe6 100644 --- a/gst-libs/gst/pbutils/encoding-profile.c +++ b/gst-libs/gst/pbutils/encoding-profile.c @@ -95,20 +95,14 @@ *{ * GstEncodingProfile *prof = NULL; * GstEncodingTarget *target = NULL; - * GList *tmp; * * target = gst_encoding_target_load_from (path); * if (target == NULL) * return NULL; * - * for (tmp = target->profiles; tmp; tmp = tmp->next) { - * GstEncodingProfile *ptmp = (GstEncodingProfile*) tmp->data; + * prof = gst_encoding_target_get_profile (target, profilename); * - * if (!strcmp(gst_encoding_profile_get_name(ptmp), profilename)) { - * prof = ptmp; - * break; - * } - * } + * gst_encoding_target_unref (target); * * return prof; *} diff --git a/gst-libs/gst/pbutils/encoding-target.c b/gst-libs/gst/pbutils/encoding-target.c index a5a7b3d..601cdb2 100644 --- a/gst-libs/gst/pbutils/encoding-target.c +++ b/gst-libs/gst/pbutils/encoding-target.c @@ -152,6 +152,35 @@ gst_encoding_target_get_profiles (GstEncodingTarget * target) return target->profiles; } +/** + * gst_encoding_target_get_profile: + * @target: a #GstEncodingTarget + * @name: the name of the profile to retrieve + * + * Since: 0.10.32 + * + * Returns: (transfer full): The matching #GstEncodingProfile, or %NULL. + */ +GstEncodingProfile * +gst_encoding_target_get_profile (GstEncodingTarget * target, const gchar * name) +{ + GList *tmp; + + g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), NULL); + g_return_val_if_fail (name != NULL, NULL); + + for (tmp = target->profiles; tmp; tmp = tmp->next) { + GstEncodingProfile *tprof = (GstEncodingProfile *) tmp->data; + + if (!g_strcmp0 (gst_encoding_profile_get_name (tprof), name)) { + gst_encoding_profile_ref (tprof); + return tprof; + } + } + + return NULL; +} + static inline gboolean validate_name (const gchar * name) { diff --git a/gst-libs/gst/pbutils/encoding-target.h b/gst-libs/gst/pbutils/encoding-target.h index c23f526..0f9d340 100644 --- a/gst-libs/gst/pbutils/encoding-target.h +++ b/gst-libs/gst/pbutils/encoding-target.h @@ -85,6 +85,8 @@ const gchar *gst_encoding_target_get_name (GstEncodingTarget *target); const gchar *gst_encoding_target_get_category (GstEncodingTarget *target); const gchar *gst_encoding_target_get_description (GstEncodingTarget *target); const GList *gst_encoding_target_get_profiles (GstEncodingTarget *target); +GstEncodingProfile *gst_encoding_target_get_profile (GstEncodingTarget *target, + const gchar *name); gboolean gst_encoding_target_add_profile (GstEncodingTarget *target, GstEncodingProfile *profile); diff --git a/tests/check/libs/profile.c b/tests/check/libs/profile.c index 0018b0b..c9df843 100644 --- a/tests/check/libs/profile.c +++ b/tests/check/libs/profile.c @@ -253,6 +253,30 @@ create_saveload_target (void) return target; } +GST_START_TEST (test_target_profile) +{ + GstEncodingTarget *target; + GstEncodingProfile *prof; + + target = create_saveload_target (); + + /* NULL isn't a valid profile name */ + ASSERT_CRITICAL (gst_encoding_target_get_profile (target, NULL)); + + /* try finding a profile that doesn't exist */ + fail_if (gst_encoding_target_get_profile (target, + "no-really-does-not-exist")); + + /* try finding a profile that exists */ + prof = gst_encoding_target_get_profile (target, "pony"); + fail_if (prof == NULL); + + gst_encoding_profile_unref (prof); + gst_encoding_target_unref (target); +} + +GST_END_TEST; + GST_START_TEST (test_saving_profile) { GstEncodingTarget *orig, *loaded = NULL; @@ -473,6 +497,7 @@ profile_suite (void) tcase_add_test (tc_chain, test_profile_creation); tcase_add_test (tc_chain, test_profile_output_caps); tcase_add_test (tc_chain, test_target_naming); + tcase_add_test (tc_chain, test_target_profile); if (can_write) { tcase_add_test (tc_chain, test_loading_profile); tcase_add_test (tc_chain, test_saving_profile); diff --git a/win32/common/libgstpbutils.def b/win32/common/libgstpbutils.def index 6f43ee4..d92c398 100644 --- a/win32/common/libgstpbutils.def +++ b/win32/common/libgstpbutils.def @@ -85,6 +85,7 @@ EXPORTS gst_encoding_target_get_category gst_encoding_target_get_description gst_encoding_target_get_name + gst_encoding_target_get_profile gst_encoding_target_get_profiles gst_encoding_target_get_type gst_encoding_target_load -- 2.7.4