1e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk/* 2e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Copyright 2014 The Android Open Source Project 3e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 4e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 5e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * you may not use this file except in compliance with the License. 6e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * You may obtain a copy of the License at 7e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 8e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 9e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 10e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Unless required by applicable law or agreed to in writing, software 11e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 12e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * See the License for the specific language governing permissions and 14e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * limitations under the License. 15e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 16e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 17e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/TiffIfd.h> 18e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/TiffHelpers.h> 19e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/TiffEntry.h> 20e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 21e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/Errors.h> 22e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/StrongPointer.h> 23e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/Vector.h> 24e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 25e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace android { 26e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace img_utils { 27e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 28e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben BrunkTiffEntry::~TiffEntry() {} 29e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 30e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk/** 31e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Specialize for each valid type, including sub-IFDs. 32e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 33e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Values with types other than the ones given here should not compile. 34e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 35e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 36e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 37e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst sp<TiffIfd>* TiffEntry::forceValidType<sp<TiffIfd> >(TagType type, const sp<TiffIfd>* value) { 38e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == LONG) { 39e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 40e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 41e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'ifd' is not valid for tag with TIFF type %d.", 42e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 43e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 44e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 45e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 46e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 47e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst uint8_t* TiffEntry::forceValidType<uint8_t>(TagType type, const uint8_t* value) { 48e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == BYTE || type == ASCII || type == UNDEFINED) { 49e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 50e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 51e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'uint8_t' is not valid for tag with TIFF type %d.", 52e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 53e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 54e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 55e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 56e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 57e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst int8_t* TiffEntry::forceValidType<int8_t>(TagType type, const int8_t* value) { 58e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == SBYTE || type == ASCII || type == UNDEFINED) { 59e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 60e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 61e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'int8_t' is not valid for tag with TIFF type %d.", 62e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 63e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 64e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 65e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 66e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 67e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst uint16_t* TiffEntry::forceValidType<uint16_t>(TagType type, const uint16_t* value) { 68e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == SHORT) { 69e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 70e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 71e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'uint16_t' is not valid for tag with TIFF type %d.", 72e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 73e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 74e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 75e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 76e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 77e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst int16_t* TiffEntry::forceValidType<int16_t>(TagType type, const int16_t* value) { 78e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == SSHORT) { 79e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 80e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 81e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'int16_t' is not valid for tag with TIFF type %d.", 82e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 83e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 84e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 85e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 86e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 87e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst uint32_t* TiffEntry::forceValidType<uint32_t>(TagType type, const uint32_t* value) { 88e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == LONG || type == RATIONAL) { 89e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 90e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 91e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'uint32_t' is not valid for tag with TIFF type %d.", 92e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 93e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 94e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 95e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 96e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 97e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst int32_t* TiffEntry::forceValidType<int32_t>(TagType type, const int32_t* value) { 98e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == SLONG || type == SRATIONAL) { 99e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 100e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 101e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'int32_t' is not valid for tag with TIFF type %d.", 102e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 103e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 104e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 105e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 106e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 107e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst double* TiffEntry::forceValidType<double>(TagType type, const double* value) { 108e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == DOUBLE) { 109e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 110e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 111e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'double' is not valid for tag with TIFF type %d.", 112e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 113e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 114e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 115e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 116e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunktemplate<> 117e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkconst float* TiffEntry::forceValidType<float>(TagType type, const float* value) { 118e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (type == FLOAT) { 119e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return value; 120e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 121e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk ALOGE("%s: Value of type 'float' is not valid for tag with TIFF type %d.", 122e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk __FUNCTION__, type); 123e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return NULL; 124e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 125e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 126e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben BrunkString8 TiffEntry::toString() const { 127e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk String8 output; 128e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk uint32_t count = getCount(); 129e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("[id: %x, type: %d, count: %u, value: '", getTag(), getType(), count); 130e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 131e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk size_t cappedCount = count; 132e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (count > MAX_PRINT_STRING_LENGTH) { 133e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk cappedCount = MAX_PRINT_STRING_LENGTH; 134e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 135e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 136e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk TagType type = getType(); 137e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk switch (type) { 138e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case UNDEFINED: 139e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case BYTE: { 140e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const uint8_t* typed_data = getData<uint8_t>(); 141e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 142e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%u ", typed_data[i]); 143e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 144e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 145e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 146e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case ASCII: { 147e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const char* typed_data = reinterpret_cast<const char*>(getData<uint8_t>()); 148e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk size_t len = count; 149e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (count > MAX_PRINT_STRING_LENGTH) { 150e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk len = MAX_PRINT_STRING_LENGTH; 151e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 152e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.append(typed_data, len); 153e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 154e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 155e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case SHORT: { 156e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const uint16_t* typed_data = getData<uint16_t>(); 157e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 158e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%u ", typed_data[i]); 159e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 160e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 161e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 162e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case LONG: { 163e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const uint32_t* typed_data = getData<uint32_t>(); 164e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 165e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%u ", typed_data[i]); 166e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 167e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 168e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 169e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case RATIONAL: { 170e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const uint32_t* typed_data = getData<uint32_t>(); 171e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk cappedCount <<= 1; 172e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; i+=2) { 173e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%u/%u ", typed_data[i], typed_data[i + 1]); 174e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 175e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 176e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 177e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case SBYTE: { 178e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const int8_t* typed_data = getData<int8_t>(); 179e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 180e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%d ", typed_data[i]); 181e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 182e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 183e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 184e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case SSHORT: { 185e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const int16_t* typed_data = getData<int16_t>(); 186e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 187e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%d ", typed_data[i]); 188e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 189e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 190e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 191e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case SLONG: { 192e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const int32_t* typed_data = getData<int32_t>(); 193e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 194e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%d ", typed_data[i]); 195e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 196e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 197e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 198e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk case SRATIONAL: { 199e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const int32_t* typed_data = getData<int32_t>(); 200e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk cappedCount <<= 1; 201e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; i+=2) { 202e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%d/%d ", typed_data[i], typed_data[i + 1]); 203e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 204e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 205e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 206ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk case FLOAT: { 207e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk const float* typed_data = getData<float>(); 208e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 209e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.appendFormat("%f ", typed_data[i]); 210e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 211e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 212e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 213ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk case DOUBLE: { 214ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk const double* typed_data = getData<double>(); 215ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk for (size_t i = 0; i < cappedCount; ++i) { 216ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk output.appendFormat("%f ", typed_data[i]); 217ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk } 218ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk break; 219ca73159becc0fc0098530929e467a3d92e470571Ruben Brunk } 220e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk default: { 221e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.append("unknown type "); 222e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk break; 223e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 224e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 225e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 226e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk if (count > MAX_PRINT_STRING_LENGTH) { 227e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.append("..."); 228e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk } 229e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk output.append("']"); 230e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk return output; 231e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} 232e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 233e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace img_utils*/ 234e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace android*/ 235