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
390dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraError.h"
400dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#include "NdkCameraMetadataTags.h"
410dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#ifdef __cplusplus
430dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehextern "C" {
440dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#endif
450dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
461d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
471d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * ACameraMetadata is opaque type that provides access to read-only camera metadata like camera
481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * characteristics (via {@link ACameraManager_getCameraCharacteristics}) or capture results (via
491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * {@link ACameraCaptureSession_captureCallback_result}).
501d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
510dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata ACameraMetadata;
520dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
531d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
541d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Possible data types of a metadata entry.
551d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Keep in sync with system/media/include/system/camera_metadata.h
571d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
580dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehenum {
591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Unsigned 8-bit integer (uint8_t)
600dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_BYTE = 0,
611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Signed 32-bit integer (int32_t)
620dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_INT32 = 1,
631d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// 32-bit float (float)
640dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_FLOAT = 2,
651d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Signed 64-bit integer (int64_t)
660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_INT64 = 3,
671d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// 64-bit float (double)
680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_DOUBLE = 4,
691d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// A 64-bit fraction (ACameraMetadata_rational)
700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_TYPE_RATIONAL = 5,
711d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /// Number of type fields
720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    ACAMERA_NUM_TYPES
730dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh};
740dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
761d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Definition of rational data type in {@link ACameraMetadata}.
771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
780dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_rational {
790dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    int32_t numerator;
800dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    int32_t denominator;
810dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_rational;
820dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
831d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
841d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * A single camera metadata entry.
851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Each entry is an array of values, though many metadata fields may only have 1 entry in the
871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * array.</p>
881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
890dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_entry {
901d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
911d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The tag identifying the entry.
921d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p> It is one of the values defined in {@link NdkCameraMetadataTags.h}, and defines how the
941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * entry should be interpreted and which parts of the API provide it.
951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * See {@link NdkCameraMetadataTags.h} for more details. </p>
961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
970dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t tag;
981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
991d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The data type of this metadata entry.
1011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>Must be one of ACAMERA_TYPE_* enum values defined above. A particular tag always has the
1031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * same type.</p>
1041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1050dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint8_t  type;
1061d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1071d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1081d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Count of elements (NOT count of bytes) in this metadata entry.
1091d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t count;
1111d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1121d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Pointer to the data held in this metadata entry.
1141d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>The type field above defines which union member pointer is valid. The count field above
1161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * defines the length of the data in number of elements.</p>
1171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1180dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    union {
1190dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        uint8_t *u8;
1200dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        int32_t *i32;
1210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        float   *f;
1220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        int64_t *i64;
1230dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        double  *d;
1240dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        ACameraMetadata_rational* r;
1250dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    } data;
1260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_entry;
1270dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1281d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1291d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * A single read-only camera metadata entry.
1301d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1311d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>Each entry is an array of values, though many metadata fields may only have 1 entry in the
1321d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * array.</p>
1331d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh */
1340dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehtypedef struct ACameraMetadata_const_entry {
1351d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1361d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The tag identifying the entry.
1371d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1381d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p> It is one of the values defined in {@link NdkCameraMetadataTags.h}, and defines how the
1391d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * entry should be interpreted and which parts of the API provide it.
1401d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * See {@link NdkCameraMetadataTags.h} for more details. </p>
1411d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1420dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t tag;
1431d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1441d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1451d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * The data type of this metadata entry.
1461d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1471d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>Must be one of ACAMERA_TYPE_* enum values defined above. A particular tag always has the
1481d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * same type.</p>
1491d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1500dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint8_t  type;
1511d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1521d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1531d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Count of elements (NOT count of bytes) in this metadata entry.
1541d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1550dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    uint32_t count;
1561d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh
1571d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh    /**
1581d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * Pointer to the data held in this metadata entry.
1591d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     *
1601d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * <p>The type field above defines which union member pointer is valid. The count field above
1611d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     * defines the length of the data in number of elements.</p>
1621d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh     */
1630dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    union {
1640dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const uint8_t *u8;
1650dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const int32_t *i32;
1660dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const float   *f;
1670dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const int64_t *i64;
1680dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const double  *d;
1690dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh        const ACameraMetadata_rational* r;
1700dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh    } data;
1710dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} ACameraMetadata_const_entry;
1720dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1731d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1741d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Get a metadata entry from an input {@link ACameraMetadata}.
1751d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1761d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The memory of the data field in the returned entry is managed by camera framework. Do not
1771d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * attempt to free it.</p>
1781d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1791d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} of interest.
1801d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tag the tag value of the camera metadata entry to be get.
1811d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param entry the output {@link ACameraMetadata_const_entry} will be filled here if the method
1821d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *        call succeeeds.
1831d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1841d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
1851d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
1861d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata or entry is NULL.</li>
1871d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_METADATA_NOT_FOUND} if input metadata does not contain an entry
1881d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             of input tag value.</li></ul>
1890dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
1900dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yehcamera_status_t ACameraMetadata_getConstEntry(
1911d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraMetadata* metadata, uint32_t tag, /*out*/ACameraMetadata_const_entry* entry);
1920dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
1931d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh/**
1941d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * List all the entry tags in input {@link ACameraMetadata}.
1951d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
1961d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} of interest.
1971d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param numEntries number of metadata entries in input {@link ACameraMetadata}
1981d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param tags the tag values of the metadata entries. Length of tags is returned in numEntries
1991d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             argument. The memory is managed by ACameraMetadata itself and must NOT be free/delete
2001d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *             by application. Do NOT access tags after calling ACameraMetadata_free.
2011d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2021d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return <ul>
2031d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_OK} if the method call succeeds.</li>
2041d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_INVALID_PARAMETER} if metadata, numEntries or tags is NULL.</li>
2051d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *         <li>{@link ACAMERA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul>
2068aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yeh */
2078aac03f4d6c66749803d5708086ba5f509aa88c6Yin-Chia Yehcamera_status_t ACameraMetadata_getAllTags(
2081d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh        const ACameraMetadata* metadata, /*out*/int32_t* numEntries, /*out*/const uint32_t** tags);
2090dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2100dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/**
2111d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Create a copy of input {@link ACameraMetadata}.
2121d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2131d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * <p>The returned ACameraMetadata must be freed by the application by {@link ACameraMetadata_free}
2141d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * after application is done using it.</p>
2151d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2161d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param src the input {@link ACameraMetadata} to be copied.
2171d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2181d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @return a valid ACameraMetadata pointer or NULL if the input metadata cannot be copied.
2190dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
2200dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia YehACameraMetadata* ACameraMetadata_copy(const ACameraMetadata* src);
2210dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2220dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh/**
2231d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * Free a {@link ACameraMetadata} structure.
2241d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh *
2251d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yeh * @param metadata the {@link ACameraMetadata} to be freed.
2260dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh */
2271d0955cb5257a59f0ae435fefe26c05af4f4fbb6Yin-Chia Yehvoid ACameraMetadata_free(ACameraMetadata* metadata);
2280dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2290dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#ifdef __cplusplus
2300dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh} // extern "C"
2310dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#endif
2320dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh
2330dea57fd9fc4b2ccaab97d9477359fbd5a626f5cYin-Chia Yeh#endif //_NDK_CAMERA_METADATA_H
2343e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh
2353e49be17d8c8c53f50bb0d39affbbc36f6a12488Yin-Chia Yeh/** @} */
236