VendorTagDescriptor.h revision d56db1d2bee182d1851097a9c712712fc094d117
1d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk/* 2d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Copyright (C) 2014 The Android Open Source Project 3d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * 4d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Licensed under the Apache License, Version 2.0 (the "License"); 5d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * you may not use this file except in compliance with the License. 6d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * You may obtain a copy of the License at 7d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * 8d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * http://www.apache.org/licenses/LICENSE-2.0 9d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * 10d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Unless required by applicable law or agreed to in writing, software 11d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * distributed under the License is distributed on an "AS IS" BASIS, 12d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * See the License for the specific language governing permissions and 14d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * limitations under the License. 15d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk */ 16d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 17d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#ifndef VENDOR_TAG_DESCRIPTOR_H 18d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 19d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala#include <binder/Parcelable.h> 20f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk#include <utils/Vector.h> 21d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#include <utils/KeyedVector.h> 22d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#include <utils/String8.h> 23d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#include <utils/RefBase.h> 24d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#include <system/camera_vendor_tags.h> 25d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 26d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#include <stdint.h> 27d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 28d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunknamespace android { 29d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 30d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass VendorTagDescriptor; 31d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 32d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace hardware { 33d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace camera2 { 34d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalanamespace params { 35d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 36d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk/** 37d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * VendorTagDescriptor objects are parcelable containers for the vendor tag 38d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * definitions provided, and are typically used to pass the vendor tag 39d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * information enumerated by the HAL to clients of the camera service. 40d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk */ 41d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass VendorTagDescriptor : public Parcelable { 42d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk public: 43d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk virtual ~VendorTagDescriptor(); 44d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 45d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala VendorTagDescriptor(); 46d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala VendorTagDescriptor(const VendorTagDescriptor& src); 47d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala VendorTagDescriptor& operator=(const VendorTagDescriptor& rhs); 48d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 49d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala void copyFrom(const VendorTagDescriptor& src); 50d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 51d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk /** 52d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * The following 'get*' methods implement the corresponding 53d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * functions defined in 54d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * system/media/camera/include/system/camera_vendor_tags.h 55d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk */ 56d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 57d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // Returns the number of vendor tags defined. 58d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk int getTagCount() const; 59d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 60d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // Returns an array containing the id's of vendor tags defined. 61d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk void getTagArray(uint32_t* tagArray) const; 62d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 63d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // Returns the section name string for a given vendor tag id. 64d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk const char* getSectionName(uint32_t tag) const; 65d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 66d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // Returns the tag name string for a given vendor tag id. 67d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk const char* getTagName(uint32_t tag) const; 68d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 69d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // Returns the tag type for a given vendor tag id. 70d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk int getTagType(uint32_t tag) const; 71d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 72d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk /** 73d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Write the VendorTagDescriptor object into the given parcel. 74d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * 75d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Returns OK on success, or a negative error code. 76d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk */ 77d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala virtual status_t writeToParcel( 78e1445da74730473a66a3ae8414e940aebfe6585dIgor Murashkin /*out*/ 79d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala Parcel* parcel) const override; 80d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 81f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk /** 82f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * Convenience method to get a vector containing all vendor tag 83f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * sections, or an empty vector if none are defined. 84f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk */ 85f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk SortedVector<String8> getAllSectionNames() const; 86f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk 87f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk /** 88f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * Lookup the tag id for a given tag name and section. 89f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * 90f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * Returns OK on success, or a negative error code. 91f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk */ 92f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk status_t lookupTag(String8 name, String8 section, /*out*/uint32_t* tag) const; 93f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk 94f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk /** 95f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk * Dump the currently configured vendor tags to a file descriptor. 96f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk */ 97f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk void dump(int fd, int verbosity, int indentation) const; 98f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk 99d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk /** 100d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Read values VendorTagDescriptor object from the given parcel. 101d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * 102d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk * Returns OK on success, or a negative error code. 103d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk */ 104d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala virtual status_t readFromParcel(const Parcel* parcel) override; 105d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 106d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk protected: 107f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk KeyedVector<String8, KeyedVector<String8, uint32_t>*> mReverseMapping; 108d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk KeyedVector<uint32_t, String8> mTagToNameMap; 109f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk KeyedVector<uint32_t, uint32_t> mTagToSectionMap; // Value is offset in mSections 110d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk KeyedVector<uint32_t, int32_t> mTagToTypeMap; 111f81648ec38ff63f1f35516fa27c1c24d846e9ba5Ruben Brunk SortedVector<String8> mSections; 112d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk // must be int32_t to be compatible with Parcel::writeInt32 113d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk int32_t mTagCount; 114d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 115d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk vendor_tag_ops mVendorOps; 116d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk}; 117d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} /* namespace params */ 118d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} /* namespace camera2 */ 119d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala} /* namespace hardware */ 120d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 121d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala/** 122d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * This version of VendorTagDescriptor must be stored in Android sp<>, and adds support for using it 123d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * as a global tag descriptor. 124d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * 125d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * It's a child class of the basic hardware::camera2::params::VendorTagDescriptor since basic 126d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Parcelable objects cannot require being kept in an sp<> and still work with auto-generated AIDL 127d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * interface implementations. 128d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala */ 129d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvalaclass VendorTagDescriptor : 130d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala public ::android::hardware::camera2::params::VendorTagDescriptor, 131d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala public LightRefBase<VendorTagDescriptor> { 132d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 133d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala public: 134d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 135d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala /** 136d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Create a VendorTagDescriptor object from the given vendor_tag_ops_t 137d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * struct. 138d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * 139d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Returns OK on success, or a negative error code. 140d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala */ 141d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala static status_t createDescriptorFromOps(const vendor_tag_ops_t* vOps, 142d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala /*out*/ 143d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala sp<VendorTagDescriptor>& descriptor); 144d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 145d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala /** 146d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Sets the global vendor tag descriptor to use for this process. 147d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Camera metadata operations that access vendor tags will use the 148d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * vendor tag definitions set this way. 149d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * 150d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Returns OK on success, or a negative error code. 151d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala */ 152d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala static status_t setAsGlobalVendorTagDescriptor(const sp<VendorTagDescriptor>& desc); 153d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 154d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala /** 155d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Returns the global vendor tag descriptor used by this process. 156d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * This will contain NULL if no vendor tags are defined. 157d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala */ 158d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala static sp<VendorTagDescriptor> getGlobalVendorTagDescriptor(); 159d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 160d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala /** 161d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala * Clears the global vendor tag descriptor used by this process. 162d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala */ 163d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala static void clearGlobalVendorTagDescriptor(); 164d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 165d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala}; 166d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 167d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk} /* namespace android */ 168d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk 169d56db1d2bee182d1851097a9c712712fc094d117Eino-Ville Talvala 170d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#define VENDOR_TAG_DESCRIPTOR_H 171d1176ef16677b6c94fb893edb6a864cdccc0b190Ruben Brunk#endif /* VENDOR_TAG_DESCRIPTOR_H */ 172