summaryrefslogtreecommitdiffstats
path: root/libhb/hb.c
diff options
context:
space:
mode:
authorJohn Stebbins <[email protected]>2016-02-20 18:00:46 -0700
committerJohn Stebbins <[email protected]>2016-03-09 13:10:10 -0700
commita44ccb49f182d4eeb122fbe675b28deb5c36b793 (patch)
tree6cc064cc24dacc2a80d41fb9543640c9004895af /libhb/hb.c
parent96c02dd6f256f4a4e74f8962f56502d28e5e65a3 (diff)
filters: make job filter settings an hb_dict_t
This simplifies accessing and changing filter parameters programatically. It also changes the custom filter string format to a ':' separated list of key/value pairs.
Diffstat (limited to 'libhb/hb.c')
-rw-r--r--libhb/hb.c77
1 files changed, 73 insertions, 4 deletions
diff --git a/libhb/hb.c b/libhb/hb.c
index 88d90e187..5937ae1ba 100644
--- a/libhb/hb.c
+++ b/libhb/hb.c
@@ -1334,13 +1334,63 @@ void hb_set_anamorphic_size2(hb_geometry_t *src_geo,
* @param job Handle to hb_job_t
* @param settings to give the filter
*/
-void hb_add_filter( hb_job_t * job, hb_filter_object_t * filter, const char * settings_in )
+void hb_add_filter2( hb_value_array_t * list, hb_dict_t * filter_dict )
{
- char * settings = NULL;
+ int new_id = hb_dict_get_int(filter_dict, "ID");
- if ( settings_in != NULL )
+ hb_filter_object_t * filter = hb_filter_get(new_id);
+ if (filter == NULL)
{
- settings = strdup( settings_in );
+ hb_error("hb_add_filter2: Invalid filter ID %d", new_id);
+ hb_value_free(&filter_dict);
+ return;
+ }
+ if (filter->enforce_order)
+ {
+ // Find the position in the filter chain this filter belongs in
+ int ii, len;
+
+ len = hb_value_array_len(list);
+ for( ii = 0; ii < len; ii++ )
+ {
+ hb_value_t * f = hb_value_array_get(list, ii);
+ int id = hb_dict_get_int(f, "ID");
+ if (id > new_id)
+ {
+ hb_value_array_insert(list, ii, filter_dict);
+ return;
+ }
+ else if ( id == new_id )
+ {
+ // Don't allow the same filter to be added twice
+ hb_value_free(&filter_dict);
+ return;
+ }
+ }
+ }
+ // No position found or order not enforced for this filter
+ hb_value_array_append(list, filter_dict);
+}
+
+/**
+ * Add a filter to a jobs filter list
+ *
+ * @param job Handle to hb_job_t
+ * @param settings to give the filter
+ */
+void hb_add_filter_dict( hb_job_t * job, hb_filter_object_t * filter,
+ const hb_dict_t * settings_in )
+{
+ hb_dict_t * settings;
+
+ // Always set filter->settings to a valid hb_dict_t
+ if (settings_in == NULL)
+ {
+ settings = hb_dict_init();
+ }
+ else
+ {
+ settings = hb_value_dup(settings_in);
}
filter->settings = settings;
if( filter->enforce_order )
@@ -1368,6 +1418,25 @@ void hb_add_filter( hb_job_t * job, hb_filter_object_t * filter, const char * se
}
/**
+ * Add a filter to a jobs filter list
+ *
+ * @param job Handle to hb_job_t
+ * @param settings to give the filter
+ */
+void hb_add_filter( hb_job_t * job, hb_filter_object_t * filter,
+ const char * settings_in )
+{
+ hb_dict_t * settings = hb_parse_filter_settings(settings_in);
+ if (settings_in != NULL && settings == NULL)
+ {
+ hb_log("hb_add_filter: failed to parse filter settings!");
+ return;
+ }
+ hb_add_filter_dict(job, filter, settings);
+ hb_value_free(&settings);
+}
+
+/**
* Returns the number of jobs in the queue.
* @param h Handle to hb_handle_t.
* @return Number of jobs.