@@ -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