10dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/*
20dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Copyright (C) 2015 The Android Open Source Project
30dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh *
40dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Licensed under the Apache License, Version 2.0 (the "License");
50dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * you may not use this file except in compliance with the License.
60dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * You may obtain a copy of the License at
70dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh *
80dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh *      http://www.apache.org/licenses/LICENSE-2.0
90dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh *
100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Unless required by applicable law or agreed to in writing, software
110dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * distributed under the License is distributed on an "AS IS" BASIS,
120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * See the License for the specific language governing permissions and
140dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * limitations under the License.
150dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
160dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
173e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh/**
183e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh * @addtogroup Camera
193e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh * @{
203e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh */
213e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh
223e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh/**
233e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh * @file NdkCaptureRequest.h
243e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh */
253e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh
260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/*
270dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * This file defines an NDK API.
280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not remove methods.
290dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not change method signatures.
300dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not change the value of constants.
310dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not change the size of any of the classes defined in here.
320dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not reference types that are not part of the NDK.
330dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh * Do not #include files that aren't part of the NDK.
340dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
35d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
36d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#include <sys/cdefs.h>
37d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
380dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include <android/native_window.h>
390dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraError.h"
400dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraMetadata.h"
410dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#ifndef _NDK_CAPTURE_REQUEST_H
430dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#define _NDK_CAPTURE_REQUEST_H
440dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
45d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert__BEGIN_DECLS
46d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
47d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#if __ANDROID_API__ >= 24
480dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
490dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh// Container for output targets
500dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraOutputTargets ACameraOutputTargets;
510dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
520dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh// Container for a single output target
530dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraOutputTarget ACameraOutputTarget;
540dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * ACaptureRequest is an opaque type that contains settings and output targets needed to capture
571d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * a single image from camera device.
581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>ACaptureRequest contains the configuration for the capture hardware (sensor, lens, flash),
601d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * the processing pipeline, the control algorithms, and the output buffers. Also
611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * contains the list of target {@link ANativeWindow}s to send image data to for this
621d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * capture.</p>
631d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
641d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>ACaptureRequest is created by {@link ACameraDevice_createCaptureRequest}.
651d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
661d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>ACaptureRequest is given to {@link ACameraCaptureSession_capture} or
671d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ACameraCaptureSession_setRepeatingRequest} to capture images from a camera.</p>
681d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
691d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Each request can specify a different subset of target {@link ANativeWindow}s for the
701d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * camera to send the captured data to. All the {@link ANativeWindow}s used in a request must
711d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * be part of the {@link ANativeWindow} list given to the last call to
721d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ACameraDevice_createCaptureSession}, when the request is submitted to the
731d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * session.</p>
741d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>For example, a request meant for repeating preview might only include the
761d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ANativeWindow} for the preview SurfaceView or SurfaceTexture, while a
771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * high-resolution still capture would also include a {@link ANativeWindow} from a
781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link AImageReader} configured for high-resolution JPEG images.</p>
791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
801d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @see ACameraDevice_createCaptureRequest
811d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @see ACameraCaptureSession_capture
821d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @see ACameraCaptureSession_setRepeatingRequest
831d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
840dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACaptureRequest ACaptureRequest;
850dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Create a ACameraOutputTarget object.
881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
891d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The ACameraOutputTarget is used in {@link ACaptureRequest_addTarget} method to add an output
901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ANativeWindow} to ACaptureRequest. Use {@link ACameraOutputTarget_free} to free the object
911d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * and its memory after application no longer needs the {@link ACameraOutputTarget}.</p>
921d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param window the {@link ANativeWindow} to be associated with the {@link ACameraOutputTarget}
941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param output the output {@link ACameraOutputTarget} will be stored here if the
951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *                  method call succeeds.
961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds. The created ACameraOutputTarget will
991d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *                                be filled in the output argument.</li>
1001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if window or output is NULL.</li></ul>
1011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @see ACaptureRequest_addTarget
1031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehcamera_status_t ACameraOutputTarget_create(ANativeWindow* window, ACameraOutputTarget** output);
1050dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1061d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1071d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Free a ACameraOutputTarget object.
1081d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1091d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param output the {@link ACameraOutputTarget} to be freed.
1101d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1111d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @see ACameraOutputTarget_create
1121d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehvoid ACameraOutputTarget_free(ACameraOutputTarget* output);
1140dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Add an {@link ACameraOutputTarget} object to {@link ACaptureRequest}.
1171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1181d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
1191d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param output the output {@link ACameraOutputTarget} to be added to capture request.
1201d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1211d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1221d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1231d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or output is NULL.</li></ul>
1241d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1251d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehcamera_status_t ACaptureRequest_addTarget(ACaptureRequest* request,
1261d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraOutputTarget* output);
1271d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1281d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1291d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Remove an {@link ACameraOutputTarget} object from {@link ACaptureRequest}.
1301d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1311d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>This method has no effect if the ACameraOutputTarget does not exist in ACaptureRequest.</p>
1321d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1331d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
1341d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param output the output {@link ACameraOutputTarget} to be removed from capture request.
1351d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1361d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1371d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1381d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request or output is NULL.</li></ul>
1391d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1401d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehcamera_status_t ACaptureRequest_removeTarget(ACaptureRequest* request,
1411d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraOutputTarget* output);
1421d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1431d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1441d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Get a metadata entry from input {@link ACaptureRequest}.
1451d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1461d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The memory of the data field in returned entry is managed by camera framework. Do not
1471d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * attempt to free it.</p>
1481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
1501d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be get.
1511d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param entry the output {@link ACameraMetadata_const_entry} will be filled here if the method
1521d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *        call succeeeds.
1531d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1541d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata or entry is NULL.</li>
1571d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_METADATA_NOT_FOUND} if the capture request does not contain an
1581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             entry of input tag value.</li></ul>
1590dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
1600dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_getConstEntry(
1611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACaptureRequest* request, uint32_t tag, ACameraMetadata_const_entry* entry);
1628aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh
1638aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh/*
1641d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * List all the entry tags in input {@link ACaptureRequest}.
1651d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1661d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
1671d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param numEntries number of metadata entries in input {@link ACaptureRequest}
1681d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tags the tag values of the metadata entries. Length of tags is returned in numEntries
1691d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             argument. The memory is managed by ACaptureRequest itself and must NOT be free/delete
1701d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             by application. Calling ACaptureRequest_setEntry_* methods will invalidate previous
1711d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             output of ACaptureRequest_getAllTags. Do not access tags after calling
1721d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             ACaptureRequest_setEntry_*. To get new list of tags after updating capture request,
1731d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             application must call ACaptureRequest_getAllTags again. Do NOT access tags after
1741d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             calling ACaptureRequest_free.
1751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1761d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request, numEntries or tags is NULL.</li>
1791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul>
1808aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh */
1818aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yehcamera_status_t ACaptureRequest_getAllTags(
1821d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACaptureRequest* request, /*out*/int32_t* numTags, /*out*/const uint32_t** tags);
1838aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh
1841d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with unsigned 8 bits data type.
1861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
1881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1891d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
1901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
1911d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
1921d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
1931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
1971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not unsigned 8 bits, or
1981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
1990dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
2000dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_u8(
2011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count, const uint8_t* data);
2021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
2031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
2041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with signed 32 bits data type.
2051d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2061d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
2071d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2081d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
2091d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
2101d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
2111d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
2121d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2141d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
2161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not signed 32 bits, or
2171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
2181d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
2190dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_i32(
2201d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count, const int32_t* data);
2211d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
2221d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
2231d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with float data type.
2241d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2251d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
2261d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2271d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
2281d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
2291d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
2301d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
2311d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2321d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2331d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2341d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
2351d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not float, or
2361d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
2371d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
2380dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_float(
2391d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count, const float* data);
2401d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
2411d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
2421d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with signed 64 bits data type.
2431d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2441d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
2451d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2461d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
2471d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
2481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
2491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
2501d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2511d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2521d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2531d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
2541d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not signed 64 bits, or
2551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
2561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
2570dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_i64(
2581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count, const int64_t* data);
2591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
2601d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
2611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with double data type.
2621d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2631d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
2641d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2651d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
2661d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
2671d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
2681d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
2691d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2701d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2711d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2721d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
2731d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not double, or
2741d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
2751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
2760dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_double(
2771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count, const double* data);
2781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
2791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
2801d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Set/change a camera capture control entry with rational data type.
2811d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2821d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Set count to 0 and data to NULL to remove a tag from the capture request.</p>
2831d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2841d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} of interest.
2851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be set.
2861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param count number of elements to be set in data argument
2871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param data the entries to be set/change in the capture request.
2881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2891d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2911d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if request is NULL, count is larger than
2921d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             zero while data is NULL, the data type of the tag is not rational, or
2931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             the tag is not controllable by application.</li></ul>
2941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
2950dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACaptureRequest_setEntry_rational(
2961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        ACaptureRequest* request, uint32_t tag, uint32_t count,
2971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraMetadata_rational* data);
2980dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2991d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
3001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Free a {@link ACaptureRequest} structure.
3011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
3021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param request the {@link ACaptureRequest} to be freed.
3031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
3040dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehvoid ACaptureRequest_free(ACaptureRequest* request);
3050dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
306d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#endif /* __ANDROID_API__ >= 24 */
307d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
308d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert__END_DECLS
3090dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
310d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#endif /* _NDK_CAPTURE_REQUEST_H */
3113e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh
3123e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh/** @} */
313