refactoring

This commit is contained in:
Devaev Maxim
2020-02-19 08:56:39 +03:00
parent 6eeb49ef75
commit 3504095871
3 changed files with 18 additions and 21 deletions

View File

@@ -626,20 +626,20 @@ static void _device_apply_controls(struct device_t *dev) {
}
# define CONTROL_MANUAL_CID(_cid, _field) { \
if (dev->ctl._field.value_set) { \
if (dev->ctl._field.mode == CTL_MODE_VALUE) { \
SET_CID_VALUE(_cid, _field, dev->ctl._field.value, false); \
} else if (dev->ctl._field.default_set) { \
} else if (dev->ctl._field.mode == CTL_MODE_DEFAULT) { \
SET_CID_DEFAULT(_cid, _field, false); \
} \
}
# define CONTROL_AUTO_CID(_cid_auto, _cid_manual, _field) { \
if (dev->ctl._field.value_set) { \
if (dev->ctl._field.mode == CTL_MODE_VALUE) { \
SET_CID_VALUE(_cid_auto, _field##_auto, 0, true); \
SET_CID_VALUE(_cid_manual, _field, dev->ctl._field.value, false); \
} else if (dev->ctl._field.auto_set) { \
} else if (dev->ctl._field.mode == CTL_MODE_AUTO) { \
SET_CID_VALUE(_cid_auto, _field##_auto, 1, false); \
} else if (dev->ctl._field.default_set) { \
} else if (dev->ctl._field.mode == CTL_MODE_DEFAULT) { \
SET_CID_VALUE(_cid_auto, _field##_auto, 0, true); /* Reset inactive flag */ \
SET_CID_DEFAULT(_cid_manual, _field, false); \
SET_CID_DEFAULT(_cid_auto, _field##_auto, false); \

View File

@@ -64,11 +64,16 @@ struct device_runtime_t {
bool capturing;
};
enum control_mode_t {
CTL_MODE_NONE = 0,
CTL_MODE_VALUE,
CTL_MODE_AUTO,
CTL_MODE_DEFAULT,
};
struct control_t {
int value;
bool value_set;
bool auto_set;
bool default_set;
enum control_mode_t mode;
int value;
};
struct controls_t {

View File

@@ -271,18 +271,14 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode
}
# define OPT_CTL_DEFAULT_NOBREAK(_dest) { \
dev->ctl._dest.value_set = false; \
dev->ctl._dest.auto_set = false; \
dev->ctl._dest.default_set = true; \
dev->ctl._dest.mode = CTL_MODE_DEFAULT; \
}
# define OPT_CTL_MANUAL(_dest) { \
if (!strcasecmp(optarg, "default")) { \
OPT_CTL_DEFAULT_NOBREAK(_dest); \
} else { \
dev->ctl._dest.value_set = true; \
dev->ctl._dest.auto_set = false; \
dev->ctl._dest.default_set = false; \
dev->ctl._dest.mode = CTL_MODE_VALUE; \
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
} \
break; \
@@ -292,13 +288,9 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode
if (!strcasecmp(optarg, "default")) { \
OPT_CTL_DEFAULT_NOBREAK(_dest); \
} else if (!strcasecmp(optarg, "auto")) { \
dev->ctl._dest.value_set = false; \
dev->ctl._dest.auto_set = true; \
dev->ctl._dest.default_set = false; \
dev->ctl._dest.mode = CTL_MODE_AUTO; \
} else { \
dev->ctl._dest.value_set = true; \
dev->ctl._dest.auto_set = false; \
dev->ctl._dest.default_set = false; \
dev->ctl._dest.mode = CTL_MODE_VALUE; \
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
} \
break; \