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#ifndef IMG_UTILS_TIFF_WRITABLE 18e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#define IMG_UTILS_TIFF_WRITABLE 19e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 20e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/Orderable.h> 21e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/EndianUtils.h> 22e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <img_utils/Output.h> 23e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 24e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <cutils/compiler.h> 25e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/Errors.h> 26e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <utils/RefBase.h> 27e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#include <stdint.h> 28e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 29e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace android { 30e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunknamespace img_utils { 31e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 32e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk/** 33e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * TiffWritable subclasses represent TIFF metadata objects that can be written 34e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * to an EndianOutput object. This is used for TIFF entries and IFDs. 35e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 36e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunkclass ANDROID_API TiffWritable : public Orderable, public LightRefBase<TiffWritable> { 37e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk public: 38e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk TiffWritable(); 39e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual ~TiffWritable(); 40e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 41e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 42e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Write the data to the output. The given offset is used to calculate 43e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * the header offset for values written. The offset is defined 44e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * relative to the beginning of the TIFF header, and is word aligned. 45e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * 46e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Returns OK on success, or a negative error code on failure. 47e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 48e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual status_t writeData(uint32_t offset, /*out*/EndianOutput* out) const = 0; 49e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 50e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk /** 51e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk * Get the size of the data to write. 52e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk */ 53e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk virtual size_t getSize() const = 0; 54e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 55e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk}; 56e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 57e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace img_utils*/ 58e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk} /*namespace android*/ 59e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk 60e507721000647a7d8afe44c63ef7fd04ef8971b1Ruben Brunk#endif /*IMG_UTILS_TIFF_WRITABLE*/ 61