Skip to content

Commit c8d4318

Browse files
authored
Merge pull request #55 from ryanppeters/master
ROI mask is always invalid; Support for auto exposure range in zedsrc
2 parents 2ab7758 + 6370d6e commit c8d4318

File tree

3 files changed

+47
-8
lines changed

3 files changed

+47
-8
lines changed

README.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,13 @@ Most of the properties follow the same name as the C++ API. Except that `_` is r
252252
Integer. Range: 0 - 8 Default: 4
253253
ctrl-exposure : Camera exposure
254254
flags: readable, writable
255-
Integer. Range: 0 - 100 Default: 80
255+
Integer. Range: 0 - 100 Default: 80
256+
ctrl-exposure-range-max: Maximum exposure time in microseconds for the automatic exposure setting
257+
flags: readable, writable
258+
Integer. Range: 28 - 66000 Default: 66000
259+
ctrl-exposure-range-min: Minimum exposure time in microseconds for the automatic exposure setting
260+
flags: readable, writable
261+
Integer. Range: 28 - 66000 Default: 28
256262
ctrl-gain : Camera gain
257263
flags: readable, writable
258264
Integer. Range: 0 - 100 Default: 60

gst-zed-src/gstzedsrc.cpp

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,8 @@ enum {
134134
PROP_GAMMA,
135135
PROP_GAIN,
136136
PROP_EXPOSURE,
137+
PROP_EXPOSURE_RANGE_MIN,
138+
PROP_EXPOSURE_RANGE_MAX,
137139
PROP_AEC_AGC,
138140
PROP_AEC_AGC_ROI_X,
139141
PROP_AEC_AGC_ROI_Y,
@@ -322,6 +324,8 @@ typedef enum {
322324
#define DEFAULT_PROP_GAMMA 8
323325
#define DEFAULT_PROP_GAIN 60
324326
#define DEFAULT_PROP_EXPOSURE 80
327+
#define DEFAULT_PROP_EXPOSURE_RANGE_MIN 28
328+
#define DEFAULT_PROP_EXPOSURE_RANGE_MAX 66000
325329
#define DEFAULT_PROP_AEG_AGC 1
326330
#define DEFAULT_PROP_AEG_AGC_ROI_X -1
327331
#define DEFAULT_PROP_AEG_AGC_ROI_Y -1
@@ -1343,6 +1347,18 @@ static void gst_zedsrc_class_init(GstZedSrcClass *klass) {
13431347
g_param_spec_int("ctrl-exposure", "Camera control: exposure", "Camera exposure", 0, 100,
13441348
DEFAULT_PROP_EXPOSURE,
13451349
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
1350+
g_object_class_install_property(
1351+
gobject_class, PROP_EXPOSURE_RANGE_MIN,
1352+
g_param_spec_int("ctrl-exposure-range-min", "Minimum Exposure time [µsec]",
1353+
"Minimum exposure time in microseconds for the automatic exposure setting",
1354+
28, 66000, DEFAULT_PROP_EXPOSURE_RANGE_MIN,
1355+
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
1356+
g_object_class_install_property(
1357+
gobject_class, PROP_EXPOSURE_RANGE_MAX,
1358+
g_param_spec_int("ctrl-exposure-range-max", "Maximum Exposure time [µsec]",
1359+
"Maximum exposure time in microseconds for the automatic exposure setting",
1360+
28, 66000, DEFAULT_PROP_EXPOSURE_RANGE_MAX,
1361+
(GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)));
13461362
g_object_class_install_property(
13471363
gobject_class, PROP_AEC_AGC,
13481364
g_param_spec_boolean("ctrl-aec-agc", "Camera control: automatic gain and exposure",
@@ -1507,6 +1523,8 @@ static void gst_zedsrc_init(GstZedSrc *src) {
15071523
src->gamma = DEFAULT_PROP_GAMMA;
15081524
src->gain = DEFAULT_PROP_GAIN;
15091525
src->exposure = DEFAULT_PROP_EXPOSURE;
1526+
src->exposureRange_min = DEFAULT_PROP_EXPOSURE_RANGE_MIN;
1527+
src->exposureRange_max = DEFAULT_PROP_EXPOSURE_RANGE_MAX;
15101528
src->aec_agc = DEFAULT_PROP_AEG_AGC;
15111529
src->aec_agc_roi_x = DEFAULT_PROP_AEG_AGC_ROI_X;
15121530
src->aec_agc_roi_y = DEFAULT_PROP_AEG_AGC_ROI_Y;
@@ -1780,6 +1798,12 @@ void gst_zedsrc_set_property(GObject *object, guint property_id, const GValue *v
17801798
src->exposure = g_value_get_int(value);
17811799
src->exposure_gain_updated = TRUE;
17821800
break;
1801+
case PROP_EXPOSURE_RANGE_MIN:
1802+
src->exposureRange_min = g_value_get_int(value);
1803+
break;
1804+
case PROP_EXPOSURE_RANGE_MAX:
1805+
src->exposureRange_max = g_value_get_int(value);
1806+
break;
17831807
case PROP_AEC_AGC:
17841808
src->aec_agc = g_value_get_boolean(value);
17851809
src->exposure_gain_updated = TRUE;
@@ -2068,6 +2092,12 @@ void gst_zedsrc_get_property(GObject *object, guint property_id, GValue *value,
20682092
case PROP_EXPOSURE:
20692093
g_value_set_int(value, src->exposure);
20702094
break;
2095+
case PROP_EXPOSURE_RANGE_MIN:
2096+
g_value_set_int(value, src->exposureRange_min);
2097+
break;
2098+
case PROP_EXPOSURE_RANGE_MAX:
2099+
g_value_set_int(value, src->exposureRange_max);
2100+
break;
20712101
case PROP_AEC_AGC:
20722102
g_value_set_boolean(value, src->aec_agc);
20732103
break;
@@ -2275,7 +2305,7 @@ static gboolean gst_zedsrc_start(GstBaseSrc *bsrc) {
22752305
init_params.camera_disable_self_calib = src->camera_disable_self_calib == TRUE;
22762306
GST_INFO(" * Disable self calibration: %s",
22772307
(init_params.camera_disable_self_calib ? "TRUE" : "FALSE"));
2278-
2308+
22792309
sl::String opencv_calibration_file(src->opencv_calibration_file.str);
22802310
init_params.optional_opencv_calibration_file = opencv_calibration_file;
22812311
GST_INFO(" * Calibration File: %s ", init_params.optional_opencv_calibration_file.c_str());
@@ -2357,6 +2387,9 @@ static gboolean gst_zedsrc_start(GstBaseSrc *bsrc) {
23572387

23582388
src->zed.setCameraSettings(sl::VIDEO_SETTINGS::AEC_AGC_ROI, roi, side);
23592389
}
2390+
2391+
src->zed.setCameraSettings(sl::VIDEO_SETTINGS::AUTO_EXPOSURE_TIME_RANGE, src->exposureRange_min, src->exposureRange_max);
2392+
GST_INFO(" * AUTO EXPOSURE TIME RANGE: [%d,%d]", src->exposureRange_min, src->exposureRange_max);
23602393
}
23612394
if (src->whitebalance_temperature_auto == FALSE) {
23622395
src->zed.setCameraSettings(sl::VIDEO_SETTINGS::WHITEBALANCE_AUTO,
@@ -2405,13 +2438,11 @@ static gboolean gst_zedsrc_start(GstBaseSrc *bsrc) {
24052438
src->roi_y >= 0 && src->roi_y < resolution.height &&
24062439
roi_x_end <= resolution.width && roi_y_end <= resolution.height) {
24072440

2408-
sl::uchar1 uint0 = 0;
2409-
sl::uchar1 uint1 = 1;
24102441
sl::Mat roi_mask(resolution, sl::MAT_TYPE::U8_C1, sl::MEM::CPU);
2411-
roi_mask.setTo(uint0);
2412-
for (int row = src->roi_y; row < roi_y_end; row++)
2413-
for (int col = src->roi_y; col < roi_x_end; col++)
2414-
roi_mask.setValue(col, row, uint1);
2442+
roi_mask.setTo<sl::uchar1>(0, sl::MEM::CPU);
2443+
for (unsigned int v = src->roi_y; v < roi_y_end; v++)
2444+
for (unsigned int u = src->roi_x; u < roi_x_end; u++)
2445+
roi_mask.setValue<sl::uchar1>(u, v, 255, sl::MEM::CPU);
24152446

24162447
GST_INFO(" * ROI mask: (%d,%d)-%dx%d",
24172448
src->roi_x, src->roi_y, src->roi_w, src->roi_h);

gst-zed-src/gstzedsrc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ struct _GstZedSrc {
139139
gint gamma;
140140
gint gain;
141141
gint exposure;
142+
gint exposureRange_min;
143+
gint exposureRange_max;
142144
gboolean aec_agc;
143145
gint aec_agc_roi_x;
144146
gint aec_agc_roi_y;

0 commit comments

Comments
 (0)