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