普通文本  |  79行  |  2.99 KB

# Copyright 2014 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import its.device
import its.caps
import its.objects
import its.target

def main():
    """Test the AE state machine when using the precapture trigger.
    """

    INACTIVE = 0
    SEARCHING = 1
    CONVERGED = 2
    LOCKED = 3
    FLASHREQUIRED = 4
    PRECAPTURE = 5

    with its.device.ItsSession() as cam:
        props = cam.get_camera_properties()
        if not its.caps.compute_target_exposure(props):
            print "Test skipped"
            return

        _,fmt = its.objects.get_fastest_manual_capture_settings(props)

        # Capture 5 manual requests, with AE disabled, and the last request
        # has an AE precapture trigger (which should be ignored since AE is
        # disabled).
        manual_reqs = []
        e, s = its.target.get_target_exposure_combos(cam)["midExposureTime"]
        manual_req = its.objects.manual_capture_request(s,e)
        manual_req['android.control.aeMode'] = 0 # Off
        manual_reqs += [manual_req]*4
        precap_req = its.objects.manual_capture_request(s,e)
        precap_req['android.control.aeMode'] = 0 # Off
        precap_req['android.control.aePrecaptureTrigger'] = 1 # Start
        manual_reqs.append(precap_req)
        caps = cam.do_capture(manual_reqs, fmt)
        for cap in caps:
            assert(cap['metadata']['android.control.aeState'] == INACTIVE)

        # Capture an auto request and verify the AE state; no trigger.
        auto_req = its.objects.auto_capture_request()
        auto_req['android.control.aeMode'] = 1  # On
        cap = cam.do_capture(auto_req, fmt)
        state = cap['metadata']['android.control.aeState']
        print "AE state after auto request:", state
        assert(state in [SEARCHING, CONVERGED])

        # Capture with auto request with a precapture trigger.
        auto_req['android.control.aePrecaptureTrigger'] = 1  # Start
        cap = cam.do_capture(auto_req, fmt)
        state = cap['metadata']['android.control.aeState']
        print "AE state after auto request with precapture trigger:", state
        assert(state in [SEARCHING, CONVERGED, PRECAPTURE])

        # Capture some more auto requests, and AE should converge.
        auto_req['android.control.aePrecaptureTrigger'] = 0
        caps = cam.do_capture([auto_req]*5, fmt)
        state = caps[-1]['metadata']['android.control.aeState']
        print "AE state after auto request:", state
        assert(state == CONVERGED)

if __name__ == '__main__':
    main()