From 13bfb5b232321b3b7a69bab2e99c323c68675da3 Mon Sep 17 00:00:00 2001 From: Timothy Knight Date: Wed, 15 Oct 2014 13:42:22 -0700 Subject: CameraITS: Removed requirement that do_3a always returns 3A results. Bug: 17994909 Change-Id: Ib5e5eeffca87464a5eccbadef6eafe0b659f5993 --- apps/CameraITS/pymodules/its/device.py | 14 +++++++++++--- apps/CameraITS/pymodules/its/target.py | 3 ++- .../service/src/com/android/camera2/its/ItsService.java | 1 + apps/CameraITS/tests/inprog/test_blc_lsc.py | 4 ++-- apps/CameraITS/tests/inprog/test_param_edge_mode.py | 2 +- apps/CameraITS/tests/scene1/test_3a.py | 2 +- apps/CameraITS/tests/scene1/test_auto_vs_manual.py | 4 ++-- apps/CameraITS/tests/scene1/test_capture_result.py | 2 +- apps/CameraITS/tests/scene1/test_raw_burst_sensitivity.py | 2 +- apps/CameraITS/tests/scene1/test_raw_sensitivity.py | 2 +- apps/CameraITS/tests/scene1/test_tonemap_sequence.py | 2 +- apps/CameraITS/tests/tutorial.py | 2 +- apps/CameraITS/tools/compute_dng_noise_model.py | 2 +- 13 files changed, 26 insertions(+), 16 deletions(-) (limited to 'apps') 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 -- cgit v1.2.3