Skip to content

Commit 95d321a

Browse files
committed
upipe_separate_fields: add an option to force the action
It just silences a warning printed in the input urefs have the progressive attribute set.
1 parent 8e5a541 commit 95d321a

File tree

1 file changed

+23
-1
lines changed

1 file changed

+23
-1
lines changed

lib/upipe-modules/upipe_separate_fields.c

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

6769
UPIPE_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+
113126
static 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

Comments
 (0)