• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /**
18  * @addtogroup Camera
19  * @{
20  */
21 
22 /**
23  * @file NdkCaptureRequest.h
24  */
25 
26 /*
27  * This file defines an NDK API.
28  * Do not remove methods.
29  * Do not change method signatures.
30  * Do not change the value of constants.
31  * Do not change the size of any of the classes defined in here.
32  * Do not reference types that are not part of the NDK.
33  * Do not #include files that aren't part of the NDK.
34  */
35 
36 #include <sys/cdefs.h>
37 
38 #include "NdkCameraError.h"
39 #include "NdkCameraMetadata.h"
40 #include "NdkCameraWindowType.h"
41 
42 #ifndef _NDK_CAPTURE_REQUEST_H
43 #define _NDK_CAPTURE_REQUEST_H
44 
45 __BEGIN_DECLS
46 
47 /** Container for output targets */
48 typedef struct ACameraOutputTargets ACameraOutputTargets;
49 
50 /** Container for a single output target */
51 typedef struct ACameraOutputTarget ACameraOutputTarget;
52 
53 /**
54  * ACaptureRequest is an opaque type that contains settings and output targets needed to capture
55  * a single image from camera device.
56  *
57  * <p>ACaptureRequest contains the configuration for the capture hardware (sensor, lens, flash),
58  * the processing pipeline, the control algorithms, and the output buffers. Also
59  * contains the list of target {@link ANativeWindow}s to send image data to for this
60  * capture.</p>
61  *
62  * <p>ACaptureRequest is created by {@link ACameraDevice_createCaptureRequest}.
63  *
64  * <p>ACaptureRequest is given to {@link ACameraCaptureSession_capture} or
65  * {@link ACameraCaptureSession_setRepeatingRequest} to capture images from a camera.</p>
66  *
67  * <p>Each request can specify a different subset of target {@link ANativeWindow}s for the
68  * camera to send the captured data to. All the {@link ANativeWindow}s used in a request must
69  * be part of the {@link ANativeWindow} list given to the last call to
70  * {@link ACameraDevice_createCaptureSession}, when the request is submitted to the
71  * session.</p>
72  *
73  * <p>For example, a request meant for repeating preview might only include the
74  * {@link ANativeWindow} for the preview SurfaceView or SurfaceTexture, while a
75  * high-resolution still capture would also include a {@link ANativeWindow} from a
76  * {@link AImageReader} configured for high-resolution JPEG images.</p>
77  *
78  * @see ACameraDevice_createCaptureRequest
79  * @see ACameraCaptureSession_capture
80  * @see ACameraCaptureSession_setRepeatingRequest
81  */
82 typedef struct ACaptureRequest ACaptureRequest;
83 
84 /**
85  * Create a ACameraOutputTarget object.
86  *
87  * <p>The ACameraOutputTarget is used in {@link ACaptureRequest_addTarget} method to add an output
88  * {@link ANativeWindow} to ACaptureRequest. Use {@link ACameraOutputTarget_free} to free the object
89  * and its memory after application no longer needs the {@link ACameraOutputTarget}.</p>
90  *
91  * @param window the {@link ANativeWindow} to be associated with the {@link ACameraOutputTarget}
92  * @param output the output {@link ACameraOutputTarget} will be stored here if the
93  *                  method call succeeds.
94  *
95  * @return <ul>
96  *         <li>{@link ACAMERA_OK} if the method call succeeds. The created ACameraOutputTarget will
97  *                                be filled in the output argument.</li>
98  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if window or output is NULL.</li></ul>
99  *
100  * @see ACaptureRequest_addTarget
101  */
102 camera_status_t ACameraOutputTarget_create(ACameraWindowType* window,
103         ACameraOutputTarget** output) __INTRODUCED_IN(24);
104 
105 /**
106  * Free a ACameraOutputTarget object.
107  *
108  * @param output the {@link ACameraOutputTarget} to be freed.
109  *
110  * @see ACameraOutputTarget_create
111  */
112 void ACameraOutputTarget_free(ACameraOutputTarget* output) __INTRODUCED_IN(24);
113 
114 /**
115  * Add an {@link ACameraOutputTarget} object to {@link ACaptureRequest}.
116  *
117  * @param request the {@link ACaptureRequest} of interest.
118  * @param output the output {@link ACameraOutputTarget} to be added to capture request.
119  *
120  * @return <ul>
121  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
122  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or output is NULL.</li></ul>
123  */
124 camera_status_t ACaptureRequest_addTarget(ACaptureRequest* request,
125         const ACameraOutputTarget* output) __INTRODUCED_IN(24);
126 
127 /**
128  * Remove an {@link ACameraOutputTarget} object from {@link ACaptureRequest}.
129  *
130  * <p>This method has no effect if the ACameraOutputTarget does not exist in ACaptureRequest.</p>
131  *
132  * @param request the {@link ACaptureRequest} of interest.
133  * @param output the output {@link ACameraOutputTarget} to be removed from capture request.
134  *
135  * @return <ul>
136  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
137  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or output is NULL.</li></ul>
138  */
139 camera_status_t ACaptureRequest_removeTarget(ACaptureRequest* request,
140         const ACameraOutputTarget* output) __INTRODUCED_IN(24);
141 
142 /**
143  * Get a metadata entry from input {@link ACaptureRequest}.
144  *
145  * <p>The memory of the data field in returned entry is managed by camera framework. Do not
146  * attempt to free it.</p>
147  *
148  * @param request the {@link ACaptureRequest} of interest.
149  * @param tag the tag value of the camera metadata entry to be get.
150  * @param entry the output {@link ACameraMetadata_const_entry} will be filled here if the method
151  *        call succeeeds.
152  *
153  * @return <ul>
154  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
155  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata or entry is NULL.</li>
156  *         <li>{@link ACAMERA_ERROR_METADATA_NOT_FOUND} if the capture request does not contain an
157  *             entry of input tag value.</li></ul>
158  */
159 camera_status_t ACaptureRequest_getConstEntry(
160         const ACaptureRequest* request, uint32_t tag, ACameraMetadata_const_entry* entry) __INTRODUCED_IN(24);
161 
162 /*
163  * List all the entry tags in input {@link ACaptureRequest}.
164  *
165  * @param request the {@link ACaptureRequest} of interest.
166  * @param numEntries number of metadata entries in input {@link ACaptureRequest}
167  * @param tags the tag values of the metadata entries. Length of tags is returned in numEntries
168  *             argument. The memory is managed by ACaptureRequest itself and must NOT be free/delete
169  *             by application. Calling ACaptureRequest_setEntry_* methods will invalidate previous
170  *             output of ACaptureRequest_getAllTags. Do not access tags after calling
171  *             ACaptureRequest_setEntry_*. To get new list of tags after updating capture request,
172  *             application must call ACaptureRequest_getAllTags again. Do NOT access tags after
173  *             calling ACaptureRequest_free.
174  *
175  * @return <ul>
176  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
177  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request, numEntries or tags is NULL.</li>
178  *         <li>{@link ACAMERA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul>
179  */
180 camera_status_t ACaptureRequest_getAllTags(
181         const ACaptureRequest* request, /*out*/int32_t* numTags, /*out*/const uint32_t** tags) __INTRODUCED_IN(24);
182 
183 /**
184  * Set/change a camera capture control entry with unsigned 8 bits data type.
185  *
186  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
187  *
188  * @param request the {@link ACaptureRequest} of interest.
189  * @param tag the tag value of the camera metadata entry to be set.
190  * @param count number of elements to be set in data argument
191  * @param data the entries to be set/change in the capture request.
192  *
193  * @return <ul>
194  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
195  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
196  *             zero while data is NULL, the data type of the tag is not unsigned 8 bits, or
197  *             the tag is not controllable by application.</li></ul>
198  */
199 camera_status_t ACaptureRequest_setEntry_u8(
200         ACaptureRequest* request, uint32_t tag, uint32_t count, const uint8_t* data) __INTRODUCED_IN(24);
201 
202 /**
203  * Set/change a camera capture control entry with signed 32 bits data type.
204  *
205  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
206  *
207  * @param request the {@link ACaptureRequest} of interest.
208  * @param tag the tag value of the camera metadata entry to be set.
209  * @param count number of elements to be set in data argument
210  * @param data the entries to be set/change in the capture request.
211  *
212  * @return <ul>
213  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
214  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
215  *             zero while data is NULL, the data type of the tag is not signed 32 bits, or
216  *             the tag is not controllable by application.</li></ul>
217  */
218 camera_status_t ACaptureRequest_setEntry_i32(
219         ACaptureRequest* request, uint32_t tag, uint32_t count, const int32_t* data) __INTRODUCED_IN(24);
220 
221 /**
222  * Set/change a camera capture control entry with float data type.
223  *
224  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
225  *
226  * @param request the {@link ACaptureRequest} of interest.
227  * @param tag the tag value of the camera metadata entry to be set.
228  * @param count number of elements to be set in data argument
229  * @param data the entries to be set/change in the capture request.
230  *
231  * @return <ul>
232  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
233  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
234  *             zero while data is NULL, the data type of the tag is not float, or
235  *             the tag is not controllable by application.</li></ul>
236  */
237 camera_status_t ACaptureRequest_setEntry_float(
238         ACaptureRequest* request, uint32_t tag, uint32_t count, const float* data) __INTRODUCED_IN(24);
239 
240 /**
241  * Set/change a camera capture control entry with signed 64 bits data type.
242  *
243  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
244  *
245  * @param request the {@link ACaptureRequest} of interest.
246  * @param tag the tag value of the camera metadata entry to be set.
247  * @param count number of elements to be set in data argument
248  * @param data the entries to be set/change in the capture request.
249  *
250  * @return <ul>
251  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
252  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
253  *             zero while data is NULL, the data type of the tag is not signed 64 bits, or
254  *             the tag is not controllable by application.</li></ul>
255  */
256 camera_status_t ACaptureRequest_setEntry_i64(
257         ACaptureRequest* request, uint32_t tag, uint32_t count, const int64_t* data) __INTRODUCED_IN(24);
258 
259 /**
260  * Set/change a camera capture control entry with double data type.
261  *
262  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
263  *
264  * @param request the {@link ACaptureRequest} of interest.
265  * @param tag the tag value of the camera metadata entry to be set.
266  * @param count number of elements to be set in data argument
267  * @param data the entries to be set/change in the capture request.
268  *
269  * @return <ul>
270  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
271  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
272  *             zero while data is NULL, the data type of the tag is not double, or
273  *             the tag is not controllable by application.</li></ul>
274  */
275 camera_status_t ACaptureRequest_setEntry_double(
276         ACaptureRequest* request, uint32_t tag, uint32_t count, const double* data) __INTRODUCED_IN(24);
277 
278 /**
279  * Set/change a camera capture control entry with rational data type.
280  *
281  * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
282  *
283  * @param request the {@link ACaptureRequest} of interest.
284  * @param tag the tag value of the camera metadata entry to be set.
285  * @param count number of elements to be set in data argument
286  * @param data the entries to be set/change in the capture request.
287  *
288  * @return <ul>
289  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
290  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
291  *             zero while data is NULL, the data type of the tag is not rational, or
292  *             the tag is not controllable by application.</li></ul>
293  */
294 camera_status_t ACaptureRequest_setEntry_rational(
295         ACaptureRequest* request, uint32_t tag, uint32_t count,
296         const ACameraMetadata_rational* data) __INTRODUCED_IN(24);
297 
298 /**
299  * Free a {@link ACaptureRequest} structure.
300  *
301  * @param request the {@link ACaptureRequest} to be freed.
302  */
303 void ACaptureRequest_free(ACaptureRequest* request) __INTRODUCED_IN(24);
304 
305 /**
306  * Associate an arbitrary user context pointer to the {@link ACaptureRequest}
307  *
308  * This method is useful for user to identify the capture request in capture session callbacks.
309  * The context is NULL for newly created request.
310  * {@link ACameraOutputTarget_free} will not free the context. Also calling this method twice
311  * will not cause the previous context be freed.
312  * Also note that calling this method after the request has been sent to capture session will not
313  * change the context pointer in the capture callbacks.
314  *
315  * @param request the {@link ACaptureRequest} of interest.
316  * @param context the user context pointer to be associated with this capture request.
317  *
318  * @return <ul>
319  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
320  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL.</li></ul>
321  */
322 camera_status_t ACaptureRequest_setUserContext(
323         ACaptureRequest* request, void* context) __INTRODUCED_IN(28);
324 
325 /**
326  * Get the user context pointer of the {@link ACaptureRequest}
327  *
328  * This method is useful for user to identify the capture request in capture session callbacks.
329  * The context is NULL for newly created request.
330  *
331  * @param request the {@link ACaptureRequest} of interest.
332  * @param context the user context pointer of this capture request.
333  *
334  * @return <ul>
335  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
336  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL.</li></ul>
337  */
338 camera_status_t ACaptureRequest_getUserContext(
339         const ACaptureRequest* request, /*out*/void** context) __INTRODUCED_IN(28);
340 
341 /**
342  * Create a copy of input {@link ACaptureRequest}.
343  *
344  * <p>The returned ACaptureRequest must be freed by the application by {@link ACaptureRequest_free}
345  * after application is done using it.</p>
346  *
347  * @param src the input {@link ACaptureRequest} to be copied.
348  *
349  * @return a valid ACaptureRequest pointer or NULL if the input request cannot be copied.
350  */
351 ACaptureRequest* ACaptureRequest_copy(const ACaptureRequest* src) __INTRODUCED_IN(28);
352 
353 /**
354  * Get a metadata entry from input {@link ACaptureRequest} for
355  * a physical camera backing a logical multi-camera device.
356  *
357  * <p>Same as ACaptureRequest_getConstEntry, except that if the key is contained
358  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
359  * returns the entry set by ACaptureRequest_setEntry_physicalCamera_* class of
360  * functions on the particular physical camera.</p>
361  *
362  * @param request the {@link ACaptureRequest} of interest created by
363  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
364  * @param physicalId one of the physical Ids used when request is created with
365  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
366  * @param tag the capture request metadata tag in
367  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}
368  *            that is set by ACaptureRequest_setEntry_physicalCamera_* class of functions.
369  *
370  * @return <ul>
371  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
372  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata, physicalId, or entry is NULL,
373  *         physicalId is not one of the Ids used in creating the request, or if the capture
374  *         request is a regular request with no physical Ids at all.</li>
375  *         <li>{@link ACAMERA_ERROR_METADATA_NOT_FOUND} if the capture request does not contain an
376  *             entry of input tag value.</li></ul>
377  */
378 camera_status_t ACaptureRequest_getConstEntry_physicalCamera(
379         const ACaptureRequest* request, const char* physicalId, uint32_t tag,
380         ACameraMetadata_const_entry* entry) __INTRODUCED_IN(29);
381 
382 /**
383  * Set/change a camera capture control entry with unsigned 8 bits data type for
384  * a physical camera backing a logical multi-camera device.
385  *
386  * <p>Same as ACaptureRequest_setEntry_u8, except that if tag is contained
387  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
388  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
389  * If tag is not contained in
390  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
391  * by the camera device.</p>
392  *
393  * @param request the {@link ACaptureRequest} of interest created by
394  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
395  * @param physicalId one of the physical Ids used when request is created with
396  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
397  * @param tag one of the capture request metadata tags in
398  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
399  *
400  * @return <ul>
401  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
402  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
403  *             larger than zero while data is NULL, the data type of the tag is not unsigned 8 bits,
404  *             the tag is not controllable by application, physicalId is not one of the Ids used
405  *             in creating the request, or if the capture request is a regular request with no
406  *             physical Ids at all.</li></ul>
407  */
408 camera_status_t ACaptureRequest_setEntry_physicalCamera_u8(
409         ACaptureRequest* request, const char* physicalId, uint32_t tag,
410         uint32_t count, const uint8_t* data) __INTRODUCED_IN(29);
411 
412 /**
413  * Set/change a camera capture control entry with signed 32 bits data type for
414  * a physical camera of a logical multi-camera device.
415  *
416  * <p>Same as ACaptureRequest_setEntry_i32, except that if tag is contained
417  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
418  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
419  * If tag is not contained in
420  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
421  * by the camera device.</p>
422  *
423  * @param request the {@link ACaptureRequest} of interest created by
424  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
425  * @param physicalId one of the physical Ids used when request is created with
426  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
427  * @param tag one of the capture request metadata tags in
428  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
429  *
430  * @return <ul>
431  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
432  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
433  *             larger than zero while data is NULL, the data type of the tag is not signed 32 bits,
434  *             the tag is not controllable by application, physicalId is not one of the Ids used
435  *             in creating the request, or if the capture request is a regular request with no
436  *             physical Ids at all.</li></ul>
437  */
438 camera_status_t ACaptureRequest_setEntry_physicalCamera_i32(
439         ACaptureRequest* request, const char* physicalId, uint32_t tag,
440         uint32_t count, const int32_t* data) __INTRODUCED_IN(29);
441 
442 /**
443  * Set/change a camera capture control entry with float data type for
444  * a physical camera of a logical multi-camera device.
445  *
446  * <p>Same as ACaptureRequest_setEntry_float, except that if tag is contained
447  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
448  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
449  * If tag is not contained in
450  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
451  * by the camera device.</p>
452  *
453  * @param request the {@link ACaptureRequest} of interest created by
454  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
455  * @param physicalId one of the physical Ids used when request is created with
456  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
457  * @param tag one of the capture request metadata tags in
458  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
459  *
460  * @return <ul>
461  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
462  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
463  *             larger than zero while data is NULL, the data type of the tag is not float,
464  *             the tag is not controllable by application, physicalId is not one of the Ids used
465  *             in creating the request, or if the capture request is a regular request with no
466  *             physical Ids at all.</li></ul>
467  */
468 camera_status_t ACaptureRequest_setEntry_physicalCamera_float(
469         ACaptureRequest* request, const char* physicalId, uint32_t tag,
470         uint32_t count, const float* data) __INTRODUCED_IN(29);
471 
472 /**
473  * Set/change a camera capture control entry with signed 64 bits data type for
474  * a physical camera of a logical multi-camera device.
475  *
476  * <p>Same as ACaptureRequest_setEntry_i64, except that if tag is contained
477  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
478  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
479  * If tag is not contained in
480  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
481  * by the camera device.</p>
482  *
483  * @param request the {@link ACaptureRequest} of interest created by
484  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
485  * @param physicalId one of the physical Ids used when request is created with
486  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
487  * @param tag one of the capture request metadata tags in
488  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
489  *
490  * @return <ul>
491  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
492  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
493  *             larger than zero while data is NULL, the data type of the tag is not signed 64 bits,
494  *             the tag is not controllable by application, physicalId is not one of the Ids used
495  *             in creating the request, or if the capture request is a regular request with no
496  *             physical Ids at all.</li></ul>
497  */
498 camera_status_t ACaptureRequest_setEntry_physicalCamera_i64(
499         ACaptureRequest* request, const char* physicalId, uint32_t tag,
500         uint32_t count, const int64_t* data) __INTRODUCED_IN(29);
501 
502 /**
503  * Set/change a camera capture control entry with double data type for
504  * a physical camera of a logical multi-camera device.
505  *
506  * <p>Same as ACaptureRequest_setEntry_double, except that if tag is contained
507  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
508  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
509  * If tag is not contained in
510  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
511  * by the camera device.</p>
512  *
513  * @param request the {@link ACaptureRequest} of interest created by
514  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
515  * @param physicalId one of the physical Ids used when request is created with
516  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
517  * @param tag one of the capture request metadata tags in
518  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
519  *
520  * @return <ul>
521  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
522  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
523  *             larger than zero while data is NULL, the data type of the tag is not double,
524  *             the tag is not controllable by application, physicalId is not one of the Ids used
525  *             in creating the request, or if the capture request is a regular request with no
526  *             physical Ids at all.</li></ul>
527  */
528 camera_status_t ACaptureRequest_setEntry_physicalCamera_double(
529         ACaptureRequest* request, const char* physicalId, uint32_t tag,
530         uint32_t count, const double* data) __INTRODUCED_IN(29);
531 
532 /**
533  * Set/change a camera capture control entry with rational data type for
534  * a physical camera of a logical multi-camera device.
535  *
536  * <p>Same as ACaptureRequest_setEntry_rational, except that if tag is contained
537  * in {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, this function
538  * sets the entry for a particular physical sub-camera backing the logical multi-camera.
539  * If tag is not contained in
540  * {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}, the key will be ignored
541  * by the camera device.</p>
542  *
543  * @param request the {@link ACaptureRequest} of interest created by
544  *                {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
545  * @param physicalId one of the physical Ids used when request is created with
546  *                   {@link ACameraDevice_createCaptureRequest_withPhysicalIds}.
547  * @param tag one of the capture request metadata tags in
548  *            {@link ACAMERA_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS}.
549  *
550  * @return <ul>
551  *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
552  *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or physicalId is NULL, count is
553  *             larger than zero while data is NULL, the data type of the tag is not rational,
554  *             the tag is not controllable by application, physicalId is not one of the Ids used
555  *             in creating the request, or if the capture request is a regular request with no
556  *             physical Ids at all.</li></ul>
557  */
558 camera_status_t ACaptureRequest_setEntry_physicalCamera_rational(
559         ACaptureRequest* request, const char* physicalId, uint32_t tag,
560         uint32_t count, const ACameraMetadata_rational* data) __INTRODUCED_IN(29);
561 
562 __END_DECLS
563 
564 #endif /* _NDK_CAPTURE_REQUEST_H */
565 
566 /** @} */
567