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