mirror of
https://github.com/pikvm/ustreamer.git
synced 2026-03-14 19:43:42 +00:00
refactoring
This commit is contained in:
10
src/device.c
10
src/device.c
@@ -626,20 +626,20 @@ static void _device_apply_controls(struct device_t *dev) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# define CONTROL_MANUAL_CID(_cid, _field) { \
|
# 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); \
|
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); \
|
SET_CID_DEFAULT(_cid, _field, false); \
|
||||||
} \
|
} \
|
||||||
}
|
}
|
||||||
|
|
||||||
# define CONTROL_AUTO_CID(_cid_auto, _cid_manual, _field) { \
|
# 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_auto, _field##_auto, 0, true); \
|
||||||
SET_CID_VALUE(_cid_manual, _field, dev->ctl._field.value, false); \
|
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); \
|
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_VALUE(_cid_auto, _field##_auto, 0, true); /* Reset inactive flag */ \
|
||||||
SET_CID_DEFAULT(_cid_manual, _field, false); \
|
SET_CID_DEFAULT(_cid_manual, _field, false); \
|
||||||
SET_CID_DEFAULT(_cid_auto, _field##_auto, false); \
|
SET_CID_DEFAULT(_cid_auto, _field##_auto, false); \
|
||||||
|
|||||||
13
src/device.h
13
src/device.h
@@ -64,11 +64,16 @@ struct device_runtime_t {
|
|||||||
bool capturing;
|
bool capturing;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum control_mode_t {
|
||||||
|
CTL_MODE_NONE = 0,
|
||||||
|
CTL_MODE_VALUE,
|
||||||
|
CTL_MODE_AUTO,
|
||||||
|
CTL_MODE_DEFAULT,
|
||||||
|
};
|
||||||
|
|
||||||
struct control_t {
|
struct control_t {
|
||||||
int value;
|
enum control_mode_t mode;
|
||||||
bool value_set;
|
int value;
|
||||||
bool auto_set;
|
|
||||||
bool default_set;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct controls_t {
|
struct controls_t {
|
||||||
|
|||||||
@@ -271,18 +271,14 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode
|
|||||||
}
|
}
|
||||||
|
|
||||||
# define OPT_CTL_DEFAULT_NOBREAK(_dest) { \
|
# define OPT_CTL_DEFAULT_NOBREAK(_dest) { \
|
||||||
dev->ctl._dest.value_set = false; \
|
dev->ctl._dest.mode = CTL_MODE_DEFAULT; \
|
||||||
dev->ctl._dest.auto_set = false; \
|
|
||||||
dev->ctl._dest.default_set = true; \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# define OPT_CTL_MANUAL(_dest) { \
|
# define OPT_CTL_MANUAL(_dest) { \
|
||||||
if (!strcasecmp(optarg, "default")) { \
|
if (!strcasecmp(optarg, "default")) { \
|
||||||
OPT_CTL_DEFAULT_NOBREAK(_dest); \
|
OPT_CTL_DEFAULT_NOBREAK(_dest); \
|
||||||
} else { \
|
} else { \
|
||||||
dev->ctl._dest.value_set = true; \
|
dev->ctl._dest.mode = CTL_MODE_VALUE; \
|
||||||
dev->ctl._dest.auto_set = false; \
|
|
||||||
dev->ctl._dest.default_set = false; \
|
|
||||||
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
|
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
|
||||||
} \
|
} \
|
||||||
break; \
|
break; \
|
||||||
@@ -292,13 +288,9 @@ int options_parse(struct options_t *options, struct device_t *dev, struct encode
|
|||||||
if (!strcasecmp(optarg, "default")) { \
|
if (!strcasecmp(optarg, "default")) { \
|
||||||
OPT_CTL_DEFAULT_NOBREAK(_dest); \
|
OPT_CTL_DEFAULT_NOBREAK(_dest); \
|
||||||
} else if (!strcasecmp(optarg, "auto")) { \
|
} else if (!strcasecmp(optarg, "auto")) { \
|
||||||
dev->ctl._dest.value_set = false; \
|
dev->ctl._dest.mode = CTL_MODE_AUTO; \
|
||||||
dev->ctl._dest.auto_set = true; \
|
|
||||||
dev->ctl._dest.default_set = false; \
|
|
||||||
} else { \
|
} else { \
|
||||||
dev->ctl._dest.value_set = true; \
|
dev->ctl._dest.mode = CTL_MODE_VALUE; \
|
||||||
dev->ctl._dest.auto_set = false; \
|
|
||||||
dev->ctl._dest.default_set = false; \
|
|
||||||
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
|
OPT_NUMBER("--"#_dest, dev->ctl._dest.value, INT_MIN, INT_MAX, 0); \
|
||||||
} \
|
} \
|
||||||
break; \
|
break; \
|
||||||
|
|||||||
Reference in New Issue
Block a user