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 NdkCameraMetadata.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 */
350dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
360dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#ifndef _NDK_CAMERA_METADATA_H
370dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#define _NDK_CAMERA_METADATA_H
380dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
39d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#include <sys/cdefs.h>
40d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
410dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraError.h"
420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraMetadataTags.h"
430dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
44d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert__BEGIN_DECLS
45d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
46d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#if __ANDROID_API__ >= 24
470dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * ACameraMetadata is opaque type that provides access to read-only camera metadata like camera
501d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * characteristics (via {@link ACameraManager_getCameraCharacteristics}) or capture results (via
511d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ACameraCaptureSession_captureCallback_result}).
521d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
530dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata ACameraMetadata;
540dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Possible data types of a metadata entry.
571d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Keep in sync with system/media/include/system/camera_metadata.h
591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
600dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehenum {
611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Unsigned 8-bit integer (uint8_t)
620dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_BYTE = 0,
631d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Signed 32-bit integer (int32_t)
640dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_INT32 = 1,
651d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// 32-bit float (float)
660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_FLOAT = 2,
671d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Signed 64-bit integer (int64_t)
680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_INT64 = 3,
691d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// 64-bit float (double)
700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_DOUBLE = 4,
711d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// A 64-bit fraction (ACameraMetadata_rational)
720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_RATIONAL = 5,
731d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Number of type fields
740dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_NUM_TYPES
750dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh};
760dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Definition of rational data type in {@link ACameraMetadata}.
791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
800dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_rational {
810dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    int32_t numerator;
820dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    int32_t denominator;
830dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_rational;
840dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * A single camera metadata entry.
871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Each entry is an array of values, though many metadata fields may only have 1 entry in the
891d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * array.</p>
901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
910dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_entry {
921d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The tag identifying the entry.
941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p> It is one of the values defined in {@link NdkCameraMetadataTags.h}, and defines how the
961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * entry should be interpreted and which parts of the API provide it.
971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * See {@link NdkCameraMetadataTags.h} for more details. </p>
981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
990dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t tag;
1001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The data type of this metadata entry.
1031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>Must be one of ACAMERA_TYPE_* enum values defined above. A particular tag always has the
1051d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * same type.</p>
1061d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1070dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint8_t  type;
1081d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1091d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1101d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Count of elements (NOT count of bytes) in this metadata entry.
1111d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t count;
1131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1141d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Pointer to the data held in this metadata entry.
1161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>The type field above defines which union member pointer is valid. The count field above
1181d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * defines the length of the data in number of elements.</p>
1191d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1200dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    union {
1210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        uint8_t *u8;
1220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        int32_t *i32;
1230dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        float   *f;
1240dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        int64_t *i64;
1250dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        double  *d;
1260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        ACameraMetadata_rational* r;
1270dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    } data;
1280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_entry;
1290dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1301d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1311d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * A single read-only camera metadata entry.
1321d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1331d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Each entry is an array of values, though many metadata fields may only have 1 entry in the
1341d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * array.</p>
1351d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1360dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_const_entry {
1371d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1381d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The tag identifying the entry.
1391d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1401d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p> It is one of the values defined in {@link NdkCameraMetadataTags.h}, and defines how the
1411d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * entry should be interpreted and which parts of the API provide it.
1421d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * See {@link NdkCameraMetadataTags.h} for more details. </p>
1431d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1440dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t tag;
1451d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1461d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1471d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The data type of this metadata entry.
1481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>Must be one of ACAMERA_TYPE_* enum values defined above. A particular tag always has the
1501d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * same type.</p>
1511d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1520dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint8_t  type;
1531d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1541d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Count of elements (NOT count of bytes) in this metadata entry.
1561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1570dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t count;
1581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1601d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Pointer to the data held in this metadata entry.
1611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1621d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>The type field above defines which union member pointer is valid. The count field above
1631d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * defines the length of the data in number of elements.</p>
1641d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1650dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    union {
1660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const uint8_t *u8;
1670dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const int32_t *i32;
1680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const float   *f;
1690dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const int64_t *i64;
1700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const double  *d;
1710dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const ACameraMetadata_rational* r;
1720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    } data;
1730dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_const_entry;
1740dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1761d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Get a metadata entry from an input {@link ACameraMetadata}.
1771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The memory of the data field in the returned entry is managed by camera framework. Do not
1791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * attempt to free it.</p>
1801d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1811d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} of interest.
1821d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be get.
1831d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param entry the output {@link ACameraMetadata_const_entry} will be filled here if the method
1841d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *        call succeeeds.
1851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata or entry is NULL.</li>
1891d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_METADATA_NOT_FOUND} if input metadata does not contain an entry
1901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             of input tag value.</li></ul>
1910dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
1920dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraMetadata_getConstEntry(
1931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraMetadata* metadata, uint32_t tag, /*out*/ACameraMetadata_const_entry* entry);
1940dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * List all the entry tags in input {@link ACameraMetadata}.
1971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} of interest.
1991d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param numEntries number of metadata entries in input {@link ACameraMetadata}
2001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tags the tag values of the metadata entries. Length of tags is returned in numEntries
2011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             argument. The memory is managed by ACameraMetadata itself and must NOT be free/delete
2021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             by application. Do NOT access tags after calling ACameraMetadata_free.
2031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2051d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2061d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata, numEntries or tags is NULL.</li>
2071d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul>
2088aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh */
2098aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yehcamera_status_t ACameraMetadata_getAllTags(
2101d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraMetadata* metadata, /*out*/int32_t* numEntries, /*out*/const uint32_t** tags);
2110dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2120dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/**
2131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Create a copy of input {@link ACameraMetadata}.
2141d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The returned ACameraMetadata must be freed by the application by {@link ACameraMetadata_free}
2161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * after application is done using it.</p>
2171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2181d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param src the input {@link ACameraMetadata} to be copied.
2191d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2201d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return a valid ACameraMetadata pointer or NULL if the input metadata cannot be copied.
2210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
2220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehACameraMetadata* ACameraMetadata_copy(const ACameraMetadata* src);
2230dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2240dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/**
2251d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Free a {@link ACameraMetadata} structure.
2261d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2271d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} to be freed.
2280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
2291d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehvoid ACameraMetadata_free(ACameraMetadata* metadata);
2300dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
231d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#endif /* __ANDROID_API__ >= 24 */
232d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert
233d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert__END_DECLS
2340dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
235d7973ba37cea1a9638ded23041c69774ae8cebbcDan Albert#endif /* _NDK_CAMERA_METADATA_H */
2363e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh
2373e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh/** @} */
238