aboutsummaryrefslogtreecommitdiff
path: root/zh-cn/devices/camera/camera3_requests_methods.html
blob: 73010305fc54691f839ca43e7c7a2db175d58d4f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<html devsite><head>
    <title>创建和提交请求</title>
    <meta name="project_path" value="/_project.yaml"/>
    <meta name="book_path" value="/_book.yaml"/>
  </head>
  <body>
  <!--
      Copyright 2017 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.
  -->

<h2 id="request-creation">创建和提交请求</h2>
<h3 id="default-settings">construct_default_request_settings</h3>
<p>为标准相机用例创建拍照设置。设备必须返回一个设置缓冲区,并且该缓冲区已配置为满足所请求用例(必须是 <code>CAMERA3_TEMPLATE_*</code> 枚举之一)的需求。所有请求控制字段都必须包括在内。</p>
<p>HAL 保留对该结构的所有权,但指向该结构的指针在设备关闭之前必须一直保持有效。该调用返回缓冲区后,框架和 HAL 便不能再修改相应缓冲区。对于针对同一模板或针对其他模板的后续调用,可以返回同一个缓冲区。</p>
<h4><strong>返回值</strong></h4>
<ul>
  <li>有效的元数据:在成功创建默认设置缓冲区时返回。</li>
  <li><code>NULL</code>:在发生严重错误时返回。如果返回了该值,框架将只能成功调用 <code>close()</code> 方法。</li>
</ul>
<h3 id="process-request">process_capture_request</h3>
<p>向 HAL 发送新的拍照请求。在准备好可以接受下一个要处理的请求之前,HAL 不会从该调用返回。框架一次只会对 <code>process_capture_request()</code> 进行一次调用,并且调用将全部来自同一个线程。一旦有新的请求并且其关联的缓冲区处于可用状态,框架会立即对 <code>process_capture_request()</code> 进行下一次调用。在正常预览情况下,这意味着框架几乎会立即再次调用该函数。</p>
<p>实际的请求处理是异步进行的,拍照结果由 HAL 通过 <code>process_capture_result()</code> 调用返回。该调用要求结果元数据可用,但输出缓冲区可能只会提供要等待的同步 Fence。如果有多个请求,系统会立即对其进行快速处理,以保持全输出帧速率。</p>
<p>框架保留对请求结构的所有权。系统只能保证请求结构在该调用期间有效。对于需要保留以用于拍照处理的信息,HAL 设备必须为其创建多个副本。HAL 负责等待并关闭缓冲区的 Fence,并将缓冲区句柄返回给框架。</p>
<p>如果 <code>input_buffer</code> 不是 <code>NULL</code>,则 HAL 必须将输入缓冲区释放同步 Fence 的文件描述符写入到 <code>input_buffer</code>-&gt;<code>release_fence</code>。如果 HAL 为输入缓冲区释放同步 Fence 返回 <code>-1</code>,则框架可以立即重新使用输入缓冲区。否则,框架将等待同步 Fence,然后再重新填充和重新使用输入缓冲区。</p>
<h4><strong>返回值</strong></h4>
<ul>
  <li><code>0</code>:在成功开始处理拍照请求时返回。</li>
  <li><code>-EINVAL</code>:在输入格式不正确(不允许各项设置设为 <code>NULL</code> 但却被设为了 NULL、没有输出缓冲区,等等)且无法开始处理拍照时返回。请求处理过程中发生的故障应通过调用 <code>camera3_callback_ops_t.notify()</code> 来处理。如果出现此错误,框架仍将负责流缓冲区的 Fence 和缓冲区句柄;HAL 不应关闭 Fence 或通过 <code>process_capture_result</code> 返回这些缓冲区。</li>
  <li><code>-ENODEV</code>:在相机设备遇到严重错误时返回。如果返回了此错误,框架将只能成功调用 <code>close()</code> 方法。</li>
</ul>
<h2 id="misc-methods">其他方法</h2>
<h3 id="get-metadata">get_metadata_vendor_tag_ops</h3>
<p>获取方法以查询供应商扩展元数据标签信息。HAL 应填充所有供应商标签操作方法,或者使操作保持不变(如果未定义供应商标签)。可以在以下位置找到 <code>vendor_tag_query_ops_t</code> 的定义:<code>system/media/camera/include/system/camera_metadata.h</code>。</p>
<h3 id="dump">dump</h3>
<p>打印出相机设备的调试状态。当相机服务收到调试转储请求时,框架将调用该方法。在使用 <code>dumpsys</code> 工具或捕获错误报告时,会发生这种情况。传入的文件描述符可用于编写调试文本(使用 <code>dprintf()</code> 或 <code>write()</code>)。该文本应仅采用 ASCII 编码。</p>
<h3 id="flush">flush</h3>
<p>在给定设备上的管道中,刷新当前正在进行的所有拍照和所有缓冲区。框架将使用该方法来尽快转储所有状态,以便为调用 <code>configure_streams()</code> 做准备。</p>
<p>由于无需成功返回缓冲区,因此可以返回在 <code>flush()</code> 时占用的每个缓冲区(不管是否已成功填充),并显示 <code>CAMERA3_BUFFER_STATUS_ERROR</code>。请注意,HAL 仍可在此调用期间返回有效的 (<code>STATUS_OK</code>) 缓冲区,但前提是已成功填充这些缓冲区。</p>
<p>目前在 HAL 中的所有请求都应被尽快返回。未在处理的请求应立即返回错误。应停止所有可中断的硬件块,并且应等待所有不可中断的块。</p>
<p>仅当 HAL 中不再有待处理的缓冲区或请求时,<code>flush()</code> 才应返回。框架可能会调用 <code>configure_streams</code>(因为 HAL 状态现在为已停顿),也可能会发出新的请求。</p>
<p><code>flush()</code> 调用所用时间不应超过 100 毫秒,且最长不得超过 1 秒。</p>
<h4><strong>版本信息</strong></h4>
<p>仅当设备版本不低于 <code>CAMERA_DEVICE_API_VERSION_3_1</code> 时,才能获得版本信息。</p>
<h4><strong>返回值</strong></h4>
<ul>
  <li><code>0</code>:在成功刷新相机 HAL 时返回。</li>
  <li><code>-EINVAL</code>:在输入格式不正确(设备无效)时返回。</li>
  <li><code>-ENODEV</code>:在相机设备遇到严重错误时返回。如果返回了此错误,框架将只能成功调用 <code>close()</code> 方法。</li>
</ul>

</body></html>