camera_metadata_tests.cpp revision 9c13e191ea2d9622d00621d6acb009a9a759dc92
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#include "cutils/log.h" 20f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 2194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala#include <errno.h> 2294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 2308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin#include <vector> 2408b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin#include <algorithm> 25d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "gtest/gtest.h" 26d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "system/camera_metadata.h" 279c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk#include "camera_metadata_hidden.h" 28d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 29d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#include "camera_metadata_tests_fake_vendor.h" 30d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 31d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NULL(x) EXPECT_EQ((void*)0, x) 32d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define EXPECT_NOT_NULL(x) EXPECT_NE((void*)0, x) 337e59ded046175c20258be150cbc94be085924d28Zhijun He#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) 34d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 35d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define OK 0 36d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala#define ERROR 1 3794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala#define NOT_FOUND (-ENOENT) 38d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 39555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin#define _Alignas(T) \ 40555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ({struct _AlignasStruct { char c; T field; }; \ 41555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin offsetof(struct _AlignasStruct, field); }) 42555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 43d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin#define FINISH_USING_CAMERA_METADATA(m) \ 44d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); \ 45d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin free_camera_metadata(m); \ 46555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 47d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_normal) { 48d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 49d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 50d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 51d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 52d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 53d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 54d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 55d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 56d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 57d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 58d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 59d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 60d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 61d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 62d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 63d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nodata) { 64d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 65d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 66d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(1, 0); 67d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 68d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 69d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 70d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)1, get_camera_metadata_entry_capacity(m)); 71d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 72d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(m)); 73d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 74d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 75d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 76d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 77246a1adacce4854b91adc9635887453ba4f58e51Zhijun HeTEST(camera_metadata, clone_nodata) { 78246a1adacce4854b91adc9635887453ba4f58e51Zhijun He camera_metadata_t *src = NULL; 79246a1adacce4854b91adc9635887453ba4f58e51Zhijun He camera_metadata_t *copy = NULL; 80246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 81246a1adacce4854b91adc9635887453ba4f58e51Zhijun He src = allocate_camera_metadata(10, 0); 82246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 83246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)src); 84246a1adacce4854b91adc9635887453ba4f58e51Zhijun He copy = clone_camera_metadata(src); 85246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)copy); 86246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(copy)); 87246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_capacity(copy)); 88246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_count(copy)); 89246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(copy)); 90246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 91246a1adacce4854b91adc9635887453ba4f58e51Zhijun He FINISH_USING_CAMERA_METADATA(src); 92246a1adacce4854b91adc9635887453ba4f58e51Zhijun He FINISH_USING_CAMERA_METADATA(copy); 93246a1adacce4854b91adc9635887453ba4f58e51Zhijun He} 94246a1adacce4854b91adc9635887453ba4f58e51Zhijun He 95d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, allocate_nothing) { 96d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 97d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 98d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(0, 0); 99d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 100246a1adacce4854b91adc9635887453ba4f58e51Zhijun He ASSERT_NE((void*)NULL, (void*)m); 101246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 102246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_entry_capacity(m)); 103246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 104246a1adacce4854b91adc9635887453ba4f58e51Zhijun He EXPECT_EQ((size_t)0, get_camera_metadata_data_capacity(m)); 105d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 106d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 107d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_normal) { 108d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 109d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala void *buf = NULL; 110d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 111d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 112d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 113d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 114d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 115d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 116d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 117d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_TRUE(buf_size > 0); 118d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 119d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = malloc(buf_size); 120d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 121d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 122d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 123d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 124d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 125d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf, (uint8_t*)m); 126d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 127d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 128d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 129d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 130d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 131d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, &buf_size)); 132d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 133d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 134d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 135d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 136d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_nospace) { 137d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 138d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala void *buf = NULL; 139d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 140d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 141d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 142d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 143d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 144d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 145d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 146d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_GT(buf_size, (size_t)0); 147d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 148d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size--; 149d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 150d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = malloc(buf_size); 151d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 152d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 153d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 154d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 155d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 156d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(m); 157d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 158d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 159d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 160d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 161d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, place_extraspace) { 162d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 163d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = NULL; 164d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 165d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 166d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 167d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t extra_space = 10; 168d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 169d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = calculate_camera_metadata_size(entry_capacity, 170d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_capacity); 171d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 172d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_GT(buf_size, (size_t)0); 173d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 174d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size += extra_space; 175d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 176d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf = (uint8_t*)malloc(buf_size); 177d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 178d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 179d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 180d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = place_camera_metadata(buf, buf_size, entry_capacity, data_capacity); 181d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 182d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((uint8_t*)m, buf); 183d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m)); 184d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 185d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m)); 186d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 187d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf + buf_size - extra_space, (uint8_t*)m + get_camera_metadata_size(m)); 188d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 189d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, &buf_size)); 190d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 191d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 192d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 193d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 194d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, get_size) { 195d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 196d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 197d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 32; 198d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 199d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 200d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 201d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity), 202d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_size(m) ); 203d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 204d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(0,0), 205d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_compact_size(m) ); 206d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 207d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 208d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 209d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 210d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_normal) { 211d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 212d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 2137e59ded046175c20258be150cbc94be085924d28Zhijun He const size_t data_capacity = 128; 214d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 215d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 216d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 217d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 218d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 219d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 220d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_used = 0; 221d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t entries_used = 0; 222d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 223d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // INT64 224d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 225d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time = 1000000000; 226d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 227d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 228d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &exposure_time, 1); 229d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 230d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 231d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 232d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 233d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 234d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 235d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 236d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // INT32 237d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 238d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t sensitivity = 800; 239d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 240d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 241d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &sensitivity, 1); 242d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 243d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 244d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_SENSITIVITY), 1); 245d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 246d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 247d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 248d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 249d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // FLOAT 250d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 251d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala float focusDistance = 0.5f; 252d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 253d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 254d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &focusDistance, 1); 255d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 256d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 257d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_LENS_FOCUS_DISTANCE), 1); 258d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 259d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 260d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 261d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 262d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Array of FLOAT 263d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 2647e59ded046175c20258be150cbc94be085924d28Zhijun He float colorCorrectionGains[] = {1.69f, 1.00f, 1.00f, 2.41f}; 2657e59ded046175c20258be150cbc94be085924d28Zhijun He result = add_camera_metadata_entry(m, 2667e59ded046175c20258be150cbc94be085924d28Zhijun He ANDROID_COLOR_CORRECTION_GAINS, 2677e59ded046175c20258be150cbc94be085924d28Zhijun He colorCorrectionGains, ARRAY_SIZE(colorCorrectionGains)); 2687e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, result); 2697e59ded046175c20258be150cbc94be085924d28Zhijun He data_used += calculate_camera_metadata_entry_data_size( 2707e59ded046175c20258be150cbc94be085924d28Zhijun He get_camera_metadata_tag_type(ANDROID_COLOR_CORRECTION_GAINS), 2717e59ded046175c20258be150cbc94be085924d28Zhijun He ARRAY_SIZE(colorCorrectionGains)); 2727e59ded046175c20258be150cbc94be085924d28Zhijun He entries_used++; 2737e59ded046175c20258be150cbc94be085924d28Zhijun He 2747e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 2757e59ded046175c20258be150cbc94be085924d28Zhijun He 2767e59ded046175c20258be150cbc94be085924d28Zhijun He 2777e59ded046175c20258be150cbc94be085924d28Zhijun He // Array of RATIONAL 2787e59ded046175c20258be150cbc94be085924d28Zhijun He 2797e59ded046175c20258be150cbc94be085924d28Zhijun He camera_metadata_rational_t colorTransform[] = { 2807e59ded046175c20258be150cbc94be085924d28Zhijun He {9, 10}, {0, 1}, {0, 1}, 2817e59ded046175c20258be150cbc94be085924d28Zhijun He {1, 5}, {1, 2}, {0, 1}, 2827e59ded046175c20258be150cbc94be085924d28Zhijun He {0, 1}, {1, 10}, {7, 10} 283d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala }; 284d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 28508b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_COLOR_CORRECTION_TRANSFORM, 2867e59ded046175c20258be150cbc94be085924d28Zhijun He colorTransform, ARRAY_SIZE(colorTransform)); 287d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 288d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 2897e59ded046175c20258be150cbc94be085924d28Zhijun He get_camera_metadata_tag_type(ANDROID_COLOR_CORRECTION_TRANSFORM), 2907e59ded046175c20258be150cbc94be085924d28Zhijun He ARRAY_SIZE(colorTransform)); 291d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 292d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 293d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 294d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 295d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala // Check added entries 296d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 2977e59ded046175c20258be150cbc94be085924d28Zhijun He size_t index = 0; 298f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry entry; 2997e59ded046175c20258be150cbc94be085924d28Zhijun He 300d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3017e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 302d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3037e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, (int)entry.index); 304f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, entry.tag); 305f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, entry.type); 306f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 307f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposure_time, *entry.data.i64); 3087e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 309d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 310d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3117e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 312d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3137e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 314f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_SENSITIVITY, entry.tag); 315f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, entry.type); 316f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 317f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(sensitivity, *entry.data.i32); 3187e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 319d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 320d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3217e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 322d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3237e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 324f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 325f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 326f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 327f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focusDistance, *entry.data.f); 3287e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 329d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 330d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 3317e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 332d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 3337e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 3347e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ANDROID_COLOR_CORRECTION_GAINS, entry.tag); 335f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 3367e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ARRAY_SIZE(colorCorrectionGains), entry.count); 3377e59ded046175c20258be150cbc94be085924d28Zhijun He for (unsigned int i=0; i < entry.count; i++) { 3387e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorCorrectionGains[i], entry.data.f[i]); 3397e59ded046175c20258be150cbc94be085924d28Zhijun He } 3407e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 3417e59ded046175c20258be150cbc94be085924d28Zhijun He 3427e59ded046175c20258be150cbc94be085924d28Zhijun He result = get_camera_metadata_entry(m, 3437e59ded046175c20258be150cbc94be085924d28Zhijun He index, &entry); 3447e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(OK, result); 3457e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(index, entry.index); 3467e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ANDROID_COLOR_CORRECTION_TRANSFORM, entry.tag); 3477e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(TYPE_RATIONAL, entry.type); 3487e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(ARRAY_SIZE(colorTransform), entry.count); 349f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int i=0; i < entry.count; i++) { 3507e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorTransform[i].numerator, entry.data.r[i].numerator); 3517e59ded046175c20258be150cbc94be085924d28Zhijun He EXPECT_EQ(colorTransform[i].denominator, entry.data.r[i].denominator); 352d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 3537e59ded046175c20258be150cbc94be085924d28Zhijun He index++; 354d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 355d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entry_capacity, data_capacity), 356d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_size(m) ); 357d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 358d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(calculate_camera_metadata_size(entries_used, data_used), 359d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_compact_size(m) ); 360d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 361f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 362f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 363f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 364d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 365d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 366d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 367d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 368d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvalavoid add_test_metadata(camera_metadata_t *m, int entry_count) { 369d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 370d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m); 371d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 372d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 373d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t data_used = 0; 374d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t entries_used = 0; 375d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time; 376d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i=0; i < entry_count; i++ ) { 377d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala exposure_time = 100 + i * 100; 378d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 379d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 380d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &exposure_time, 1); 381d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 382d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_used += calculate_camera_metadata_entry_data_size( 383d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 384d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entries_used++; 385d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 386d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_used, get_camera_metadata_data_count(m)); 387d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entries_used, get_camera_metadata_entry_count(m)); 3883154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala EXPECT_GE(get_camera_metadata_data_capacity(m), 389d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m)); 390d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 391d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 392d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_get_toomany) { 393d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 394d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 395d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 396d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 397d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 398d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 399d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 400d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 401d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 402d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t sensitivity = 100; 403d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 404d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 405d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &sensitivity, 1); 406d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 407d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 408d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 409f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry entry; 410d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < entry_capacity; i++) { 411d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t exposure_time = 100 + i * 100; 412d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 413f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i, &entry); 414d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 415f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, entry.index); 416f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, entry.tag); 417f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, entry.type); 418f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 419f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposure_time, *entry.data.i64); 420d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 421f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.tag = 1234; 422f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.type = 56; 423f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.data.u8 = NULL; 424f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry.count = 7890; 425d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 426f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala entry_capacity, &entry); 427d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 428f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((uint32_t)1234, entry.tag); 429f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((uint8_t)56, entry.type); 430f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(NULL, entry.data.u8); 431f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)7890, entry.count); 432d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 433f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 434f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 435f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 436d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 437d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 438d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 439d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 4403154036acd2cc809388d08ff856198a8512f05f0Eino-Ville TalvalaTEST(camera_metadata, add_too_much_data) { 4413154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala camera_metadata_t *m = NULL; 4423154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala const size_t entry_capacity = 5; 4433154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala int result; 4443154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala size_t data_used = entry_capacity * calculate_camera_metadata_entry_data_size( 4453154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala get_camera_metadata_tag_type(ANDROID_SENSOR_EXPOSURE_TIME), 1); 4463154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity + 1, data_used); 4473154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4483154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4493154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala add_test_metadata(m, entry_capacity); 4503154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 4513154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala int64_t exposure_time = 12345; 4523154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala result = add_camera_metadata_entry(m, 4533154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 4543154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala &exposure_time, 1); 4553154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala EXPECT_EQ(ERROR, result); 4563154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 457d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 4583154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala} 4593154036acd2cc809388d08ff856198a8512f05f0Eino-Ville Talvala 460d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata) { 461d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 462d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 50; 463d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 450; 464d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 465d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 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 int result; 521d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 522d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 523d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 524d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 525d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 526d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 527d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 528d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size += extra_space; 529d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 530d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 531d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 532d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 533d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 534d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 535d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf, (uint8_t*)m2); 536d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 537d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 538d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 539d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 540d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_capacity(m2), 541d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_entry_count(m2)); 542d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_capacity(m2), 543d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 544d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(buf + buf_size - extra_space, 545d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala (uint8_t*)m2 + get_camera_metadata_size(m2) ); 546d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 547d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 548f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 549d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 550d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 551f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 552d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 553f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 554f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 555d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 556f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 557f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 558f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 559f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 560f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 561f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 562f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 563f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 564d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 565d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 566d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 567d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &buf_size)); 568d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 569d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 570d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 571d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 572d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 573d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, copy_metadata_nospace) { 574d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 575d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 576d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 577d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 578d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 579d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 580d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 581d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 582d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 583d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 584d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 585d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 586d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 587d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala buf_size--; 588d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 589d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 590d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(buf); 591d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 592d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 593d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(m2); 594d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 595d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala free(buf); 596d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 597d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 598d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 599d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 600d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata) { 601d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 602d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 603d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 604d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 605d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 606d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 607d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 608d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 609d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 610d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 611d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 612d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 613d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity*2, data_capacity*2); 614d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 615d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 616d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 617d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 618d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 619d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 620f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 621f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 622f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 623f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 624d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2)); 625d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity*2, get_camera_metadata_data_capacity(m2)); 626d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 627d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 628f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 629d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 630f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 631d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 632f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 633f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 634d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 635f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 636f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 637f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 638f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 639f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 640f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 641f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 642f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 643d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 644d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 645d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 646d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 647d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 648d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 649d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 650f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m)*2, 651f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 652f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m)*2, 653f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 654d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity*2, get_camera_metadata_entry_capacity(m2)); 655d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity*2, get_camera_metadata_data_capacity(m2)); 656d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 657d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) { 658f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 659d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 660d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 661d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 662f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i % entry_capacity, &e1); 663d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 664f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i % entry_capacity, e1.index); 665d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m2, 666f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i, &e2); 667d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 668f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 669f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 670f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 671f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 672f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 673f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 674f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 675f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 676d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 677d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 678d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 679d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 680d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 681d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 682d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 683d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_nospace) { 684d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 685d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 686d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 687d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 688d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 689d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 690d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 691d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 692d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 693d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 694d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 695d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 696d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity-1, data_capacity); 697d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 698d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 699d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 700d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 701d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 702d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_entry_count(m2)); 703d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ((size_t)0, get_camera_metadata_data_count(m2)); 704d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 705d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 706d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 707d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 708d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 709d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, append_metadata_onespace) { 710d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 711d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 712d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 713d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity2 = entry_capacity * 2 - 2; 714d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity2 = data_capacity * 2; 715d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 716d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 717d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 718d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 719d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala add_test_metadata(m, entry_capacity); 720d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 721d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m2 = NULL; 722d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 723d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m2 = allocate_camera_metadata(entry_capacity2, data_capacity2); 724d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NOT_NULL(m2); 725d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 726d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 727d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 728d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 729d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 730f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_count(m), 731f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_entry_count(m2)); 732f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 733f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m2)); 734d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2)); 735d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity2, get_camera_metadata_data_capacity(m2)); 736d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 737d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m); i++) { 738f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 739d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 740d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 741f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 742d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 743f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e1.index); 744f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 745d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 746f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 747f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 748f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 749f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 750f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 751f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 752f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 753f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 754d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 755d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 756d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 757d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = append_camera_metadata(m2, m); 758d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 759d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 760d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_count(m2)); 761d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 762d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_data_count(m2)); 763d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(entry_capacity2, get_camera_metadata_entry_capacity(m2)); 764d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(data_capacity2, get_camera_metadata_data_capacity(m2)); 765d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 766d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (unsigned int i=0; i < get_camera_metadata_entry_count(m2); i++) { 767f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e1, e2; 768d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 769d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 770d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = get_camera_metadata_entry(m, 771f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala i % entry_capacity, &e1); 772d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 773f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i % entry_capacity, e1.index); 774f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 775d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 776f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 777f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 778f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.type, e2.type); 779f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.count, e2.count); 780f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (unsigned int j=0; 781f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j < e1.count * camera_metadata_type_size[e1.type]; 782f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala j++) { 783f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(e1.data.u8[j], e2.data.u8[j]); 784d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 785d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 786d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 787d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 788d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m2); 789d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 790d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 791d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, vendor_tags) { 792d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_t *m = NULL; 793d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t entry_capacity = 5; 794d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala const size_t data_capacity = 50; 795d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 796d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 797d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 798d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 799d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t superMode = 5; 800d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 801d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 802d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 803d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 804d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 805d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 806d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 807d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 808d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 809d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 810d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 811d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 812d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 813d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 814d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 815d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 8169c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk set_camera_metadata_vendor_ops(&fakevendor_ops); 817d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 818d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 819d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 820d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 821d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 822d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 823d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 824d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 825d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 826d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 827d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 828d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 829d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 830d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 831d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SCALER_END, 832d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 833d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 834d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 835d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 836d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("com.fakevendor.sensor", 837d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 838d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("superMode", 839d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 840d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(TYPE_BYTE, 841d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 842d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 843d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_STREQ("com.fakevendor.scaler", 844d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala get_camera_metadata_section_name(FAKEVENDOR_SCALER_END)); 845d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SCALER_END)); 846d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SCALER_END)); 847d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 8489c13e191ea2d9622d00621d6acb009a9a759dc92Ruben Brunk set_camera_metadata_vendor_ops(NULL); 849d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin // TODO: fix vendor ops. Then the below 3 validations should fail. 850d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 851d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 852d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 853d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAKEVENDOR_SENSOR_SUPERMODE, 854d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 855d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(ERROR, result); 856d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 857d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 858d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 859d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ANDROID_REQUEST_METADATA_MODE, 860d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala &superMode, 1); 861d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(OK, result); 862d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m, NULL)); 863d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 864d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_section_name(FAKEVENDOR_SENSOR_SUPERMODE)); 865d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_NULL(get_camera_metadata_tag_name(FAKEVENDOR_SENSOR_SUPERMODE)); 866d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala EXPECT_EQ(-1, get_camera_metadata_tag_type(FAKEVENDOR_SENSOR_SUPERMODE)); 867d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 868d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin // Remove all vendor entries so validation passes 869d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin { 870d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin camera_metadata_ro_entry_t entry; 871d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, find_camera_metadata_ro_entry(m, 872d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FAKEVENDOR_SENSOR_SUPERMODE, 873d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin &entry)); 874d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, delete_camera_metadata_entry(m, entry.index)); 875d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin } 876d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 877d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 878d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 879d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 880d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville TalvalaTEST(camera_metadata, add_all_tags) { 881d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int total_tag_count = 0; 882d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i = 0; i < ANDROID_SECTION_COUNT; i++) { 883d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala total_tag_count += camera_metadata_section_bounds[i][1] - 884d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala camera_metadata_section_bounds[i][0]; 885d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 886d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int entry_data_count = 3; 887d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int conservative_data_space = total_tag_count * entry_data_count * 8; 888d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala uint8_t data[entry_data_count * 8]; 889d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int32_t *data_int32 = (int32_t *)data; 890d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala float *data_float = (float *)data; 891d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int64_t *data_int64 = (int64_t *)data; 892d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala double *data_double = (double *)data; 893f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_rational_t *data_rational = 894f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala (camera_metadata_rational_t *)data; 895d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 896f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = allocate_camera_metadata(total_tag_count, 897f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala conservative_data_space); 898d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 899d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_NE((void*)NULL, (void*)m); 900d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 901d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int result; 902d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 903d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int counter = 0; 904d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (int i = 0; i < ANDROID_SECTION_COUNT; i++) { 905d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala for (uint32_t tag = camera_metadata_section_bounds[i][0]; 906d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag < camera_metadata_section_bounds[i][1]; 907d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag++, counter++) { 908d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala int type = get_camera_metadata_tag_type(tag); 909d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_NE(-1, type); 910d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 911d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala switch (type) { 912d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_BYTE: 913d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[0] = tag & 0xFF; 914d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[1] = (tag >> 8) & 0xFF; 915d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data[2] = (tag >> 16) & 0xFF; 916d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 917d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_INT32: 918d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[0] = tag; 919d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[1] = i; 920d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int32[2] = counter; 921d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 922d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_FLOAT: 923d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[0] = tag; 924d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[1] = i; 925d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_float[2] = counter / (float)total_tag_count; 926d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 927d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_INT64: 928d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[0] = (int64_t)tag | ( (int64_t)tag << 32); 929d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[1] = i; 930d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_int64[2] = counter; 931d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 932d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_DOUBLE: 933d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[0] = tag; 934d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[1] = i; 935d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_double[2] = counter / (double)total_tag_count; 936d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 937d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala case TYPE_RATIONAL: 938d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[0].numerator = tag; 939d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[0].denominator = 1; 940d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[1].numerator = i; 941d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[1].denominator = 1; 942d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[2].numerator = counter; 943d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data_rational[2].denominator = total_tag_count; 944d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 945d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala default: 946d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala FAIL() << "Unknown type field encountered:" << type; 947d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala break; 948d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 949d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala result = add_camera_metadata_entry(m, 950d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala tag, 951d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala data, 952d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala entry_data_count); 953d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala ASSERT_EQ(OK, result); 954d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 955d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 956d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala } 957d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 958f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 959f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 960f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 96194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 962d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 96394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala} 96494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 96594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville TalvalaTEST(camera_metadata, sort_metadata) { 96694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala camera_metadata_t *m = NULL; 96794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const size_t entry_capacity = 5; 96894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala const size_t data_capacity = 100; 96994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 97094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int result; 97194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 97294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 97394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 97494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Add several unique entries in non-sorted order 97594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 9767e59ded046175c20258be150cbc94be085924d28Zhijun He camera_metadata_rational_t colorTransform[] = { 9777e59ded046175c20258be150cbc94be085924d28Zhijun He {9, 10}, {0, 1}, {0, 1}, 9787e59ded046175c20258be150cbc94be085924d28Zhijun He {1, 5}, {1, 2}, {0, 1}, 9797e59ded046175c20258be150cbc94be085924d28Zhijun He {0, 1}, {1, 10}, {7, 10} 98094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala }; 98194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 98208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_COLOR_CORRECTION_TRANSFORM, 9837e59ded046175c20258be150cbc94be085924d28Zhijun He colorTransform, ARRAY_SIZE(colorTransform)); 98494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 98594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 98694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala float focus_distance = 0.5f; 98794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 98894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 98994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &focus_distance, 1); 99094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 99194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 99294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int64_t exposure_time = 1000000000; 99394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 99494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_SENSOR_EXPOSURE_TIME, 99594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &exposure_time, 1); 99694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 99794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 99894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala int32_t sensitivity = 800; 99994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = add_camera_metadata_entry(m, 100094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_SENSOR_SENSITIVITY, 100194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala &sensitivity, 1); 100294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 100394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 100494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Test unsorted find 1005f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t entry; 100694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 100794c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 1008f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 100994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 1010f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1011f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.index); 1012f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1013f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1014f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 101594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 101694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 101708b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_NOISE_REDUCTION_STRENGTH, 1018f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 101994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(NOT_FOUND, result); 1020f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.index); 1021f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1022f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1023f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1024f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 102594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 102694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Sort 1027f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 1028f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala std::cout << "Pre-sorted metadata" << std::endl; 1029f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 1030f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 103194c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 103294c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = sort_camera_metadata(m); 103394c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 103494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 1035f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala IF_ALOGV() { 1036f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala std::cout << "Sorted metadata" << std::endl; 1037f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala dump_camera_metadata(m, 0, 2); 1038f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 103994c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 104094c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala // Test sorted find 104108b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin size_t lensFocusIndex = -1; 104208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin { 104308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::vector<uint32_t> tags; 104408b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_COLOR_CORRECTION_TRANSFORM); 104508b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_LENS_FOCUS_DISTANCE); 104608b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_SENSOR_EXPOSURE_TIME); 104708b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin tags.push_back(ANDROID_SENSOR_SENSITIVITY); 104808b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::sort(tags.begin(), tags.end()); 104908b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin 105008b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin lensFocusIndex = 105108b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin std::find(tags.begin(), tags.end(), ANDROID_LENS_FOCUS_DISTANCE) 105208b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin - tags.begin(); 105308b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin } 105494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 105594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 105694c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala ANDROID_LENS_FOCUS_DISTANCE, 1057f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 105894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(OK, result); 105908b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin EXPECT_EQ(lensFocusIndex, entry.index); 1060f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1061f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1062f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, (size_t)entry.count); 1063f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 106494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 106594c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala result = find_camera_metadata_entry(m, 106608b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin ANDROID_NOISE_REDUCTION_STRENGTH, 1067f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &entry); 106894c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala EXPECT_EQ(NOT_FOUND, result); 106908b8aadab1b04a4451d06f152580df2a3ac3afefIgor Murashkin EXPECT_EQ(lensFocusIndex, entry.index); 1070f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_LENS_FOCUS_DISTANCE, entry.tag); 1071f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_FLOAT, entry.type); 1072f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, entry.count); 1073f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(focus_distance, *entry.data.f); 107494c1901a96c268f55012809f8261f2ec89c16deaEino-Ville Talvala 1075d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala 1076d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1077d8afb4d1a4245b2a9d722cbb358a4d6febed89cfEino-Ville Talvala} 1078f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1079f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaTEST(camera_metadata, delete_metadata) { 1080f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = NULL; 1081f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t entry_capacity = 50; 1082f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t data_capacity = 450; 1083f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1084f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int result; 1085f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1086f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1087f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1088f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_entries = 5; 1089f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t data_per_entry = 1090f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1091f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_data = num_entries * data_per_entry; 1092f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1093f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete an entry with data 1094f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1095f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala add_test_metadata(m, num_entries); 1096f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1097f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1098f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1099f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 1); 1100f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1101f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1102f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1103f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1104f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1105f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1106f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1107f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1108f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1109f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1110f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1111f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1112f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1113f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1114f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1115f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1116f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1117f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1118f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e; 1119f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e); 1120f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1121f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e.index); 1122f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1123f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1124f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1125f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e.data.i64); 1126f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1127f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1128f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete an entry with no data, at end of array 1129f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1130f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t frameCount = 12; 1131f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1132f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1133f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1134f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1135f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1136f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1137f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1138f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1139f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1140f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1141f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1142f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e; 1143f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 4, &e); 1144f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1145f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1146f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.index); 1147f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1148f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1149f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1150f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1151f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1152f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1153f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1154f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1155f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1156f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1157f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1158f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1159f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1160f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1161f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 4); 1162f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1163f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1164f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 4, &e); 1165f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1166f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1167f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1168f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1169f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1170f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1171f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1172f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete with extra data on end of array 1173f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, 3); 1174f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1175f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1176f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1177f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1178f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1179f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1180f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1181f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1182f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1183f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1184f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1185f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1186f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1187f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1188f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1189f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Delete without extra data in front of array 1190f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1191f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala frameCount = 1001; 1192f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1193f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1194f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1195f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1196f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1197f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1198f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1199f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1200f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1201f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1202f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1203f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = sort_camera_metadata(m); 1204f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1205f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1206f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1207f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1208f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1209f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1210f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1211f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1212f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1213f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1214f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1215f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = delete_camera_metadata_entry(m, e.index); 1216f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1217f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries--; 1218f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1219f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1220f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1221f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1222f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1223f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1224f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 0; i < num_entries; i++) { 1225f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1226f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1227f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1228f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1229f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1230f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1231f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = i < 1 ? 100 : 200 + 100 * i; 1232f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1233f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1234f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} 1235f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1236f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville TalvalaTEST(camera_metadata, update_metadata) { 1237f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m = NULL; 1238f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t entry_capacity = 50; 1239f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala const size_t data_capacity = 450; 1240f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1241f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int result; 1242f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1243f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1244f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1245f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_entries = 5; 1246f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t data_per_entry = 1247f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1248f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala size_t num_data = num_entries * data_per_entry; 1249f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1250f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala add_test_metadata(m, num_entries); 1251f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1252f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1253f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1254f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with same-size data, doesn't fit in entry 1255f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1256f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t newExposureTime = 1000; 1257f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e; 1258f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1259f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newExposureTime, 1, &e); 1260f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1261f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1262f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1263f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1264f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1265f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1266f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1267f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1268f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1269f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1270f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1271f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1272f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1273f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1274f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1275f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1276f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1277f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1278f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1279f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1280f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1281f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1282f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1283f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1284f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1285f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1286f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1287f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1288f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1289f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with larger data 1290f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t newExposures[2] = { 5000, 6000 }; 1291f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1292f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, newExposures, 2, &e); 1293f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1294f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += data_per_entry; 1295f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1296f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1297f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1298f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1299f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1300f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1301f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1302f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1303f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1304f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1305f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1306f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1307f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1308f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1309f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1310f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1311f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1312f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1313f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1314f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1315f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1316f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1317f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1318f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1319f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1320f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1321f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1322f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1323f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1324f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1325f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1326f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1327f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1328f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with smaller data 1329f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newExposureTime = 100; 1330f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1331f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newExposureTime, 1, &e); 1332f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1333f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1334f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= data_per_entry; 1335f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1336f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1337f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1338f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1339f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1340f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1341f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1342f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1343f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1344f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1345f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1346f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, 1347f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &e); 1348f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1349f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1350f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1351f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1352f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1353f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, *e.data.i64); 1354f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1355f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1356f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1357f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1358f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1359f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1360f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1361f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1362f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 + 100 * i; 1363f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1364f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1365f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1366f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update with size fitting in entry 1367f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1368f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t frameCount = 1001; 1369f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = add_camera_metadata_entry(m, 1370f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, 1371f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala &frameCount, 1); 1372f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1373f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_entries++; 1374f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1375f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1376f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(entry_capacity, get_camera_metadata_entry_capacity(m)); 1377f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1378f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(data_capacity, get_camera_metadata_data_capacity(m)); 1379f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1380f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = sort_camera_metadata(m); 1381f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1382f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1383f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1384f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1385f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1386f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1387f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1388f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1389f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1390f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(frameCount, *e.data.i32); 1391f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1392f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t newFrameCount = 0x12349876; 1393f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1394f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1395f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1396f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1397f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1398f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1399f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1400f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1401f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1402f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1403f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1404f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1405f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1406f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1407f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1408f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1409f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1410f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1411f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1412f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1413f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1414f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1415f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1416f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1417f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1418f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1419f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1420f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1421f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1422f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1423f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1424f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update to bigger than entry 1425f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1426f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int32_t newFrameCounts[4] = { 0x0, 0x1, 0x10, 0x100 }; 1427f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1428f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1429f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCounts, 4, &e); 1430f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1431f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1432f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1433f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += calculate_camera_metadata_entry_data_size(TYPE_INT32, 1434f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 4); 1435f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1436f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1437f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1438f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1439f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1440f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1441f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1442f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.count); 1443f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[0], e.data.i32[0]); 1444f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[1], e.data.i32[1]); 1445f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[2], e.data.i32[2]); 1446f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[3], e.data.i32[3]); 1447f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1448f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala e.count = 0; 1449f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1450f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1451f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1452f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1453f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1454f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1455f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1456f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1457f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)4, e.count); 1458f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[0], e.data.i32[0]); 1459f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[1], e.data.i32[1]); 1460f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[2], e.data.i32[2]); 1461f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCounts[3], e.data.i32[3]); 1462f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1463f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1464f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry e2; 1465f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1466f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1467f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1468f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1469f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1470f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1471f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1472f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1473f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1474f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update to smaller than entry 1475f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1476f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1477f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1478f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1479f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1480f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= camera_metadata_type_size[TYPE_INT32] * 4; 1481f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1482f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1483f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1484f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1485f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1486f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1487f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1488f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1489f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1490f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1491f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m, 1492f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1493f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1494f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1495f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1496f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1497f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1498f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1499f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1500f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1501f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 1; i < num_entries; i++) { 1502f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1503f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m, i, &e2); 1504f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1505f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1506f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1507f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1508f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1509f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1510f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1511f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1512f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Setup new buffer with no spare data space 1513f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1514f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m, 1515f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, newExposures, 2, &e); 1516f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1517f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1518f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += data_per_entry; 1519f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1520f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 1521f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 1522f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1523f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1524f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1525f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1526f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1527f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1528f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1529f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1530f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_t *m2; 1531f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala m2 = allocate_camera_metadata(get_camera_metadata_entry_count(m), 1532f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala get_camera_metadata_data_count(m)); 1533f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_NOT_NULL(m2); 1534f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1535f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = append_camera_metadata(m2, m); 1536f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1537f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1538f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1539f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1540f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1541f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1542f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1543f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1544f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1545f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1546f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1547f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1548f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no more room 1549f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1550f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1551f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCounts, 4, &e); 1552f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ERROR, result); 1553f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1554f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1555f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1556f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1557f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1558f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1559f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1560f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1561f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1562f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1563f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but change fits into entry 1564f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1565f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newFrameCount = 5; 1566f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1567f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 0, &newFrameCount, 1, &e); 1568f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1569f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1570f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1571f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1572f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1573f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1574f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1575f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1576f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1577f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1578f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1579f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1580f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1581f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1582f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1583f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1584f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1585f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1586f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1587f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1588f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1589f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, 1, &e); 1590f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1591f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1592f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1593f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1594f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1595f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1596f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1597f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1598f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1599f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1600f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1601f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1602f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1603f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1604f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1605f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1606f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1607f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1608f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but data size doesn't change 1609f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1610f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala newExposures[0] = 1000; 1611f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1612f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1613f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, newExposures, 2, &e); 1614f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1615f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1616f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1617f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1618f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1619f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1620f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1621f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1622f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)2, e.count); 1623f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[0], e.data.i64[0]); 1624f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposures[1], e.data.i64[1]); 1625f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1626f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1627f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1628f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1629f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1630f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1631f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1632f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1633f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1634f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1635f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1636f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1637f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1638f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1639f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1640f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1641f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1642f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1643f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1644f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1645f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1646f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1647f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala // Update when there's no data room, but data size shrinks 1648f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1649f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = update_camera_metadata_entry(m2, 1650f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1, &newExposureTime, 1, &e); 1651f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1652f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1653f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data -= calculate_camera_metadata_entry_data_size(TYPE_INT64, 2); 1654f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala num_data += calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 1655f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1656f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m2)); 1657f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m2)); 1658f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1659f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.index); 1660f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e.tag); 1661f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e.type); 1662f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1663f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newExposureTime, e.data.i64[0]); 1664f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1665f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = find_camera_metadata_entry(m2, 1666f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala ANDROID_REQUEST_FRAME_COUNT, &e); 1667f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1668f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1669f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)0, e.index); 1670f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_REQUEST_FRAME_COUNT, e.tag); 1671f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT32, e.type); 1672f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ((size_t)1, e.count); 1673f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(newFrameCount, *e.data.i32); 1674f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1675f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala for (size_t i = 2; i < num_entries; i++) { 1676f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala camera_metadata_entry_t e2; 1677f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1678f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(OK, result); 1679f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(i, e2.index); 1680f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(ANDROID_SENSOR_EXPOSURE_TIME, e2.tag); 1681f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(TYPE_INT64, e2.type); 1682f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala int64_t exposureTime = 100 * i; 1683f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala EXPECT_EQ(exposureTime, *e2.data.i64); 1684f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala } 1685f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala 1686f5fb8a5516876c5a48cc44b4f1c99504e0b9f245Eino-Ville Talvala} 168798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 168898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville TalvalaTEST(camera_metadata, user_pointer) { 168998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala camera_metadata_t *m = NULL; 169098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala const size_t entry_capacity = 50; 169198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala const size_t data_capacity = 450; 169298d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 169398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala int result; 169498d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 169598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 169698d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 169798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala size_t num_entries = 5; 169898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala size_t data_per_entry = 169998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala calculate_camera_metadata_entry_data_size(TYPE_INT64, 1); 170098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala size_t num_data = num_entries * data_per_entry; 170198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 170298d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala add_test_metadata(m, num_entries); 170398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(num_entries, get_camera_metadata_entry_count(m)); 170498d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(num_data, get_camera_metadata_data_count(m)); 170598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 170698d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala void* ptr; 170798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala result = get_camera_metadata_user_pointer(m, &ptr); 170898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(OK, result); 170998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_NULL(ptr); 171098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 171198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala int testValue = 10; 171298d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala result = set_camera_metadata_user_pointer(m, &testValue); 171398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(OK, result); 171498d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 171598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala result = get_camera_metadata_user_pointer(m, &ptr); 171698d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(OK, result); 171798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(&testValue, (int*)ptr); 171898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_EQ(testValue, *(int*)ptr); 171998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 172098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala size_t buf_size = get_camera_metadata_compact_size(m); 172198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_LT((size_t)0, buf_size); 172298d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 172398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala uint8_t *buf = (uint8_t*)malloc(buf_size); 172498d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_NOT_NULL(buf); 172598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 172698d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala camera_metadata_t *m2 = copy_camera_metadata(buf, buf_size, m); 172798d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_NOT_NULL(m2); 172898d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 172998d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala result = get_camera_metadata_user_pointer(m2, &ptr); 173098d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala EXPECT_NULL(ptr); 173198d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala 1732d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &buf_size)); 173398d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala free(buf); 1734d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 173598d02fd0be8cd09479262959a542dd2620bf6074Eino-Ville Talvala} 1736b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1737b10d56ad43a91924d3666127963e5fdce725389cEino-Ville TalvalaTEST(camera_metadata, memcpy) { 1738b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_t *m = NULL; 1739b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala const size_t entry_capacity = 50; 1740b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala const size_t data_capacity = 450; 1741b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1742b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala int result; 1743b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1744b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala m = allocate_camera_metadata(entry_capacity, data_capacity); 1745b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1746b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala add_test_metadata(m, 5); 1747b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1748d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin size_t m_size = get_camera_metadata_size(m); 1749d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin uint8_t *dst = new uint8_t[m_size]; 1750b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1751d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin memcpy(dst, m, m_size); 1752b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1753b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_t *m2 = reinterpret_cast<camera_metadata_t*>(dst); 1754b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1755b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(get_camera_metadata_size(m), 1756b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_size(m2)); 1757b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_compact_size(m), 1758b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_compact_size(m2)); 1759b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(get_camera_metadata_entry_count(m), 1760b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_entry_count(m2)); 1761b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_entry_capacity(m), 1762b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_entry_capacity(m2)); 1763b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_count(m), 1764b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_data_count(m2)); 1765b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(get_camera_metadata_data_capacity(m), 1766b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala get_camera_metadata_data_capacity(m2)); 1767b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1768b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_entry_t e1, e2; 1769b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala for (size_t i = 0; i < get_camera_metadata_entry_count(m); i++) { 1770b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, i, &e1); 1771b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1772b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, i, &e2); 1773b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1774b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1775b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1776b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1777b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1778b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.count, e2.count); 1779b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1780b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_TRUE(!memcmp(e1.data.u8, e2.data.u8, 1781b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala camera_metadata_type_size[e1.type] * e1.count)); 1782b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala } 1783b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1784b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala // Make sure updating one metadata buffer doesn't change the other 1785b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1786b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala int64_t double_exposure_time[] = { 100, 200 }; 1787b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1788b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = update_camera_metadata_entry(m, 0, 1789b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time, 1790b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala sizeof(double_exposure_time)/sizeof(int64_t), NULL); 1791b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(OK, result); 1792b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1793b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, 0, &e1); 1794b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1795b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, 0, &e2); 1796b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1797b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1798b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1799b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1800b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1801b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e1.count); 1802b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)1, e2.count); 1803b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e1.data.i64[0]); 1804b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e1.data.i64[1]); 1805b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e2.data.i64[0]); 1806b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1807b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala // And in the reverse direction as well 1808b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1809b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time[0] = 300; 1810b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = update_camera_metadata_entry(m2, 0, 1811b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala double_exposure_time, 1812b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala sizeof(double_exposure_time)/sizeof(int64_t), NULL); 1813b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(OK, result); 1814b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1815b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m, 0, &e1); 1816b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1817b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala result = get_camera_metadata_entry(m2, 0, &e2); 1818b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(OK, result); 1819b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1820b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.index, e2.index); 1821b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(e1.tag, e2.tag); 1822b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ(e1.type, e2.type); 1823b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e1.count); 1824b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala ASSERT_EQ((size_t)2, e2.count); 1825b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(100, e1.data.i64[0]); 1826b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e1.data.i64[1]); 1827b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(300, e2.data.i64[0]); 1828b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala EXPECT_EQ(200, e2.data.i64[1]); 1829b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala 1830d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin EXPECT_EQ(OK, validate_camera_metadata_structure(m2, &m_size)); 1831d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin 1832b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala delete dst; 1833d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1834b10d56ad43a91924d3666127963e5fdce725389cEino-Ville Talvala} 1835555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1836555aac882ed63e70019c78ccc58032a5be0f58ecIgor MurashkinTEST(camera_metadata, data_alignment) { 1837555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // Verify that when we store the data, the data aligned as we expect 1838555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_t *m = NULL; 1839555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t entry_capacity = 50; 1840555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t data_capacity = 450; 1841555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin char dummy_data[data_capacity] = {0,}; 1842555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1843555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin int m_types[] = { 1844555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_BYTE, 1845555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_INT32, 1846555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_FLOAT, 1847555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_INT64, 1848555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_DOUBLE, 1849555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin TYPE_RATIONAL 1850555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1851555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin const size_t (&m_type_sizes)[NUM_TYPES] = camera_metadata_type_size; 1852555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin size_t m_type_align[] = { 1853555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(uint8_t), // BYTE 1854555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(int32_t), // INT32 1855555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(float), // FLOAT 1856555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(int64_t), // INT64 1857555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(double), // DOUBLE 1858555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin _Alignas(camera_metadata_rational_t), // RATIONAL 1859555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1860555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* arbitrary tags. the important thing is that their type 1861555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin corresponds to m_type_sizes[i] 1862555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1863555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin int m_type_tags[] = { 1864555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_REQUEST_TYPE, 1865555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_REQUEST_ID, 1866555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_LENS_FOCUS_DISTANCE, 1867555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_SENSOR_EXPOSURE_TIME, 1868555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ANDROID_JPEG_GPS_COORDINATES, 1869f94330452c56b7f6a513f377d3fc20fabec389c1Eino-Ville Talvala ANDROID_CONTROL_AE_COMPENSATION_STEP 1870555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin }; 1871555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1872555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* 1873555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin if the asserts fail, its because we added more types. 1874555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin this means the test should be updated to include more types. 1875555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1876555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_types)/sizeof(m_types[0])); 1877555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_type_align)/sizeof(m_type_align[0])); 1878555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ((size_t)NUM_TYPES, sizeof(m_type_tags)/sizeof(m_type_tags[0])); 1879555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1880555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (int m_type = 0; m_type < (int)NUM_TYPES; ++m_type) { 1881555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1882555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(m_types[m_type], 1883555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin get_camera_metadata_tag_type(m_type_tags[m_type])); 1884555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1885555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // misalignment possibilities are [0,type_size) for any type pointer 1886555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (size_t i = 0; i < m_type_sizes[m_type]; ++i) { 1887555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1888555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin /* data_count = 1, we may store data in the index. 1889555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin data_count = 10, we will store data separately 1890555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin */ 1891555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin for (int data_count = 1; data_count <= 10; data_count += 9) { 1892555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1893555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin m = allocate_camera_metadata(entry_capacity, data_capacity); 1894555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1895555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // add dummy data to test various different padding requirements 1896555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1897555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin add_camera_metadata_entry(m, 1898555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin m_type_tags[TYPE_BYTE], 1899555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &dummy_data[0], 1900555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin data_count + i)); 1901555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // insert the type we care to test 1902555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1903555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin add_camera_metadata_entry(m, m_type_tags[m_type], 1904555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &dummy_data[0], data_count)); 1905555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1906555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin // now check the alignment for our desired type. it should be ok 1907555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_ro_entry_t entry = camera_metadata_ro_entry_t(); 1908555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin ASSERT_EQ(OK, 1909555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin find_camera_metadata_ro_entry(m, m_type_tags[m_type], 1910555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin &entry)); 1911555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1912555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin void* data_ptr = (void*)entry.data.u8; 1913555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin void* aligned_ptr = (void*)((uintptr_t)data_ptr & ~(m_type_align[m_type] - 1)); 1914555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin EXPECT_EQ(aligned_ptr, data_ptr) << 1915555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin "Wrong alignment for type " << 1916555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin camera_metadata_type_names[m_type] << 1917555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " with " << (data_count + i) << " dummy bytes and " << 1918555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " data_count " << data_count << 1919555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin " expected alignment was: " << m_type_align[m_type]; 1920555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin 1921d1cecc16420d1e210b0643530e552e3427b2bab2Igor Murashkin FINISH_USING_CAMERA_METADATA(m); 1922555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1923555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1924555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin } 1925555aac882ed63e70019c78ccc58032a5be0f58ecIgor Murashkin} 1926