@@ -62,6 +62,8 @@ struct upipe_separate_fields {
6262
6363 /** frame duration in ticks */
6464 uint64_t field_duration ;
65+ /** whether to warn about progressive input */
66+ bool force ;
6567};
6668
6769UPIPE_HELPER_UPIPE (upipe_separate_fields , upipe , UPIPE_SEPARATE_FIELDS_SIGNATURE )
@@ -110,6 +112,17 @@ static int upipe_separate_fields_set_flow_def(struct upipe *upipe,
110112 return UBASE_ERR_NONE ;
111113}
112114
115+ static int upipe_separate_fields_set_option (struct upipe * upipe ,
116+ const char * key , const char * value )
117+ {
118+ struct upipe_separate_fields * ctx = upipe_separate_fields_from_upipe (upipe );
119+ if (!strcmp (key , "force" )) {
120+ ctx -> force = !!atoi (value );
121+ return UBASE_ERR_NONE ;
122+ }
123+ return UBASE_ERR_INVALID ;
124+ }
125+
113126static int upipe_separate_fields_control (struct upipe * upipe , int command ,
114127 va_list args )
115128{
@@ -124,6 +137,11 @@ static int upipe_separate_fields_control(struct upipe *upipe, int command,
124137 case UPIPE_GET_OUTPUT :
125138 case UPIPE_SET_OUTPUT :
126139 return upipe_separate_fields_control_output (upipe , command , args );
140+ case UPIPE_SET_OPTION : {
141+ const char * key = va_arg (args , const char * );
142+ const char * value = va_arg (args , const char * );
143+ return upipe_separate_fields_set_option (upipe , key , value );
144+ }
127145 default :
128146 return UBASE_ERR_UNHANDLED ;
129147 }
@@ -149,6 +167,10 @@ static struct upipe *upipe_separate_fields_alloc(struct upipe_mgr *mgr,
149167
150168 upipe_separate_fields_init_urefcount (upipe );
151169 upipe_separate_fields_init_output (upipe );
170+
171+ struct upipe_separate_fields * ctx = upipe_separate_fields_from_upipe (upipe );
172+ ctx -> force = false;
173+
152174 upipe_throw_ready (upipe );
153175
154176 return upipe ;
@@ -172,7 +194,7 @@ static void upipe_separate_fields_input(struct upipe *upipe, struct uref *uref,
172194 bool has_progressive_attr = ubase_check (uref_pic_get_progressive (uref ));
173195 bool has_tff_attr = ubase_check (uref_pic_get_tff (uref ));
174196
175- if (has_progressive_attr )
197+ if (has_progressive_attr && ! ctx -> force )
176198 upipe_warn (upipe , "picture marked as progressive, separating fields anyway" );
177199
178200 uref_clock_set_duration (uref , ctx -> field_duration );
0 commit comments