• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2014 The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7#      http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15import unittest
16import its.objects
17
18def full(props):
19    """Returns whether a device is a FULL capability camera2 device.
20
21    Args:
22        props: Camera properties object.
23
24    Returns:
25        Boolean.
26    """
27    return props.has_key("android.info.supportedHardwareLevel") and \
28           props["android.info.supportedHardwareLevel"] == 1
29
30def limited(props):
31    """Returns whether a device is a LIMITED capability camera2 device.
32
33    Args:
34        props: Camera properties object.
35
36    Returns:
37        Boolean.
38    """
39    return props.has_key("android.info.supportedHardwareLevel") and \
40           props["android.info.supportedHardwareLevel"] == 0
41
42def legacy(props):
43    """Returns whether a device is a LEGACY capability camera2 device.
44
45    Args:
46        props: Camera properties object.
47
48    Returns:
49        Boolean.
50    """
51    return props.has_key("android.info.supportedHardwareLevel") and \
52           props["android.info.supportedHardwareLevel"] == 2
53
54def manual_sensor(props):
55    """Returns whether a device supports MANUAL_SENSOR capabilities.
56
57    Args:
58        props: Camera properties object.
59
60    Returns:
61        Boolean.
62    """
63    return    props.has_key("android.request.availableCapabilities") and \
64              1 in props["android.request.availableCapabilities"] \
65           or full(props)
66
67def manual_post_proc(props):
68    """Returns whether a device supports MANUAL_POST_PROCESSING capabilities.
69
70    Args:
71        props: Camera properties object.
72
73    Returns:
74        Boolean.
75    """
76    return    props.has_key("android.request.availableCapabilities") and \
77              2 in props["android.request.availableCapabilities"] \
78           or full(props)
79
80def raw(props):
81    """Returns whether a device supports RAW capabilities.
82
83    Args:
84        props: Camera properties object.
85
86    Returns:
87        Boolean.
88    """
89    return props.has_key("android.request.availableCapabilities") and \
90           3 in props["android.request.availableCapabilities"]
91
92def raw16(props):
93    """Returns whether a device supports RAW16 output.
94
95    Args:
96        props: Camera properties object.
97
98    Returns:
99        Boolean.
100    """
101    return len(its.objects.get_available_output_sizes("raw", props)) > 0
102
103def raw10(props):
104    """Returns whether a device supports RAW10 output.
105
106    Args:
107        props: Camera properties object.
108
109    Returns:
110        Boolean.
111    """
112    return len(its.objects.get_available_output_sizes("raw10", props)) > 0
113
114def sensor_fusion(props):
115    """Returns whether the camera and motion sensor timestamps for the device
116    are in the same time domain and can be compared direcctly.
117
118    Args:
119        props: Camera properties object.
120
121    Returns:
122        Boolean.
123    """
124    return props.has_key("android.sensor.info.timestampSource") and \
125           props["android.sensor.info.timestampSource"] == 1
126
127def read_3a(props):
128    """Return whether a device supports reading out the following 3A settings:
129        sensitivity
130        exposure time
131        awb gain
132        awb cct
133        focus distance
134
135    Args:
136        props: Camera properties object.
137
138    Returns:
139        Boolean.
140    """
141    # TODO: check available result keys explicitly
142    return manual_sensor(props) and manual_post_proc(props)
143
144def compute_target_exposure(props):
145    """Return whether a device supports target exposure computation in its.target module.
146
147    Args:
148        props: Camera properties object.
149
150    Returns:
151        Boolean.
152    """
153    return manual_sensor(props) and manual_post_proc(props)
154
155class __UnitTest(unittest.TestCase):
156    """Run a suite of unit tests on this module.
157    """
158    # TODO: Add more unit tests.
159
160if __name__ == '__main__':
161    unittest.main()
162
163