camera_metadata_tests.cpp revision d8afb4d1a4245b2a9d722cbb358a4d6febed89cf
1d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala/*
2d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project
3d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
4d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * you may not use this file except in compliance with the License.
6d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * You may obtain a copy of the License at
7d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
8d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala *
10d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * See the License for the specific language governing permissions and
14d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala * limitations under the License.
15d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala */
16d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
17d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "gtest/gtest.h"
18d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "system/camera_metadata.h"
19d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
20d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "camera_metadata_tests_fake_vendor.h"
21d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
22d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NULL(x)     EXPECT_EQ((void*)0, x)
23d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NOT_NULL(x) EXPECT_NE((void*)0, x)
24d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
25d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define OK    0
26d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define ERROR 1
27d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_normal) {
29d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 32;
32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
33d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
35d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m);
36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m));
37d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m));
38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m));
39d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m));
40d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
41d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
42d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
43d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
44d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nodata) {
45d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
46d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
47d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(1, 0);
48d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m);
50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m));
51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)1, get_camera_metadata_entry_capacity(m));
52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m));
53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(m));
54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nothing) {
59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
60d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(0, 0);
62d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(m);
64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_normal) {
67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    void *buf = NULL;
69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 32;
72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = calculate_camera_metadata_size(entry_capacity,
74d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            data_capacity);
75d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
76d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_TRUE(buf_size > 0);
77d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
78d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf = malloc(buf_size);
79d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
80d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
81d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
82d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity);
83d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
84d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(buf, (uint8_t*)m);
85d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m));
86d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m));
87d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m));
88d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m));
89d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
90d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
91d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
92d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
93d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_nospace) {
94d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
95d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    void *buf = NULL;
96d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
97d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
98d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 32;
99d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
100d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = calculate_camera_metadata_size(entry_capacity,
101d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            data_capacity);
102d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
103d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_GT(buf_size, (size_t)0);
104d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
105d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf_size--;
106d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
107d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf = malloc(buf_size);
108d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
109d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
110d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
111d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity);
112d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
113d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(m);
114d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
115d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
118d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_extraspace) {
119d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
120d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t *buf = NULL;
121d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
122d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
123d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 32;
124d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t extra_space = 10;
125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = calculate_camera_metadata_size(entry_capacity,
127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            data_capacity);
128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_GT(buf_size, (size_t)0);
130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
131d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf_size += extra_space;
132d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf = (uint8_t*)malloc(buf_size);
134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity);
138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((uint8_t*)m, buf);
140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m));
141d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m));
142d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m));
143d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m));
144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(buf + buf_size - extra_space, (uint8_t*)m + get_camera_metadata_size(m));
145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, get_size) {
150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 32;
153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
156d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity),
157d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_size(m) );
158d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(calculate_camera_metadata_size(0,0),
160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_compact_size(m) );
161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_normal) {
166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 80;
169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
172d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
173d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t data_used = 0;
174d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t entries_used = 0;
175d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
176d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // INT64
177d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
178d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int64_t exposure_time = 1000000000;
179d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
180d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_SENSOR_EXPOSURE_TIME,
181d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &exposure_time, 1);
182d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
183d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_used += calculate_camera_metadata_entry_data_size(
184d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1);
185d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    entries_used++;
186d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
187d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // INT32
188d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
189d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t sensitivity = 800;
190d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
191d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_SENSOR_SENSITIVITY,
192d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &sensitivity, 1);
193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_used += calculate_camera_metadata_entry_data_size(
195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_type(ANDROID_SENSOR_SENSITIVITY), 1);
196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    entries_used++;
197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // FLOAT
199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    float focusDistance = 0.5f;
201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_LENS_FOCUS_DISTANCE,
203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &focusDistance, 1);
204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_used += calculate_camera_metadata_entry_data_size(
206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_type(ANDROID_LENS_FOCUS_DISTANCE), 1);
207d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    entries_used++;
208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
209d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Array of FLOAT
210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    float colorTransform[9] = {
212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        0.9f, 0.0f, 0.0f,
213d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        0.2f, 0.5f, 0.0f,
214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        0.0f, 0.1f, 0.7f
215d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    };
216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
217d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_COLOR_TRANSFORM,
218d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            colorTransform, 9);
219d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
220d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_used += calculate_camera_metadata_entry_data_size(
221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_type(ANDROID_COLOR_TRANSFORM), 9);
222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    entries_used++;
223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    // Check added entries
225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint32_t tag = 0;
227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t type = 0;
228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t *data_int32;
229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int64_t *data_int64;
230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    float *data_float;
231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t data_count = 0;
232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = get_camera_metadata_entry(m,
234d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            0, &tag, &type, (void**)&data_int64, &data_count);
235d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
236d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, tag);
237d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(TYPE_INT64, type);
238d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)1, data_count);
239d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(exposure_time, *data_int64);
240d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = get_camera_metadata_entry(m,
242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            1, &tag, &type, (void**)&data_int32, &data_count);
243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ANDROID_SENSOR_SENSITIVITY, tag);
245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(TYPE_INT32, type);
246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)1, data_count);
247d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(sensitivity, *data_int32);
248d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
249d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = get_camera_metadata_entry(m,
250d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            2, &tag, &type, (void**)&data_float, &data_count);
251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, tag);
253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(TYPE_FLOAT, type);
254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)1, data_count);
255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(focusDistance, *data_float);
256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = get_camera_metadata_entry(m,
258d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            3, &tag, &type, (void**)&data_float, &data_count);
259d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
260d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ANDROID_COLOR_TRANSFORM, tag);
261d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(TYPE_FLOAT, type);
262d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)9, data_count);
263d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < data_count; i++) {
264d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(colorTransform[i], data_float[i] );
265d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
266d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
267d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity),
268d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_size(m) );
269d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
270d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(calculate_camera_metadata_size(entries_used, data_used),
271d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_compact_size(m) );
272d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
273d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    dump_camera_metadata(m, 2);
274d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
275d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
276d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
277d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
278d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid add_test_metadata(camera_metadata_t *m, int entry_count) {
279d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
280d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m);
281d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
282d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
283d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t data_used = 0;
284d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t entries_used = 0;
285d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int64_t exposure_time;
286d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (int i=0; i < entry_count; i++ ) {
287d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        exposure_time = 100 + i * 100;
288d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = add_camera_metadata_entry(m,
289d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                ANDROID_SENSOR_EXPOSURE_TIME,
290d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                &exposure_time, 1);
291d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
292d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        data_used += calculate_camera_metadata_entry_data_size(
293d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1);
294d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        entries_used++;
295d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
296d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_used, get_camera_metadata_data_count(m));
297d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entries_used, get_camera_metadata_entry_count(m));
298d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_GT(get_camera_metadata_data_capacity(m),
299d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m));
300d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
301d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
302d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_toomany) {
303d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
304d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
305d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
306d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
307d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
308d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
309d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
310d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
311d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
312d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t sensitivity = 100;
313d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
314d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_SENSOR_SENSITIVITY,
315d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &sensitivity, 1);
316d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
317d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
318d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
319d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint32_t tag = 0;
320d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t type = 0;
321d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t *data_int32;
322d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t data_count = 0;
323d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < entry_capacity; i++) {
324d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int64_t exposure_time = 100 + i * 100;
325d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
326d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag, &type, (void**)&data_int32, &data_count);
327d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
328d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, tag);
329d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(TYPE_INT64, type);
330d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ((size_t)1, data_count);
331d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(exposure_time, *data_int32);
332d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
333d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    tag = 0;
334d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    type = 0;
335d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_int32 = NULL;
336d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    data_count = 0;
337d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = get_camera_metadata_entry(m,
338d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            entry_capacity, &tag, &type, (void**)&data_int32, &data_count);
339d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
340d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((uint32_t)0, tag);
341d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((uint8_t)0, type);
342d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, data_count);
343d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(NULL, data_int32);
344d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
345d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    dump_camera_metadata(m, 2);
346d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
347d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
348d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
349d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
350d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata) {
351d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
352d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 50;
353d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 450;
354d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
355d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
356d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
357d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
358d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
359d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
360d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
361d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = get_camera_metadata_compact_size(m);
362d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_LT((size_t)0, buf_size);
363d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
364d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t *buf = (uint8_t*)malloc(buf_size);
365d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
366d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
367d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m);
368d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m2);
369d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(buf, (uint8_t*)m2);
370d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_count(m),
371d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_entry_count(m2));
372d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m),
373d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m2));
374d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_capacity(m2),
375d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_entry_count(m2));
376d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_capacity(m2),
377d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m2));
378d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
379d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) {
380d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
381d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
382d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
383d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
384d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
385d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
386d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
387d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag, &type, (void**)&data, &data_count);
388d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
389d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
390d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
391d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
392d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
393d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
394d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
395d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
396d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
397d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
398d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
399d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
400d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
401d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
402d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
403d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
404d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
405d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata_extraspace) {
406d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
407d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 12;
408d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 100;
409d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
410d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t extra_space = 10;
411d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
412d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
413d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
414d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
415d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
416d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
417d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
418d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = get_camera_metadata_compact_size(m);
419d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_LT((size_t)0, buf_size);
420d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf_size += extra_space;
421d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
422d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t *buf = (uint8_t*)malloc(buf_size);
423d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
424d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
425d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m);
426d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m2);
427d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(buf, (uint8_t*)m2);
428d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_count(m),
429d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_entry_count(m2));
430d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m),
431d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m2));
432d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_capacity(m2),
433d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_entry_count(m2));
434d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_capacity(m2),
435d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m2));
436d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(buf + buf_size - extra_space,
437d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            (uint8_t*)m2 + get_camera_metadata_size(m2) );
438d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
439d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) {
440d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
441d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
442d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
443d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
444d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
445d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
446d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
447d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag, &type, (void**)&data, &data_count);
448d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
449d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
450d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
451d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
452d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
453d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
454d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
455d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
456d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
457d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
458d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
459d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
460d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
461d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
462d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
463d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
464d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
465d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata_nospace) {
466d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
467d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
468d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
469d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
470d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
471d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
472d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
473d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
474d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
475d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
476d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    size_t buf_size = get_camera_metadata_compact_size(m);
477d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_LT((size_t)0, buf_size);
478d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
479d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    buf_size--;
480d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
481d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t *buf = (uint8_t*)malloc(buf_size);
482d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(buf);
483d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
484d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m);
485d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(m2);
486d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
487d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free(buf);
488d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
489d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
490d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
491d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
492d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata) {
493d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
494d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
495d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
496d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
497d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
498d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
499d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
500d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
501d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
502d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
503d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = NULL;
504d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
505d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m2 = allocate_camera_metadata(entry_capacity*2, data_capacity*2);
506d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m2);
507d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
508d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = append_camera_metadata(m2, m);
509d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
510d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
511d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
512d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_count(m), get_camera_metadata_entry_count(m2));
513d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m),  get_camera_metadata_data_count(m2));
514d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2));
515d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity*2,  get_camera_metadata_data_capacity(m2));
516d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
517d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) {
518d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
519d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
520d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
521d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
522d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
523d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
524d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
525d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag, &type, (void**)&data, &data_count);
526d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
527d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
528d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
529d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
530d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
531d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
532d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
533d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
534d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
535d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
536d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
537d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
538d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = append_camera_metadata(m2, m);
539d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
540d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
541d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
542d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_count(m)*2, get_camera_metadata_entry_count(m2));
543d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m)*2,  get_camera_metadata_data_count(m2));
544d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2));
545d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity*2,  get_camera_metadata_data_capacity(m2));
546d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
547d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) {
548d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
549d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
550d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
551d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
552d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
553d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
554d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
555d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i % entry_capacity, &tag, &type, (void**)&data, &data_count);
556d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
557d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
558d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
559d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
560d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
561d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
562d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
563d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
564d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
565d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
566d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
567d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
568d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
569d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m2);
570d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
571d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
572d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_nospace) {
573d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
574d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
575d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
576d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
577d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
578d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
579d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
580d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
581d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
582d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
583d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = NULL;
584d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
585d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m2 = allocate_camera_metadata(entry_capacity-1, data_capacity);
586d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m2);
587d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
588d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = append_camera_metadata(m2, m);
589d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
590d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
591d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m2));
592d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m2));
593d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
594d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
595d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m2);
596d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
597d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
598d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_onespace) {
599d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
600d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
601d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
602d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity2 = entry_capacity * 2 - 2;
603d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity2 = data_capacity * 2;
604d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
605d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
606d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
607d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
608d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    add_test_metadata(m, entry_capacity);
609d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
610d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m2 = NULL;
611d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
612d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m2 = allocate_camera_metadata(entry_capacity2, data_capacity2);
613d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NOT_NULL(m2);
614d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
615d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = append_camera_metadata(m2, m);
616d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
617d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
618d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
619d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_entry_count(m), get_camera_metadata_entry_count(m2));
620d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m),  get_camera_metadata_data_count(m2));
621d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2));
622d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity2,  get_camera_metadata_data_capacity(m2));
623d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
624d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) {
625d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
626d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
627d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
628d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
629d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
630d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
631d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
632d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag, &type, (void**)&data, &data_count);
633d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
634d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
635d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
636d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
637d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
638d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
639d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
640d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
641d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
642d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
643d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
644d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
645d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = append_camera_metadata(m2, m);
646d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
647d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
648d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity, get_camera_metadata_entry_count(m2));
649d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(get_camera_metadata_data_count(m),
650d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_data_count(m2));
651d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2));
652d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(data_capacity2,  get_camera_metadata_data_capacity(m2));
653d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
654d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) {
655d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint32_t tag, tag2;
656d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t type, type2;
657d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        uint8_t *data, *data2;
658d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        size_t   data_count, data_count2;
659d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
660d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        int result;
661d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m,
662d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i % entry_capacity, &tag, &type, (void**)&data, &data_count);
663d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
664d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        result = get_camera_metadata_entry(m2,
665d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                i, &tag2, &type2, (void**)&data2, &data_count2);
666d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(OK, result);
667d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(tag, tag2);
668d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(type, type2);
669d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        EXPECT_EQ(data_count, data_count2);
670d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (unsigned int j=0; j < data_count; j++) {
671d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            EXPECT_EQ(data[j], data2[j]);
672d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
673d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
674d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
675d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
676d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m2);
677d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
678d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
679d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, vendor_tags) {
680d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = NULL;
681d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t entry_capacity = 5;
682d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    const size_t data_capacity = 50;
683d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
684d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
685d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    m = allocate_camera_metadata(entry_capacity, data_capacity);
686d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
687d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t superMode = 5;
688d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
689d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            FAKEVENDOR_SENSOR_SUPERMODE,
690d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
691d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
692d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
693d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
694d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_REQUEST_METADATA_MODE,
695d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
696d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
697d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
698d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE));
699d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE));
700d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE));
701d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
702d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    set_camera_metadata_vendor_tag_ops(&fakevendor_query_ops);
703d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
704d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
705d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            FAKEVENDOR_SENSOR_SUPERMODE,
706d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
707d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
708d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
709d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
710d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_REQUEST_METADATA_MODE,
711d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
712d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
713d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
714d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
715d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            FAKEVENDOR_SCALER_END,
716d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
717d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
718d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
719d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_STREQ("com.fakevendor.sensor",
720d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE));
721d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_STREQ("superMode",
722d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE));
723d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(TYPE_BYTE,
724d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE));
725d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
726d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_STREQ("com.fakevendor.scaler",
727d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            get_camera_metadata_section_name(FAKEVENDOR_SCALER_END));
728d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SCALER_END));
729d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SCALER_END));
730d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
731d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    set_camera_metadata_vendor_tag_ops(NULL);
732d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
733d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
734d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            FAKEVENDOR_SENSOR_SUPERMODE,
735d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
736d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(ERROR, result);
737d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
738d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    result = add_camera_metadata_entry(m,
739d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ANDROID_REQUEST_METADATA_MODE,
740d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            &superMode, 1);
741d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(OK, result);
742d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
743d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE));
744d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE));
745d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE));
746d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
747d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
748d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
749d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
750d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_all_tags) {
751d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int total_tag_count = 0;
752d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (int i = 0; i < ANDROID_SECTION_COUNT; i++) {
753d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        total_tag_count += camera_metadata_section_bounds[i][1] -
754d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                camera_metadata_section_bounds[i][0];
755d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
756d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int entry_data_count = 3;
757d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int conservative_data_space = total_tag_count * entry_data_count * 8;
758d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    uint8_t data[entry_data_count * 8];
759d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int32_t *data_int32 = (int32_t *)data;
760d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    float *data_float   = (float *)data;
761d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int64_t *data_int64 = (int64_t *)data;
762d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    double *data_double = (double *)data;
763d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_rational_t *data_rational = (camera_metadata_rational_t *)data;
764d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
765d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    camera_metadata_t *m = allocate_camera_metadata(total_tag_count, conservative_data_space);
766d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
767d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    ASSERT_NE((void*)NULL, (void*)m);
768d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
769d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int result;
770d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
771d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    int counter = 0;
772d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    for (int i = 0; i < ANDROID_SECTION_COUNT; i++) {
773d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        for (uint32_t tag = camera_metadata_section_bounds[i][0];
774d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                tag < camera_metadata_section_bounds[i][1];
775d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala             tag++, counter++) {
776d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            int type = get_camera_metadata_tag_type(tag);
777d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ASSERT_NE(-1, type);
778d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
779d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            switch (type) {
780d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_BYTE:
781d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data[0] = tag & 0xFF;
782d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data[1] = (tag >> 8) & 0xFF;
783d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data[2] = (tag >> 16) & 0xFF;
784d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
785d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_INT32:
786d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int32[0] = tag;
787d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int32[1] = i;
788d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int32[2] = counter;
789d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
790d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_FLOAT:
791d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_float[0] = tag;
792d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_float[1] = i;
793d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_float[2] = counter / (float)total_tag_count;
794d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
795d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_INT64:
796d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int64[0] = (int64_t)tag | ( (int64_t)tag << 32);
797d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int64[1] = i;
798d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_int64[2] = counter;
799d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
800d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_DOUBLE:
801d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_double[0] = tag;
802d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_double[1] = i;
803d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_double[2] = counter / (double)total_tag_count;
804d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
805d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                case TYPE_RATIONAL:
806d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[0].numerator = tag;
807d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[0].denominator = 1;
808d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[1].numerator = i;
809d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[1].denominator = 1;
810d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[2].numerator = counter;
811d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data_rational[2].denominator = total_tag_count;
812d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
813d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                default:
814d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    FAIL() << "Unknown type field encountered:" << type;
815d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    break;
816d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            }
817d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            result = add_camera_metadata_entry(m,
818d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    tag,
819d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    data,
820d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala                    entry_data_count);
821d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala            ASSERT_EQ(OK, result);
822d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
823d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala        }
824d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    }
825d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
826d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    dump_camera_metadata(m, 2);
827d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala
828d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala    free_camera_metadata(m);
829d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala}
830