aboutsummaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorTimothy Knight <tknight@google.com>2014-10-15 13:42:22 -0700
committerTimothy Knight <tknight@google.com>2014-10-15 17:50:16 -0700
commit13bfb5b232321b3b7a69bab2e99c323c68675da3 (patch)
treed9d19d9d30aa3fd2e5d04aae72f9b09277611080 /apps
parent17ddf87a3d3669089b62098eda4965b6f16e70c8 (diff)
downloadpdk-13bfb5b232321b3b7a69bab2e99c323c68675da3.tar.gz
CameraITS: Removed requirement that do_3a always returns 3A results.lollipop-dev
Bug: 17994909 Change-Id: Ib5e5eeffca87464a5eccbadef6eafe0b659f5993
Diffstat (limited to 'apps')
-rw-r--r--apps/CameraITS/pymodules/its/device.py14
-rw-r--r--apps/CameraITS/pymodules/its/target.py3
-rw-r--r--apps/CameraITS/service/src/com/android/camera2/its/ItsService.java1
-rw-r--r--apps/CameraITS/tests/inprog/test_blc_lsc.py4
-rw-r--r--apps/CameraITS/tests/inprog/test_param_edge_mode.py2
-rw-r--r--apps/CameraITS/tests/scene1/test_3a.py2
-rw-r--r--apps/CameraITS/tests/scene1/test_auto_vs_manual.py4
-rw-r--r--apps/CameraITS/tests/scene1/test_capture_result.py2
-rw-r--r--apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py2
-rw-r--r--apps/CameraITS/tests/scene1/test_raw_sensitivity.py2
-rw-r--r--apps/CameraITS/tests/scene1/test_tonemap_sequence.py2
-rw-r--r--apps/CameraITS/tests/tutorial.py2
-rw-r--r--apps/CameraITS/tools/compute_dng_noise_model.py2
13 files changed, 26 insertions, 16 deletions
diff --git a/apps/CameraITS/pymodules/its/device.py b/apps/CameraITS/pymodules/its/device.py
index 271e899..96c8618 100644
--- a/apps/CameraITS/pymodules/its/device.py
+++ b/apps/CameraITS/pymodules/its/device.py
@@ -256,7 +256,8 @@ class ItsSession(object):
regions_awb=[[0,0,1,1,1]],
regions_af=[[0,0,1,1,1]],
do_ae=True, do_awb=True, do_af=True,
- lock_ae=False, lock_awb=False):
+ lock_ae=False, lock_awb=False,
+ get_results=False):
"""Perform a 3A operation on the device.
Triggers some or all of AE, AWB, and AF, and returns once they have
@@ -273,6 +274,7 @@ class ItsSession(object):
do_af: Trigger AF and wait for it to converge.
lock_ae: Request AE lock after convergence, and wait for it.
lock_awb: Request AWB lock after convergence, and wait for it.
+ get_results: Return the 3A results from this function.
Region format in args:
Arguments are lists of weighted regions; each weighted region is a
@@ -283,12 +285,13 @@ class ItsSession(object):
Weights are non-negative integers.
Returns:
- Five values:
+ Five values are returned if get_results is true::
* AE sensitivity; None if do_ae is False
* AE exposure time; None if do_ae is False
* AWB gains (list); None if do_awb is False
* AWB transform (list); None if do_awb is false
* AF focus position; None if do_af is false
+ Otherwise, it returns five None values.
"""
print "Running vendor 3A on device"
cmd = {}
@@ -309,6 +312,7 @@ class ItsSession(object):
awb_gains = None
awb_transform = None
af_dist = None
+ converged = False
while True:
data,_ = self.__read_response_from_socket()
vals = data['strValue'].split()
@@ -319,12 +323,16 @@ class ItsSession(object):
elif data['tag'] == 'awbResult':
awb_gains = [float(f) for f in vals[:4]]
awb_transform = [float(f) for f in vals[4:]]
+ elif data['tag'] == '3aConverged':
+ converged = True
elif data['tag'] == '3aDone':
break
else:
raise its.error.Error('Invalid command response')
+ if converged and not get_results:
+ return None,None,None,None,None
if (do_ae and ae_sens == None or do_awb and awb_gains == None
- or do_af and af_dist == None):
+ or do_af and af_dist == None or not converged):
raise its.error.Error('3A failed to converge')
return ae_sens, ae_exp, awb_gains, awb_transform, af_dist
diff --git a/apps/CameraITS/pymodules/its/target.py b/apps/CameraITS/pymodules/its/target.py
index 3d298e8..3715f34 100644
--- a/apps/CameraITS/pymodules/its/target.py
+++ b/apps/CameraITS/pymodules/its/target.py
@@ -56,7 +56,8 @@ def __do_target_exposure_measurement(its_session):
# Get AE+AWB lock first, so the auto values in the capture result are
# populated properly.
r = [[0.45, 0.45, 0.1, 0.1, 1]]
- sens, exp_time, gains, xform, _ = its_session.do_3a(r,r,r,True,True,False)
+ sens, exp_time, gains, xform, _ \
+ = its_session.do_3a(r,r,r,do_af=False,get_results=True)
# Convert the transform to rational.
xform_rat = [{"numerator":int(100*x),"denominator":100} for x in xform]
diff --git a/apps/CameraITS/service/src/com/android/camera2/its/ItsService.java b/apps/CameraITS/service/src/com/android/camera2/its/ItsService.java
index 4039311..1c497ea 100644
--- a/apps/CameraITS/service/src/com/android/camera2/its/ItsService.java
+++ b/apps/CameraITS/service/src/com/android/camera2/its/ItsService.java
@@ -904,6 +904,7 @@ public class ItsService extends Service implements SensorEventListener {
mIssuedRequest3A = true;
mSession.capture(req.build(), mCaptureResultListener, mResultHandler);
} else {
+ mSocketRunnableObj.sendResponse("3aConverged", "");
Logt.i(TAG, "3A converged");
break;
}
diff --git a/apps/CameraITS/tests/inprog/test_blc_lsc.py b/apps/CameraITS/tests/inprog/test_blc_lsc.py
index 091c4e4..ce120a2 100644
--- a/apps/CameraITS/tests/inprog/test_blc_lsc.py
+++ b/apps/CameraITS/tests/inprog/test_blc_lsc.py
@@ -39,8 +39,8 @@ def main():
# Get AE+AWB lock first, so the auto values in the capture result are
# populated properly.
r = [[0,0,1,1,1]]
- ae_sen,ae_exp,awb_gains,awb_transform,_ = \
- cam.do_3a(r,r,r,True,True,False)
+ ae_sen,ae_exp,awb_gains,awb_transform,_ \
+ = cam.do_3a(r,r,r,do_af=False,get_results=True)
print "AE:", ae_sen, ae_exp / 1000000.0
print "AWB:", awb_gains, awb_transform
diff --git a/apps/CameraITS/tests/inprog/test_param_edge_mode.py b/apps/CameraITS/tests/inprog/test_param_edge_mode.py
index 80d78c7..e928f21 100644
--- a/apps/CameraITS/tests/inprog/test_param_edge_mode.py
+++ b/apps/CameraITS/tests/inprog/test_param_edge_mode.py
@@ -36,7 +36,7 @@ def main():
}
with its.device.ItsSession() as cam:
- sens, exp, gains, xform, focus = cam.do_3a()
+ sens, exp, gains, xform, focus = cam.do_3a(get_results=True)
for e in [0,1,2]:
req["android.edge.mode"] = e
cap = cam.do_capture(req)
diff --git a/apps/CameraITS/tests/scene1/test_3a.py b/apps/CameraITS/tests/scene1/test_3a.py
index 6cb8b51..b53fc73 100644
--- a/apps/CameraITS/tests/scene1/test_3a.py
+++ b/apps/CameraITS/tests/scene1/test_3a.py
@@ -27,7 +27,7 @@ def main():
print "Test skipped"
return
- sens, exp, gains, xform, focus = cam.do_3a()
+ sens, exp, gains, xform, focus = cam.do_3a(get_results=True)
print "AE: sensitivity %d, exposure %dms" % (sens, exp/1000000)
print "AWB: gains", gains, "transform", xform
print "AF: distance", focus
diff --git a/apps/CameraITS/tests/scene1/test_auto_vs_manual.py b/apps/CameraITS/tests/scene1/test_auto_vs_manual.py
index 01a373c..a9d5ce4 100644
--- a/apps/CameraITS/tests/scene1/test_auto_vs_manual.py
+++ b/apps/CameraITS/tests/scene1/test_auto_vs_manual.py
@@ -38,7 +38,7 @@ def main():
return
# Converge 3A and get the estimates.
- sens, exp, gains, xform, focus = cam.do_3a()
+ sens, exp, gains, xform, focus = cam.do_3a(get_results=True)
xform_rat = its.objects.float_to_rational(xform)
print "AE sensitivity %d, exposure %dms" % (sens, exp/1000000.0)
print "AWB gains", gains
@@ -85,7 +85,7 @@ def main():
print "Manual wb+tm transform:", xform_m2
# Check that the WB gains and transform reported in each capture
- # result math with the original AWB estimate from do_3a.
+ # result match with the original AWB estimate from do_3a.
for g,x in [(gains_a,xform_a),(gains_m1,xform_m1),(gains_m2,xform_m2)]:
assert(all([abs(xform[i] - x[i]) < 0.05 for i in range(9)]))
assert(all([abs(gains[i] - g[i]) < 0.05 for i in range(4)]))
diff --git a/apps/CameraITS/tests/scene1/test_capture_result.py b/apps/CameraITS/tests/scene1/test_capture_result.py
index ee3c91c..304e811 100644
--- a/apps/CameraITS/tests/scene1/test_capture_result.py
+++ b/apps/CameraITS/tests/scene1/test_capture_result.py
@@ -109,7 +109,7 @@ def test_auto(cam, w_map, h_map):
# Get 3A lock first, so the auto values in the capture result are
# populated properly.
rect = [[0,0,1,1,1]]
- cam.do_3a(rect, rect, rect, True, True, False)
+ cam.do_3a(rect, rect, rect, do_af=False)
cap = cam.do_capture(auto_req)
cap_res = cap["metadata"]
diff --git a/apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py b/apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py
index bc304c9..bf0e2ea 100644
--- a/apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py
+++ b/apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py
@@ -46,7 +46,7 @@ def main():
# Expose for the scene with min sensitivity
sens_min, sens_max = props['android.sensor.info.sensitivityRange']
sens_step = (sens_max - sens_min) / NUM_STEPS
- s_ae,e_ae,_,_,_ = cam.do_3a()
+ s_ae,e_ae,_,_,_ = cam.do_3a(get_results=True)
s_e_prod = s_ae * e_ae
reqs = []
diff --git a/apps/CameraITS/tests/scene1/test_raw_sensitivity.py b/apps/CameraITS/tests/scene1/test_raw_sensitivity.py
index 7c8eccd..8e36219 100644
--- a/apps/CameraITS/tests/scene1/test_raw_sensitivity.py
+++ b/apps/CameraITS/tests/scene1/test_raw_sensitivity.py
@@ -44,7 +44,7 @@ def main():
# Expose for the scene with min sensitivity
sens_min, sens_max = props['android.sensor.info.sensitivityRange']
sens_step = (sens_max - sens_min) / NUM_STEPS
- s_ae,e_ae,_,_,_ = cam.do_3a()
+ s_ae,e_ae,_,_,_ = cam.do_3a(get_results=True)
s_e_prod = s_ae * e_ae
variances = []
diff --git a/apps/CameraITS/tests/scene1/test_tonemap_sequence.py b/apps/CameraITS/tests/scene1/test_tonemap_sequence.py
index 100bcf8..7af51c5 100644
--- a/apps/CameraITS/tests/scene1/test_tonemap_sequence.py
+++ b/apps/CameraITS/tests/scene1/test_tonemap_sequence.py
@@ -36,7 +36,7 @@ def main():
print "Test skipped"
return
- sens, exp_time, _,_,_ = cam.do_3a(do_af=False)
+ sens, exp_time, _,_,_ = cam.do_3a(do_af=False,get_results=True)
means = []
diff --git a/apps/CameraITS/tests/tutorial.py b/apps/CameraITS/tests/tutorial.py
index 606b77e..1b1999e 100644
--- a/apps/CameraITS/tests/tutorial.py
+++ b/apps/CameraITS/tests/tutorial.py
@@ -97,7 +97,7 @@ def main():
#
# If this keeps on failing, try also rebooting the device before
# running the test.
- sens, exp, gains, xform, focus = cam.do_3a()
+ sens, exp, gains, xform, focus = cam.do_3a(get_results=True)
print "AE: sensitivity %d, exposure %dms" % (sens, exp/1000000.0)
print "AWB: gains", gains, "transform", xform
print "AF: distance", focus
diff --git a/apps/CameraITS/tools/compute_dng_noise_model.py b/apps/CameraITS/tools/compute_dng_noise_model.py
index 60186c5..e089ffc 100644
--- a/apps/CameraITS/tools/compute_dng_noise_model.py
+++ b/apps/CameraITS/tools/compute_dng_noise_model.py
@@ -41,7 +41,7 @@ def main():
# Expose for the scene with min sensitivity
sens_min, sens_max = props['android.sensor.info.sensitivityRange']
- s_ae,e_ae,awb_gains,awb_ccm,_ = cam.do_3a()
+ s_ae,e_ae,awb_gains,awb_ccm,_ = cam.do_3a(get_results=True)
s_e_prod = s_ae * e_ae
# Make the image brighter since the script looks at linear Bayer