encoding-target: Add method to get a profile by name
authorEdward Hervey <edward.hervey@collabora.co.uk>
Wed, 22 Dec 2010 10:41:41 +0000 (11:41 +0100)
committerEdward Hervey <bilboed@bilboed.com>
Wed, 5 Jan 2011 19:18:34 +0000 (20:18 +0100)
API: gst_encoding_target_get_profile

docs/libs/gst-plugins-base-libs-sections.txt
gst-libs/gst/pbutils/encoding-profile.c
gst-libs/gst/pbutils/encoding-target.c
gst-libs/gst/pbutils/encoding-target.h
tests/check/libs/profile.c
win32/common/libgstpbutils.def

index da6134b..00e8bd7 100644 (file)
@@ -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
index f981f7e..174bfe6 100644 (file)
  *{
  *  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;
  *}
index a5a7b3d..601cdb2 100644 (file)
@@ -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)
 {
index c23f526..0f9d340 100644 (file)
@@ -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);
index 0018b0b..c9df843 100644 (file)
@@ -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);
index 6f43ee4..d92c398 100644 (file)
@@ -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