Skip to content

Commit 6561173

Browse files
quariumcmassiot
authored andcommitted
upipe_ffmt: check if provided flow format changed
Keep last provided flow format to prevent reconfiguration if the same flow format is provided again.
1 parent 0bbeaf5 commit 6561173

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

lib/upipe-filters/upipe_filter_format.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ struct upipe_ffmt {
105105
struct uref *flow_def_wanted;
106106
/** flow definition requested */
107107
struct uref *flow_def_requested;
108+
/** flow definition provided */
109+
struct uref *flow_def_provided;
108110
/** list of input bin requests */
109111
struct uchain input_request_list;
110112
/** list of output bin requests */
@@ -217,6 +219,7 @@ static struct upipe *upipe_ffmt_alloc(struct upipe_mgr *mgr,
217219
upipe_ffmt->flow_def_input = NULL;
218220
upipe_ffmt->flow_def_wanted = flow_def;
219221
upipe_ffmt->flow_def_requested = NULL;
222+
upipe_ffmt->flow_def_provided = NULL;
220223
upipe_ffmt->sws_flags = 0;
221224
upipe_ffmt->deinterlace_vaapi_mode = NULL;
222225
upipe_ffmt->scale_vaapi_mode = NULL;
@@ -273,6 +276,8 @@ static bool upipe_ffmt_handle(struct upipe *upipe, struct uref *uref,
273276

274277
upipe_ffmt_store_bin_input(upipe, NULL);
275278
upipe_ffmt_store_bin_output(upipe, NULL);
279+
uref_free(upipe_ffmt->flow_def_provided);
280+
upipe_ffmt->flow_def_provided = NULL;
276281
upipe_ffmt_require_flow_format(upipe, uref);
277282
return true;
278283
}
@@ -327,6 +332,13 @@ static int upipe_ffmt_check_flow_format(struct upipe *upipe,
327332
if (flow_def_dup == NULL)
328333
return UBASE_ERR_INVALID;
329334

335+
if (upipe_ffmt->flow_def_provided &&
336+
!udict_cmp(upipe_ffmt->flow_def_provided->udict, flow_def_dup->udict))
337+
return UBASE_ERR_NONE;
338+
339+
uref_free(upipe_ffmt->flow_def_provided);
340+
upipe_ffmt->flow_def_provided = uref_dup(flow_def_dup);
341+
330342
struct uref *flow_def = uref_dup(upipe_ffmt->flow_def_input);
331343
UBASE_ALLOC_RETURN(flow_def)
332344
const char *def;
@@ -1026,6 +1038,7 @@ static void upipe_ffmt_free(struct urefcount *urefcount_real)
10261038
uref_free(upipe_ffmt->flow_def_input);
10271039
uref_free(upipe_ffmt->flow_def_wanted);
10281040
uref_free(upipe_ffmt->flow_def_requested);
1041+
uref_free(upipe_ffmt->flow_def_provided);
10291042
uprobe_clean(&upipe_ffmt->proxy_probe);
10301043
upipe_ffmt_clean_last_inner_probe(upipe);
10311044
urefcount_clean(urefcount_real);

0 commit comments

Comments
 (0)