Skip to content

Commit 1cff758

Browse files
committed
2 parents ff53270 + 4be0d29 commit 1cff758

File tree

8 files changed

+67
-33
lines changed

8 files changed

+67
-33
lines changed

linux/platformstream.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -678,12 +678,13 @@ bool PlatformStream::setAutoProperty(uint32_t propID, bool enabled)
678678
return true;
679679
}
680680

681-
bool PlatformStream::getPropertyLimits(uint32_t propID, int32_t *emin, int32_t *emax)
681+
bool PlatformStream::getPropertyLimits(uint32_t propID, int32_t *emin, int32_t *emax,
682+
int32_t *dValue)
682683
{
683684
v4l2_queryctrl ctrl;
684685
CLEAR(ctrl);
685686

686-
if ((emin == nullptr) || (emax == nullptr))
687+
if ((emin == nullptr) || (emax == nullptr) || (dValue == nullptr))
687688
{
688689
return false;
689690
}
@@ -725,6 +726,7 @@ bool PlatformStream::getPropertyLimits(uint32_t propID, int32_t *emin, int32_t *
725726
}
726727
*emin = ctrl.minimum;
727728
*emax = ctrl.maximum;
729+
*dValue= ctrl.default_value;
728730
return true;
729731
}
730732

linux/platformstream.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ class PlatformStream : public Stream
109109

110110
virtual bool setProperty(uint32_t propID, int32_t value) override;
111111
virtual bool setAutoProperty(uint32_t propID, bool enabled) override;
112-
virtual bool getPropertyLimits(uint32_t propID, int32_t *min, int32_t *max) override;
112+
virtual bool getPropertyLimits(uint32_t propID,
113+
int32_t *min, int32_t *max, int32_t *dValue) override;
113114

114115
virtual bool getProperty(uint32_t propID, int32_t &value) override;
115116
virtual bool getAutoProperty(uint32_t propID, bool &enabled) override;

linux/tests/gtkmain.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -432,12 +432,14 @@ int main (int argc, char *argv[])
432432

433433
// set exposure in the middle of the range
434434
int32_t exposure = 0;
435-
int32_t exmax, exmin;
436-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE, &exmin, &exmax) == CAPRESULT_OK)
435+
int32_t exmax, exmin, edefault;
436+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE,
437+
&exmin, &exmax, &edefault) == CAPRESULT_OK)
437438
{
438439
exposure = (exmax + exmin) / 2;
439440
Cap_setProperty(ctx, streamID, CAPPROPID_EXPOSURE, exposure);
440441
printf("Set exposure to %d\n", exposure);
442+
printf("Default exposure = %d\n",edefault);
441443
}
442444
else
443445
{
@@ -446,12 +448,14 @@ int main (int argc, char *argv[])
446448

447449
// set focus in the middle of the range
448450
int32_t focus = 0;
449-
int32_t fomax, fomin;
450-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_FOCUS, &fomin, &fomax) == CAPRESULT_OK)
451+
int32_t fomax, fomin, fodefault;
452+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_FOCUS,
453+
&fomin, &fomax, &fodefault) == CAPRESULT_OK)
451454
{
452455
focus = (fomax + fomin) / 2;
453456
Cap_setProperty(ctx, streamID, CAPPROPID_FOCUS, focus);
454457
printf("Set focus to %d\n", focus);
458+
printf("Default focus = %d\n",fodefault);
455459
}
456460
else
457461
{
@@ -460,12 +464,14 @@ int main (int argc, char *argv[])
460464

461465
// set zoom in the middle of the range
462466
int32_t zoom = 0;
463-
int32_t zomax, zomin;
464-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_ZOOM, &zomin, &zomax) == CAPRESULT_OK)
467+
int32_t zomax, zomin, zodefault;
468+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_ZOOM,
469+
&zomin, &zomax, &zodefault) == CAPRESULT_OK)
465470
{
466471
zoom = zomin;
467472
Cap_setProperty(ctx, streamID, CAPPROPID_ZOOM, zoom);
468473
printf("Set zoom to %d\n", zoom);
474+
printf("Default focus = %d\n",zodefault);
469475
}
470476
else
471477
{
@@ -474,14 +480,16 @@ int main (int argc, char *argv[])
474480

475481
// set white balance in the middle of the range
476482
int32_t wbalance = 0;
477-
int32_t wbmax, wbmin;
483+
int32_t wbmax, wbmin, wbdefault;
478484
int32_t wbstep = 0;
479-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_WHITEBALANCE, &wbmin, &wbmax) == CAPRESULT_OK)
485+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_WHITEBALANCE,
486+
&wbmin, &wbmax, &wbdefault) == CAPRESULT_OK)
480487
{
481488
wbalance = (wbmax+wbmin)/2;
482489
wbstep = (wbmax-wbmin) / 20;
483490
Cap_setProperty(ctx, streamID, CAPPROPID_WHITEBALANCE, wbalance);
484491
printf("Set white balance to %d\n", wbalance);
492+
printf("Default white balance = %d\n",wbdefault);
485493
}
486494
else
487495
{
@@ -490,13 +498,15 @@ int main (int argc, char *argv[])
490498

491499
// set gain in the middle of the range
492500
int32_t gain = 0;
493-
int32_t gmax, gmin;
501+
int32_t gmax, gmin, gdefault;
494502
int32_t gstep = 0;
495-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_GAIN, &gmin, &gmax) == CAPRESULT_OK)
503+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_GAIN,
504+
&gmin, &gmax, &gdefault) == CAPRESULT_OK)
496505
{
497506
gstep = (gmax-gmin) / 20;
498507
Cap_setProperty(ctx, streamID, CAPPROPID_GAIN, gain);
499508
printf("Set gain to %d (min=%d max=%d)\n", gain, gmin, gmax);
509+
printf("Default gain = %d\n",gdefault);
500510
}
501511
else
502512
{

linux/tests/main.cpp

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -132,12 +132,14 @@ int main(int argc, char*argv[])
132132

133133
// set exposure in the middle of the range
134134
int32_t exposure = 0;
135-
int32_t exmax, exmin;
136-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE, &exmin, &exmax) == CAPRESULT_OK)
135+
int32_t exmax, exmin, edefault;
136+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE,
137+
&exmin, &exmax, &edefault) == CAPRESULT_OK)
137138
{
138139
exposure = (exmax + exmin) / 2;
139140
Cap_setProperty(ctx, streamID, CAPPROPID_EXPOSURE, exposure);
140141
printf("Set exposure to %d\n", exposure);
142+
printf("Default exposure = %d\n",edefault);
141143
}
142144
else
143145
{
@@ -146,12 +148,14 @@ int main(int argc, char*argv[])
146148

147149
// set focus in the middle of the range
148150
int32_t focus = 0;
149-
int32_t fomax, fomin;
150-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_FOCUS, &fomin, &fomax) == CAPRESULT_OK)
151+
int32_t fomax, fomin, fodefault;
152+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_FOCUS,
153+
&fomin, &fomax, &fodefault) == CAPRESULT_OK)
151154
{
152155
focus = (fomax + fomin) / 2;
153156
Cap_setProperty(ctx, streamID, CAPPROPID_FOCUS, focus);
154157
printf("Set focus to %d\n", focus);
158+
printf("Default focus = %d\n",fodefault);
155159
}
156160
else
157161
{
@@ -160,12 +164,14 @@ int main(int argc, char*argv[])
160164

161165
// set zoom in the middle of the range
162166
int32_t zoom = 0;
163-
int32_t zomax, zomin;
164-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_ZOOM, &zomin, &zomax) == CAPRESULT_OK)
167+
int32_t zomax, zomin, zodefault;
168+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_ZOOM,
169+
&zomin, &zomax, &zodefault) == CAPRESULT_OK)
165170
{
166171
zoom = zomin;
167172
Cap_setProperty(ctx, streamID, CAPPROPID_ZOOM, zoom);
168173
printf("Set zoom to %d\n", zoom);
174+
printf("Default focus = %d\n",zodefault);
169175
}
170176
else
171177
{
@@ -174,14 +180,16 @@ int main(int argc, char*argv[])
174180

175181
// set white balance in the middle of the range
176182
int32_t wbalance = 0;
177-
int32_t wbmax, wbmin;
183+
int32_t wbmax, wbmin, wbdefault;
178184
int32_t wbstep = 0;
179-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_WHITEBALANCE, &wbmin, &wbmax) == CAPRESULT_OK)
185+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_WHITEBALANCE,
186+
&wbmin, &wbmax, &wbdefault) == CAPRESULT_OK)
180187
{
181188
wbalance = (wbmax+wbmin)/2;
182189
wbstep = (wbmax-wbmin) / 20;
183190
Cap_setProperty(ctx, streamID, CAPPROPID_WHITEBALANCE, wbalance);
184191
printf("Set white balance to %d\n", wbalance);
192+
printf("Default white balance = %d\n",wbdefault);
185193
}
186194
else
187195
{
@@ -190,13 +198,15 @@ int main(int argc, char*argv[])
190198

191199
// set gain in the middle of the range
192200
int32_t gain = 0;
193-
int32_t gmax, gmin;
201+
int32_t gmax, gmin, gdefault;
194202
int32_t gstep = 0;
195-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_GAIN, &gmin, &gmax) == CAPRESULT_OK)
203+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_GAIN,
204+
&gmin, &gmax, &gdefault) == CAPRESULT_OK)
196205
{
197206
gstep = (gmax-gmin) / 20;
198207
Cap_setProperty(ctx, streamID, CAPPROPID_GAIN, gain);
199208
printf("Set gain to %d (min=%d max=%d)\n", gain, gmin, gmax);
209+
printf("Default gain = %d\n",gdefault);
200210
}
201211
else
202212
{

mac/platformstream.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ class PlatformStream : public Stream
6464
virtual uint32_t getFOURCC() override;
6565

6666
/** get the limits of a camera/stream property (exposure, zoom etc) */
67-
virtual bool getPropertyLimits(uint32_t propID, int32_t *min, int32_t *max) override;
67+
virtual bool getPropertyLimits(uint32_t propID, int32_t *min, int32_t *max,
68+
int32_t *dvalue) override;
6869

6970
/** set property (exposure, zoom etc) of camera/stream */
7071
virtual bool setProperty(uint32_t propID, int32_t value) override;

mac/platformstream.mm

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,12 +272,12 @@ - (void)captureOutput:(AVCaptureOutput *)captureOutput
272272
}
273273

274274
/** get the limits of a camera/stream property (exposure, zoom etc) */
275-
bool PlatformStream::getPropertyLimits(uint32_t propID, int32_t *min, int32_t *max)
275+
bool PlatformStream::getPropertyLimits(uint32_t propID, int32_t *min, int32_t *max, int32_t *dValue)
276276
{
277-
if (m_uvc != nullptr)
277+
if ((m_uvc != nullptr) && (min != nullptr) && (max != nullptr) && (dValue != nullptr))
278278
{
279-
LOG(LOG_INFO,"PlatformStream::getProprtyLimits\n");
280-
return m_uvc->getPropertyLimits(propID, min, max);
279+
LOG(LOG_INFO,"PlatformStream::getPropertyLimits\n");
280+
return m_uvc->getPropertyLimits(propID, min, max, dValue);
281281
}
282282
return false;
283283
}

mac/tests/main.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -174,17 +174,17 @@ int main(int argc, char*argv[])
174174
return 1;
175175
}
176176

177-
int32_t emin,emax;
178-
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE, &emin, &emax))
177+
int32_t emin,emax,edefault;
178+
if (Cap_getPropertyLimits(ctx, streamID, CAPPROPID_EXPOSURE, &emin, &emax, &edefault) == CAPRESULT_OK)
179179
{
180-
printf("Exposure limits: %d .. %d\n", emin, emax);
180+
printf("Exposure limits: %d .. %d (default=%d)\n", emin, emax, edefault);
181181
}
182182
else
183183
{
184184
printf("Failed to get exposure limits!\n");
185185
}
186186

187-
if (Cap_getProperty(ctx, streamID, CAPPROPID_EXPOSURE, &emin))
187+
if (Cap_getProperty(ctx, streamID, CAPPROPID_EXPOSURE, &emin) == CAPRESULT_OK)
188188
{
189189
printf("Exposure: %d\n", emin);
190190
}
@@ -194,7 +194,7 @@ int main(int argc, char*argv[])
194194
}
195195

196196
uint32_t vvv;
197-
if (Cap_getAutoProperty(ctx, streamID, CAPPROPID_EXPOSURE, &vvv))
197+
if (Cap_getAutoProperty(ctx, streamID, CAPPROPID_EXPOSURE, &vvv) == CAPRESULT_OK)
198198
{
199199
printf("Auto exposure: %d\n", vvv);
200200
}

mac/uvcctrl.mm

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,20 +645,23 @@
645645
if (!getMinData(propertyInfo[propID].selector, unit,
646646
propertyInfo[propID].length, emin))
647647
{
648+
LOG(LOG_VERBOSE, "getMinData failed\n");
648649
ok = false;
649650
}
650651

651652
// get the max data
652653
if (!getMaxData(propertyInfo[propID].selector, unit,
653654
propertyInfo[propID].length, emax))
654655
{
656+
LOG(LOG_VERBOSE, "getMaxData failed\n");
655657
ok = false;
656658
}
657659

658660
// read the default value
659661
if (!getDefault(propertyInfo[propID].selector, unit,
660662
propertyInfo[propID].length, dValue))
661663
{
664+
LOG(LOG_VERBOSE, "getDefault failed\n");
662665
ok = false;
663666
}
664667

@@ -667,15 +670,22 @@
667670
case 2:
668671
*emin &= 0xFFFF;
669672
*emax &= 0xFFFF;
673+
*dValue &= 0xFFFF;
670674
break;
671675
case 1:
672676
*emin &= 0xFF;
673677
*emax &= 0xFF;
678+
*dValue &= 0xFF;
674679
break;
675680
default:
676681
break;
677682
}
678683
}
684+
else
685+
{
686+
LOG(LOG_ERR, "UVCCtrl::getPropertyLimits property ID out of bounds.\n");
687+
ok = false;
688+
}
679689
return ok;
680690
}
681691

0 commit comments

Comments
 (0)