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 17f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala#define LOG_NDEBUG 1 18f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala#define LOG_TAG "camera_metadata_tests" 19f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 2094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala#include <errno.h> 2194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 2208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin#include <vector> 2308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin#include <algorithm> 248198c3b752e2fb00acb15345496e2a03eefb5ffbMark Salyzyn 258198c3b752e2fb00acb15345496e2a03eefb5ffbMark Salyzyn#include <gtest/gtest.h> 264df5a2bb302fb5cb61ab48dff7fa2b1984b6ced8Mark Salyzyn#include <log/log.h> 278198c3b752e2fb00acb15345496e2a03eefb5ffbMark Salyzyn 28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "system/camera_metadata.h" 299c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk#include "camera_metadata_hidden.h" 30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "camera_metadata_tests_fake_vendor.h" 32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 33d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NULL(x) EXPECT_EQ((void*)0, x) 34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NOT_NULL(x) EXPECT_NE((void*)0, x) 357e59ded046175c20258be150cbc94be085924d28Zhijun He#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 37d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define OK 0 38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define ERROR 1 3994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala#define NOT_FOUND (-ENOENT) 40d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 41555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin#define _Alignas(T) \ 42555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ({struct _AlignasStruct { char c; T field; }; \ 43555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin offsetof(struct _AlignasStruct, field); }) 44555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 45d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin#define FINISH_USING_CAMERA_METADATA(m) \ 46d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); \ 47d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin free_camera_metadata(m); \ 48555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_normal) { 50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 60d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 62d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nodata) { 66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(1, 0); 69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)1, get_camera_metadata_entry_capacity(m)); 73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 74d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(m)); 75d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 76d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 77d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 78d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 79246a1adacce4854b91adc9635887453ba4f58e51Zhijun HeTEST(camera_metadata, clone_nodata) { 80246a1adacce4854b91adc9635887453ba4f58e51Zhijun He camera_metadata_t *src = NULL; 81246a1adacce4854b91adc9635887453ba4f58e51Zhijun He camera_metadata_t *copy = NULL; 82246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 83246a1adacce4854b91adc9635887453ba4f58e51Zhijun He src = allocate_camera_metadata(10, 0); 84246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 85246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)src); 86246a1adacce4854b91adc9635887453ba4f58e51Zhijun He copy = clone_camera_metadata(src); 87246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)copy); 88246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(copy)); 89246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_capacity(copy)); 90246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_count(copy)); 91246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(copy)); 92246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 93246a1adacce4854b91adc9635887453ba4f58e51Zhijun He FINISH_USING_CAMERA_METADATA(src); 94246a1adacce4854b91adc9635887453ba4f58e51Zhijun He FINISH_USING_CAMERA_METADATA(copy); 95246a1adacce4854b91adc9635887453ba4f58e51Zhijun He} 96246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 97d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nothing) { 98d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 99d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 100d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(0, 0); 101d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 102246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)m); 103246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 104246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_capacity(m)); 105246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 106246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(m)); 107d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 108d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 109d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_normal) { 110d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 111d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala void *buf = NULL; 112d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 113d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 114d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 115d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 118d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 119d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_TRUE(buf_size > 0); 120d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 121d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = malloc(buf_size); 122d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 123d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 124d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf, (uint8_t*)m); 128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 131d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 132d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 133d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, &buf_size)); 134d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_nospace) { 139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala void *buf = NULL; 141d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 142d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 143d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_GT(buf_size, (size_t)0); 149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size--; 151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = malloc(buf_size); 153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 156d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 157d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 158d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(m); 159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_extraspace) { 164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = NULL; 166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t extra_space = 10; 170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 172d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 173d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 174d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_GT(buf_size, (size_t)0); 175d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 176d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size += extra_space; 177d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 178d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = (uint8_t*)malloc(buf_size); 179d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 180d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 181d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 182d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 183d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 184d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((uint8_t*)m, buf); 185d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 186d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 187d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 188d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 189d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf + buf_size - extra_space, (uint8_t*)m + get_camera_metadata_size(m)); 190d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 191d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, &buf_size)); 192d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, get_size) { 197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity), 204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_size(m) ); 205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(0,0), 207d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_compact_size(m) ); 208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 209d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_normal) { 213d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 2157e59ded046175c20258be150cbc94be085924d28Zhijun He const size_t data_capacity = 128; 216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 217d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 218d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 219d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 220d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_used = 0; 223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t entries_used = 0; 224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // INT64 226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time = 1000000000; 228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &exposure_time, 1); 231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 234d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 235d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 236d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 237d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 238d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // INT32 239d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 240d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t sensitivity = 800; 241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &sensitivity, 1); 244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_SENSITIVITY), 1); 247d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 248d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 249d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 250d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // FLOAT 252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala float focusDistance = 0.5f; 254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &focusDistance, 1); 257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 258d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 259d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_LENS_FOCUS_DISTANCE), 1); 260d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 261d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 262d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 263d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 264d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Array of FLOAT 265d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 2667e59ded046175c20258be150cbc94be085924d28Zhijun He float colorCorrectionGains[] = {1.69f, 1.00f, 1.00f, 2.41f}; 2677e59ded046175c20258be150cbc94be085924d28Zhijun He result = add_camera_metadata_entry(m, 2687e59ded046175c20258be150cbc94be085924d28Zhijun He ANDROID_COLOR_CORRECTION_GAINS, 2697e59ded046175c20258be150cbc94be085924d28Zhijun He colorCorrectionGains, ARRAY_SIZE(colorCorrectionGains)); 2707e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, result); 2717e59ded046175c20258be150cbc94be085924d28Zhijun He data_used += calculate_camera_metadata_entry_data_size( 2727e59ded046175c20258be150cbc94be085924d28Zhijun He get_camera_metadata_tag_type(ANDROID_COLOR_CORRECTION_GAINS), 2737e59ded046175c20258be150cbc94be085924d28Zhijun He ARRAY_SIZE(colorCorrectionGains)); 2747e59ded046175c20258be150cbc94be085924d28Zhijun He entries_used++; 2757e59ded046175c20258be150cbc94be085924d28Zhijun He 2767e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 2777e59ded046175c20258be150cbc94be085924d28Zhijun He 2787e59ded046175c20258be150cbc94be085924d28Zhijun He 2797e59ded046175c20258be150cbc94be085924d28Zhijun He // Array of RATIONAL 2807e59ded046175c20258be150cbc94be085924d28Zhijun He 2817e59ded046175c20258be150cbc94be085924d28Zhijun He camera_metadata_rational_t colorTransform[] = { 2827e59ded046175c20258be150cbc94be085924d28Zhijun He {9, 10}, {0, 1}, {0, 1}, 2837e59ded046175c20258be150cbc94be085924d28Zhijun He {1, 5}, {1, 2}, {0, 1}, 2847e59ded046175c20258be150cbc94be085924d28Zhijun He {0, 1}, {1, 10}, {7, 10} 285d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala }; 286d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 28708b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_COLOR_CORRECTION_TRANSFORM, 2887e59ded046175c20258be150cbc94be085924d28Zhijun He colorTransform, ARRAY_SIZE(colorTransform)); 289d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 290d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 2917e59ded046175c20258be150cbc94be085924d28Zhijun He get_camera_metadata_tag_type(ANDROID_COLOR_CORRECTION_TRANSFORM), 2927e59ded046175c20258be150cbc94be085924d28Zhijun He ARRAY_SIZE(colorTransform)); 293d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 294d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 295d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 296d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 297d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Check added entries 298d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 2997e59ded046175c20258be150cbc94be085924d28Zhijun He size_t index = 0; 300f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry entry; 3017e59ded046175c20258be150cbc94be085924d28Zhijun He 302d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3037e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 304d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3058baea5c0846f99e9305ffddb174e6cbb2d100a55Dan Albert EXPECT_EQ(index, entry.index); 306f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, entry.tag); 307f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, entry.type); 308f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 309f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposure_time, *entry.data.i64); 3107e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 311d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 312d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3137e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 314d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3157e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 316f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_SENSITIVITY, entry.tag); 317f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, entry.type); 318f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 319f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(sensitivity, *entry.data.i32); 3207e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 321d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 322d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3237e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 324d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3257e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 326f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 327f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 328f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 329f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focusDistance, *entry.data.f); 3307e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 331d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 332d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3337e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 334d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3357e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 3367e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ANDROID_COLOR_CORRECTION_GAINS, entry.tag); 337f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 3387e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ARRAY_SIZE(colorCorrectionGains), entry.count); 3397e59ded046175c20258be150cbc94be085924d28Zhijun He for (unsigned int i=0; i < entry.count; i++) { 3407e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorCorrectionGains[i], entry.data.f[i]); 3417e59ded046175c20258be150cbc94be085924d28Zhijun He } 3427e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 3437e59ded046175c20258be150cbc94be085924d28Zhijun He 3447e59ded046175c20258be150cbc94be085924d28Zhijun He result = get_camera_metadata_entry(m, 3457e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 3467e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, result); 3477e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 3487e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ANDROID_COLOR_CORRECTION_TRANSFORM, entry.tag); 3497e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(TYPE_RATIONAL, entry.type); 3507e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ARRAY_SIZE(colorTransform), entry.count); 351f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int i=0; i < entry.count; i++) { 3527e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorTransform[i].numerator, entry.data.r[i].numerator); 3537e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorTransform[i].denominator, entry.data.r[i].denominator); 354d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 3557e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 356d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 357d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity), 358d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_size(m) ); 359d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 360d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entries_used, data_used), 361d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_compact_size(m) ); 362d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 363f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 364f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 365f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 366d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 367d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 368d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 369d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 370d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid add_test_metadata(camera_metadata_t *m, int entry_count) { 371d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 372d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 373d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 374d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 375d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_used = 0; 376d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t entries_used = 0; 377d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time; 378d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i=0; i < entry_count; i++ ) { 379d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala exposure_time = 100 + i * 100; 380d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 381d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 382d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &exposure_time, 1); 383d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 384d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 385d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 386d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 387d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 388d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_used, get_camera_metadata_data_count(m)); 389d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entries_used, get_camera_metadata_entry_count(m)); 3903154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala EXPECT_GE(get_camera_metadata_data_capacity(m), 391d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m)); 392d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 393d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 394d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_toomany) { 395d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 396d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 397d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 398d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 399d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 400d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 401d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 402d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 403d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 404d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t sensitivity = 100; 405d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 406d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 407d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &sensitivity, 1); 408d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 409d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 410d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 411f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry entry; 412d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < entry_capacity; i++) { 413d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time = 100 + i * 100; 414d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 415f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i, &entry); 416d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 417f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, entry.index); 418f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, entry.tag); 419f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, entry.type); 420f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 421f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposure_time, *entry.data.i64); 422d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 423f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.tag = 1234; 424f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.type = 56; 425f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.data.u8 = NULL; 426f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.count = 7890; 427d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 428f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry_capacity, &entry); 429d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 430f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((uint32_t)1234, entry.tag); 431f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((uint8_t)56, entry.type); 432f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(NULL, entry.data.u8); 433f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)7890, entry.count); 434d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 435f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 436f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 437f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 438d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 439d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 440d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 441d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 4423154036acd2cc809388d08ff856198a8512f05f0Eino-Ville TalvalaTEST(camera_metadata, add_too_much_data) { 4433154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala camera_metadata_t *m = NULL; 4443154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala const size_t entry_capacity = 5; 4453154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala int result; 4463154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala size_t data_used = entry_capacity * calculate_camera_metadata_entry_data_size( 4473154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 4483154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity + 1, data_used); 4493154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4503154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4513154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala add_test_metadata(m, entry_capacity); 4523154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4533154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala int64_t exposure_time = 12345; 4543154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala result = add_camera_metadata_entry(m, 4553154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 4563154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala &exposure_time, 1); 4573154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala EXPECT_EQ(ERROR, result); 4583154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 459d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 4603154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala} 4613154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 462d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata) { 463d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 464d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 50; 465d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 450; 466d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 467d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 468d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 469d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 470d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 471d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 472d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 473d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 474d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 475d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 476d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 477d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 478d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 479d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf, (uint8_t*)m2); 480d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 481d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 482d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 483d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 484d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_capacity(m2), 485d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 486d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_capacity(m2), 487d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 488d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 489d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 490f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 491d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 492f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 493d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 494f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 495d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 496f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 497f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 498f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 499f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 500f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 501f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 502f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 503f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 504d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 505d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 506d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 507d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &buf_size)); 508d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 509d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 510d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 511d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 512d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 513d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata_extraspace) { 514d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 515d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 12; 516d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 100; 517d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 518d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t extra_space = 10; 519d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 520d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 521d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 522d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 523d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 524d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 525d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 526d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size += extra_space; 527d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 528d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 529d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 530d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 531d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 532d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 533d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf, (uint8_t*)m2); 534d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 535d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 536d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 537d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 538d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_capacity(m2), 539d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 540d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_capacity(m2), 541d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 542d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf + buf_size - extra_space, 543d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala (uint8_t*)m2 + get_camera_metadata_size(m2) ); 544d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 545d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 546f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 547d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 548d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 549f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 550d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 551f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 552f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 553d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 554f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 555f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 556f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 557f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 558f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 559f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 560f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 561f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 562d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 563d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 564d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 565d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &buf_size)); 566d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 567d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 568d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 569d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 570d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 571d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata_nospace) { 572d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 573d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 574d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 575d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 576d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 577d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 578d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 579d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 580d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 581d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 582d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 583d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size--; 584d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 585d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 586d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 587d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 588d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 589d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(m2); 590d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 591d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 592d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 593d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 594d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 595d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 596d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata) { 597d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 598d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 599d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 600d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 601d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 602d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 603d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 604d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 605d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 606d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 607d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 608d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 609d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity*2, data_capacity*2); 610d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 611d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 612d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 613d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 614d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 615d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 616f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 617f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 618f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 619f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 620d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2)); 621d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity*2, get_camera_metadata_data_capacity(m2)); 622d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 623d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 624f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 625d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 626f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 627d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 628f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 629f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 630d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 631f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 632f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 633f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 634f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 635f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 636f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 637f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 638f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 639d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 640d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 641d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 642d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 643d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 644d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 645d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 646f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m)*2, 647f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 648f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m)*2, 649f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 650d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2)); 651d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity*2, get_camera_metadata_data_capacity(m2)); 652d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 653d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) { 654f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 655d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 656d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 657d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 658f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i % entry_capacity, &e1); 659d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 660f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i % entry_capacity, e1.index); 661d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m2, 662f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i, &e2); 663d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 664f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 665f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 666f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 667f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 668f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 669f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 670f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 671f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 672d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 673d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 674d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 675d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 676d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 677d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 678d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 679d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_nospace) { 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 684d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 685d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 686d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 687d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 688d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 689d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 690d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 691d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 692d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity-1, data_capacity); 693d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 694d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 695d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 696d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 697d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 698d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m2)); 699d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m2)); 700d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 701d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 702d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 703d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 704d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 705d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_onespace) { 706d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 707d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 708d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 709d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity2 = entry_capacity * 2 - 2; 710d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity2 = data_capacity * 2; 711d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 712d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 713d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 714d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 715d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 716d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 717d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 718d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 719d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity2, data_capacity2); 720d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 721d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 722d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 723d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 724d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 725d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 726f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 727f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 728f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 729f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 730d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2)); 731d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity2, get_camera_metadata_data_capacity(m2)); 732d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 733d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 734f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 735d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 736d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 737f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 738d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 739f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 740f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 741d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 742f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 743f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 744f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 745f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 746f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 747f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 748f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 749f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 750d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 751d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 752d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 753d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 754d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 755d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 756d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_count(m2)); 757d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 758d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 759d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2)); 760d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity2, get_camera_metadata_data_capacity(m2)); 761d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 762d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) { 763f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 764d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 765d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 766d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 767f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i % entry_capacity, &e1); 768d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 769f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i % entry_capacity, e1.index); 770f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 771d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 772f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 773f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 774f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 775f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 776f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 777f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 778f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 779f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 780d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 781d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 782d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 783d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 784d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 785d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 786d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 787d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, vendor_tags) { 788d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 789d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 790d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 791d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 792d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 793d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 794d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 795d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t superMode = 5; 796d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 797d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 798d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 799d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 800d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 801d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 802d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 803d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 804d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 805d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 806d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 807d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 808d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 809d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 810d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 811d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 8129c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk set_camera_metadata_vendor_ops(&fakevendor_ops); 813d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 814d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 815d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 816d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 817d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 818d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 819d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 820d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 821d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 822d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 823d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 824d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 825d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 826d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 827d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SCALER_END, 828d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 829d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 830d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 831d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 832d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("com.fakevendor.sensor", 833d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 834d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("superMode", 835d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 836d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(TYPE_BYTE, 837d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 838d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 839d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("com.fakevendor.scaler", 840d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_section_name(FAKEVENDOR_SCALER_END)); 841d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SCALER_END)); 842d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SCALER_END)); 843d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 8449c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk set_camera_metadata_vendor_ops(NULL); 845d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin // TODO: fix vendor ops. Then the below 3 validations should fail. 846d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 847d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 848d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 849d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 850d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 851d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 852d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 853d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 854d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 855d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 856d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 857d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 858d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 859d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 860d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 861d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 862d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 863d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 864d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin // Remove all vendor entries so validation passes 865d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin { 866d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin camera_metadata_ro_entry_t entry; 867d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, find_camera_metadata_ro_entry(m, 868d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FAKEVENDOR_SENSOR_SUPERMODE, 869d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin &entry)); 870d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, delete_camera_metadata_entry(m, entry.index)); 871d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin } 872d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 873d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 874d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 875d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 876d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_all_tags) { 877d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int total_tag_count = 0; 878d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i = 0; i < ANDROID_SECTION_COUNT; i++) { 879d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala total_tag_count += camera_metadata_section_bounds[i][1] - 880d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_section_bounds[i][0]; 881d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 882d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int entry_data_count = 3; 883d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int conservative_data_space = total_tag_count * entry_data_count * 8; 884d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t data[entry_data_count * 8]; 885d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t *data_int32 = (int32_t *)data; 886d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala float *data_float = (float *)data; 887d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t *data_int64 = (int64_t *)data; 888d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala double *data_double = (double *)data; 889f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_rational_t *data_rational = 890f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala (camera_metadata_rational_t *)data; 891d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 892f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = allocate_camera_metadata(total_tag_count, 893f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala conservative_data_space); 894d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 895d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_NE((void*)NULL, (void*)m); 896d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 897d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 898d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 899d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int counter = 0; 900d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i = 0; i < ANDROID_SECTION_COUNT; i++) { 901d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (uint32_t tag = camera_metadata_section_bounds[i][0]; 902d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag < camera_metadata_section_bounds[i][1]; 903d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag++, counter++) { 904d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int type = get_camera_metadata_tag_type(tag); 905d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_NE(-1, type); 906d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 907d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala switch (type) { 908d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_BYTE: 909d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[0] = tag & 0xFF; 910d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[1] = (tag >> 8) & 0xFF; 911d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[2] = (tag >> 16) & 0xFF; 912d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 913d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_INT32: 914d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[0] = tag; 915d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[1] = i; 916d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[2] = counter; 917d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 918d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_FLOAT: 919d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[0] = tag; 920d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[1] = i; 921d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[2] = counter / (float)total_tag_count; 922d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 923d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_INT64: 924d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[0] = (int64_t)tag | ( (int64_t)tag << 32); 925d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[1] = i; 926d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[2] = counter; 927d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 928d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_DOUBLE: 929d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[0] = tag; 930d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[1] = i; 931d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[2] = counter / (double)total_tag_count; 932d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 933d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_RATIONAL: 934d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[0].numerator = tag; 935d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[0].denominator = 1; 936d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[1].numerator = i; 937d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[1].denominator = 1; 938d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[2].numerator = counter; 939d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[2].denominator = total_tag_count; 940d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 941d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala default: 942d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAIL() << "Unknown type field encountered:" << type; 943d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 944d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 945d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 946d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag, 947d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data, 948d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entry_data_count); 949d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_EQ(OK, result); 950d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 951d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 952d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 953d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 954f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 955f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 956f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 95794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 958d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 95994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala} 96094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 96194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaTEST(camera_metadata, sort_metadata) { 96294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala camera_metadata_t *m = NULL; 96394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const size_t entry_capacity = 5; 96494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const size_t data_capacity = 100; 96594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 96694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int result; 96794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 96894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 96994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 97094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Add several unique entries in non-sorted order 97194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 9727e59ded046175c20258be150cbc94be085924d28Zhijun He camera_metadata_rational_t colorTransform[] = { 9737e59ded046175c20258be150cbc94be085924d28Zhijun He {9, 10}, {0, 1}, {0, 1}, 9747e59ded046175c20258be150cbc94be085924d28Zhijun He {1, 5}, {1, 2}, {0, 1}, 9757e59ded046175c20258be150cbc94be085924d28Zhijun He {0, 1}, {1, 10}, {7, 10} 97694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala }; 97794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 97808b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_COLOR_CORRECTION_TRANSFORM, 9797e59ded046175c20258be150cbc94be085924d28Zhijun He colorTransform, ARRAY_SIZE(colorTransform)); 98094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 98194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 98294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala float focus_distance = 0.5f; 98394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 98494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 98594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &focus_distance, 1); 98694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 98794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 98894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int64_t exposure_time = 1000000000; 98994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 99094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 99194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &exposure_time, 1); 99294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 99394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 99494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int32_t sensitivity = 800; 99594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 99694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 99794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &sensitivity, 1); 99894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 99994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 100094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Test unsorted find 1001f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t entry; 100294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 100394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 1004f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 100594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 1006f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1007f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.index); 1008f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1009f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1010f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 101194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 101294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 101308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_NOISE_REDUCTION_STRENGTH, 1014f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 101594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(NOT_FOUND, result); 1016f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.index); 1017f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1018f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1019f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1020f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 102194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 102294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Sort 1023f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 1024f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala std::cout << "Pre-sorted metadata" << std::endl; 1025f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 1026f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 102794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 102894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = sort_camera_metadata(m); 102994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 103094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 1031f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 1032f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala std::cout << "Sorted metadata" << std::endl; 1033f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 1034f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 103594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 103694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Test sorted find 103708b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin size_t lensFocusIndex = -1; 103808b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin { 103908b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::vector<uint32_t> tags; 104008b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_COLOR_CORRECTION_TRANSFORM); 104108b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_LENS_FOCUS_DISTANCE); 104208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_SENSOR_EXPOSURE_TIME); 104308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_SENSOR_SENSITIVITY); 104408b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::sort(tags.begin(), tags.end()); 104508b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin 104608b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin lensFocusIndex = 104708b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::find(tags.begin(), tags.end(), ANDROID_LENS_FOCUS_DISTANCE) 104808b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin - tags.begin(); 104908b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin } 105094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 105194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 105294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 1053f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 105494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 105508b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin EXPECT_EQ(lensFocusIndex, entry.index); 1056f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1057f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1058f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, (size_t)entry.count); 1059f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 106094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 106194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 106208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_NOISE_REDUCTION_STRENGTH, 1063f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 106494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(NOT_FOUND, result); 106508b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin EXPECT_EQ(lensFocusIndex, entry.index); 1066f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1067f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1068f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1069f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 107094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 1071d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 1072d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1073d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 1074f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1075f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaTEST(camera_metadata, delete_metadata) { 1076f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = NULL; 1077f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t entry_capacity = 50; 1078f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t data_capacity = 450; 1079f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1080f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int result; 1081f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1082f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1083f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1084f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_entries = 5; 1085f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t data_per_entry = 1086f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1087f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_data = num_entries * data_per_entry; 1088f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1089f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete an entry with data 1090f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1091f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala add_test_metadata(m, num_entries); 1092f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1093f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1094f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1095f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 1); 1096f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1097f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1098f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1099f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1100f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1101f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1102f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1103f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1104f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1105f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1106f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1107f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1108f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1109f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1110f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1111f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1112f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1113f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1114f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e; 1115f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e); 1116f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1117f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e.index); 1118f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1119f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1120f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1121f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e.data.i64); 1122f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1123f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1124f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete an entry with no data, at end of array 1125f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1126f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t frameCount = 12; 1127f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1128f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1129f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1130f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1131f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1132f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1133f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1134f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1135f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1136f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1137f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1138f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e; 1139f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 4, &e); 1140f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1141f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1142f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.index); 1143f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1144f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1145f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1146f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1147f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1148f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1149f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1150f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1151f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1152f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1153f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1154f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1155f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1156f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1157f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1158f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1159f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1160f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 4, &e); 1161f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1162f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1163f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1164f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1165f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1166f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1167f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1168f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete with extra data on end of array 1169f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 3); 1170f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1171f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1172f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1173f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1174f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1175f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1176f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1177f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1178f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1179f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1180f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1181f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1182f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1183f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1184f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1185f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete without extra data in front of array 1186f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1187f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala frameCount = 1001; 1188f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1189f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1190f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1191f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1192f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1193f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1194f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1195f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1196f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1197f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1198f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1199f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = sort_camera_metadata(m); 1200f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1201f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1202f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1203f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1204f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1205f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1206f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1207f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1208f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1209f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1210f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1211f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, e.index); 1212f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1213f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1214f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1215f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1216f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1217f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1218f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1219f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1220f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1221f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1222f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1223f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1224f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1225f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1226f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1227f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1228f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1229f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1230f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} 1231f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1232f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaTEST(camera_metadata, update_metadata) { 1233f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = NULL; 1234f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t entry_capacity = 50; 1235f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t data_capacity = 450; 1236f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1237f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int result; 1238f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1239f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1240f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1241f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_entries = 5; 1242f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t data_per_entry = 1243f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1244f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_data = num_entries * data_per_entry; 1245f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1246f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala add_test_metadata(m, num_entries); 1247f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1248f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1249f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1250f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with same-size data, doesn't fit in entry 1251f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1252f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t newExposureTime = 1000; 1253f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e; 1254f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1255f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newExposureTime, 1, &e); 1256f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1257f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1258f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1259f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1260f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1261f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1262f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1263f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1264f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1265f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1266f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1267f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1268f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1269f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1270f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1271f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1272f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1273f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1274f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1275f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1276f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1277f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1278f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1279f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1280f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1281f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1282f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1283f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1284f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1285f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with larger data 1286f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t newExposures[2] = { 5000, 6000 }; 1287f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1288f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, newExposures, 2, &e); 1289f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1290f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += data_per_entry; 1291f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1292f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1293f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1294f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1295f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1296f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1297f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1298f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1299f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1300f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1301f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1302f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1303f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1304f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1305f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1306f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1307f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1308f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1309f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1310f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1311f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1312f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1313f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1314f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1315f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1316f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1317f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1318f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1319f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1320f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1321f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1322f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1323f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1324f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with smaller data 1325f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newExposureTime = 100; 1326f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1327f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newExposureTime, 1, &e); 1328f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1329f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1330f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1331f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1332f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1333f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1334f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1335f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1336f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1337f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1338f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1339f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1340f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1341f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1342f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1343f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1344f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1345f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1346f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1347f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1348f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1349f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1350f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1351f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1352f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1353f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1354f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1355f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1356f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1357f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1358f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1359f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1360f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1361f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1362f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with size fitting in entry 1363f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1364f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t frameCount = 1001; 1365f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1366f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1367f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1368f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1369f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1370f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1371f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1372f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1373f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1374f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1375f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1376f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = sort_camera_metadata(m); 1377f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1378f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1379f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1380f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1381f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1382f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1383f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1384f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1385f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1386f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1387f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1388f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t newFrameCount = 0x12349876; 1389f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1390f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1391f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1392f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1393f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1394f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1395f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1396f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1397f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1398f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1399f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1400f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1401f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1402f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1403f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1404f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1405f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1406f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1407f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1408f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1409f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1410f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1411f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1412f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1413f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1414f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1415f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1416f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1417f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1418f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1419f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1420f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update to bigger than entry 1421f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1422f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t newFrameCounts[4] = { 0x0, 0x1, 0x10, 0x100 }; 1423f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1424f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1425f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCounts, 4, &e); 1426f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1427f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1428f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1429f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += calculate_camera_metadata_entry_data_size(TYPE_INT32, 1430f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 4); 1431f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1432f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1433f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1434f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1435f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1436f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1437f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1438f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.count); 1439f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[0], e.data.i32[0]); 1440f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[1], e.data.i32[1]); 1441f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[2], e.data.i32[2]); 1442f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[3], e.data.i32[3]); 1443f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1444f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1445f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1446f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1447f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1448f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1449f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1450f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1451f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1452f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1453f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.count); 1454f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[0], e.data.i32[0]); 1455f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[1], e.data.i32[1]); 1456f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[2], e.data.i32[2]); 1457f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[3], e.data.i32[3]); 1458f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1459f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1460f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1461f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1462f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1463f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1464f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1465f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1466f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1467f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1468f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1469f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1470f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update to smaller than entry 1471f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1472f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1473f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1474f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1475f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1476f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= camera_metadata_type_size[TYPE_INT32] * 4; 1477f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1478f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1479f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1480f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1481f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1482f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1483f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1484f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1485f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1486f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1487f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1488f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1489f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1490f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1491f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1492f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1493f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1494f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1495f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1496f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1497f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1498f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1499f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1500f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1501f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1502f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1503f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1504f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1505f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1506f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1507f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1508f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Setup new buffer with no spare data space 1509f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1510f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1511f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, newExposures, 2, &e); 1512f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1513f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1514f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += data_per_entry; 1515f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1516f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1517f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1518f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1519f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1520f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1521f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1522f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1523f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1524f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1525f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1526f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m2; 1527f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m2 = allocate_camera_metadata(get_camera_metadata_entry_count(m), 1528f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m)); 1529f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_NOT_NULL(m2); 1530f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1531f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = append_camera_metadata(m2, m); 1532f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1533f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1534f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1535f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1536f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1537f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1538f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1539f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1540f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1541f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1542f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1543f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1544f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no more room 1545f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1546f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1547f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCounts, 4, &e); 1548f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1549f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1550f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1551f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1552f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1553f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1554f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1555f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1556f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1557f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1558f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1559f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but change fits into entry 1560f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1561f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newFrameCount = 5; 1562f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1563f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1564f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1565f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1566f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1567f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1568f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1569f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1570f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1571f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1572f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1573f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1574f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1575f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1576f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1577f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1578f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1579f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1580f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1581f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1582f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1583f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1584f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1585f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, 1, &e); 1586f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1587f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1588f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1589f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1590f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1591f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1592f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1593f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1594f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1595f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1596f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1597f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1598f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1599f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1600f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1601f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1602f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1603f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1604f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but data size doesn't change 1605f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1606f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newExposures[0] = 1000; 1607f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1608f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1609f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, newExposures, 2, &e); 1610f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1611f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1612f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1613f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1614f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1615f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1616f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1617f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1618f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1619f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1620f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1621f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1622f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1623f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1624f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1625f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1626f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1627f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1628f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1629f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1630f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1631f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1632f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1633f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1634f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1635f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1636f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1637f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1638f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1639f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1640f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1641f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1642f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1643f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but data size shrinks 1644f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1645f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1646f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, &newExposureTime, 1, &e); 1647f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1648f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1649f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= calculate_camera_metadata_entry_data_size(TYPE_INT64, 2); 1650f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1651f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1652f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1653f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1654f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1655f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1656f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1657f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1658f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1659f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, e.data.i64[0]); 1660f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1661f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1662f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1663f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1664f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1665f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1666f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1667f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1668f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1669f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1670f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1671f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1672f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1673f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1674f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1675f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1676f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1677f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1678f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1679f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1680f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1681f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1682f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} 168398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 1684b10d56ad43a91924d3666127963e5fdce725389cEino-Ville TalvalaTEST(camera_metadata, memcpy) { 1685b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_t *m = NULL; 1686b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala const size_t entry_capacity = 50; 1687b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala const size_t data_capacity = 450; 1688b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1689b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala int result; 1690b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1691b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1692b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1693b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala add_test_metadata(m, 5); 1694b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1695d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin size_t m_size = get_camera_metadata_size(m); 1696d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin uint8_t *dst = new uint8_t[m_size]; 1697b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1698d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin memcpy(dst, m, m_size); 1699b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1700b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_t *m2 = reinterpret_cast<camera_metadata_t*>(dst); 1701b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1702b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(get_camera_metadata_size(m), 1703b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_size(m2)); 1704b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_compact_size(m), 1705b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_compact_size(m2)); 1706b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(get_camera_metadata_entry_count(m), 1707b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_entry_count(m2)); 1708b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_capacity(m), 1709b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_entry_capacity(m2)); 1710b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 1711b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_data_count(m2)); 1712b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_capacity(m), 1713b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_data_capacity(m2)); 1714b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1715b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_entry_t e1, e2; 1716b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala for (size_t i = 0; i < get_camera_metadata_entry_count(m); i++) { 1717b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 1718b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1719b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1720b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1721b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1722b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1723b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1724b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1725b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.count, e2.count); 1726b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1727b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_TRUE(!memcmp(e1.data.u8, e2.data.u8, 1728b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_type_size[e1.type] * e1.count)); 1729b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala } 1730b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1731b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala // Make sure updating one metadata buffer doesn't change the other 1732b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1733b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala int64_t double_exposure_time[] = { 100, 200 }; 1734b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1735b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = update_camera_metadata_entry(m, 0, 1736b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time, 1737b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala sizeof(double_exposure_time)/sizeof(int64_t), NULL); 1738b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(OK, result); 1739b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1740b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, 0, &e1); 1741b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1742b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, 0, &e2); 1743b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1744b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1745b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1746b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1747b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1748b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e1.count); 1749b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)1, e2.count); 1750b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e1.data.i64[0]); 1751b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e1.data.i64[1]); 1752b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e2.data.i64[0]); 1753b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1754b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala // And in the reverse direction as well 1755b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1756b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time[0] = 300; 1757b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = update_camera_metadata_entry(m2, 0, 1758b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time, 1759b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala sizeof(double_exposure_time)/sizeof(int64_t), NULL); 1760b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(OK, result); 1761b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1762b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, 0, &e1); 1763b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1764b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, 0, &e2); 1765b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1766b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1767b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1768b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1769b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1770b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e1.count); 1771b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e2.count); 1772b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e1.data.i64[0]); 1773b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e1.data.i64[1]); 1774b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(300, e2.data.i64[0]); 1775b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e2.data.i64[1]); 1776b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1777d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &m_size)); 1778d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 17798baea5c0846f99e9305ffddb174e6cbb2d100a55Dan Albert delete[] dst; 1780d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1781b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala} 1782555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1783555aac882ed63e70019c78ccc58032a5be0f58ecIgor MurashkinTEST(camera_metadata, data_alignment) { 1784555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // Verify that when we store the data, the data aligned as we expect 1785555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_t *m = NULL; 1786555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t entry_capacity = 50; 1787555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t data_capacity = 450; 1788555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin char dummy_data[data_capacity] = {0,}; 1789555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1790555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin int m_types[] = { 1791555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_BYTE, 1792555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_INT32, 1793555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_FLOAT, 1794555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_INT64, 1795555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_DOUBLE, 1796555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_RATIONAL 1797555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1798555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t (&m_type_sizes)[NUM_TYPES] = camera_metadata_type_size; 1799555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin size_t m_type_align[] = { 1800555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(uint8_t), // BYTE 1801555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(int32_t), // INT32 1802555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(float), // FLOAT 1803555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(int64_t), // INT64 1804555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(double), // DOUBLE 1805555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(camera_metadata_rational_t), // RATIONAL 1806555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1807555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* arbitrary tags. the important thing is that their type 1808555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin corresponds to m_type_sizes[i] 1809555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1810555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin int m_type_tags[] = { 1811555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_REQUEST_TYPE, 1812555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_REQUEST_ID, 1813555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_LENS_FOCUS_DISTANCE, 1814555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_SENSOR_EXPOSURE_TIME, 1815555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_JPEG_GPS_COORDINATES, 1816f94330452c56b7f6a513f377d3fc20fabec389c1Eino-Ville Talvala ANDROID_CONTROL_AE_COMPENSATION_STEP 1817555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1818555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1819555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* 1820555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin if the asserts fail, its because we added more types. 1821555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin this means the test should be updated to include more types. 1822555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1823555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_types)/sizeof(m_types[0])); 1824555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_type_align)/sizeof(m_type_align[0])); 1825555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_type_tags)/sizeof(m_type_tags[0])); 1826555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1827555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (int m_type = 0; m_type < (int)NUM_TYPES; ++m_type) { 1828555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1829555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(m_types[m_type], 1830555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin get_camera_metadata_tag_type(m_type_tags[m_type])); 1831555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1832555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // misalignment possibilities are [0,type_size) for any type pointer 1833555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (size_t i = 0; i < m_type_sizes[m_type]; ++i) { 1834555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1835555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* data_count = 1, we may store data in the index. 1836555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin data_count = 10, we will store data separately 1837555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1838555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (int data_count = 1; data_count <= 10; data_count += 9) { 1839555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1840555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin m = allocate_camera_metadata(entry_capacity, data_capacity); 1841555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1842555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // add dummy data to test various different padding requirements 1843555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1844555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin add_camera_metadata_entry(m, 1845555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin m_type_tags[TYPE_BYTE], 1846555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &dummy_data[0], 1847555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin data_count + i)); 1848555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // insert the type we care to test 1849555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1850555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin add_camera_metadata_entry(m, m_type_tags[m_type], 1851555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &dummy_data[0], data_count)); 1852555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1853555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // now check the alignment for our desired type. it should be ok 1854555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_ro_entry_t entry = camera_metadata_ro_entry_t(); 1855555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1856555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin find_camera_metadata_ro_entry(m, m_type_tags[m_type], 1857555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &entry)); 1858555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1859555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin void* data_ptr = (void*)entry.data.u8; 1860555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin void* aligned_ptr = (void*)((uintptr_t)data_ptr & ~(m_type_align[m_type] - 1)); 1861555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin EXPECT_EQ(aligned_ptr, data_ptr) << 1862555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin "Wrong alignment for type " << 1863555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_type_names[m_type] << 1864555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " with " << (data_count + i) << " dummy bytes and " << 1865555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " data_count " << data_count << 1866555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " expected alignment was: " << m_type_align[m_type]; 1867555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1868d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1869555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1870555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1871555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1872555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin} 18730b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18740b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville TalvalaTEST(camera_metadata, buffer_alignment) { 18750b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala // Verify that misaligned metadata buffers only fail VALIDATION_SHIFTED, nothing else 18760b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala const size_t entry_capacity = 50; 18770b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala const size_t data_capacity = 450; 18780b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala const size_t offsetRange = 16; 18790b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala const uint32_t validAlignment = 8; 18800b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18810b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala camera_metadata_t *m = NULL; 18820b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 18830b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18840b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala add_test_metadata(m, 15); 18850b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18860b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala size_t m_size = get_camera_metadata_size(m); 18870b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala size_t dst_size = m_size + offsetRange; 18880b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala uint8_t *dst = new uint8_t[dst_size]; 18890b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18900b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala for (size_t i = 0; i < offsetRange; i++) { 18910b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala memset(dst, 0, dst_size); 18920b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala memcpy(dst + i, m, m_size); 18930b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala camera_metadata_t *m_shifted = (camera_metadata_t*)(dst + i); 18940b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 18950b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala int err = validate_camera_metadata_structure(m_shifted, &m_size); 18960b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala if (i % validAlignment == 0) { 18970b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala ASSERT_EQ(OK, err) << "For alignment shift " << i << ", expected OK" ; 18980b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala } else { 18990b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala ASSERT_EQ(CAMERA_METADATA_VALIDATION_SHIFTED, err) << 19000b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala "For alignment shift " << i << ", expected VALIDATION_SHIFTED" ; 19010b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala } 19020b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala } 19030b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala 19040b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala delete[] dst; 19050b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala FINISH_USING_CAMERA_METADATA(m); 19060b47c6ef73b7ca796b506c9b3feb50343863ce9cEino-Ville Talvala} 1907