Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2014 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 #ifndef VENDOR_TAG_DESCRIPTOR_H
     18 
     19 #include <utils/Vector.h>
     20 #include <utils/KeyedVector.h>
     21 #include <utils/String8.h>
     22 #include <utils/RefBase.h>
     23 #include <system/camera_vendor_tags.h>
     24 
     25 #include <stdint.h>
     26 
     27 namespace android {
     28 
     29 class Parcel;
     30 
     31 /**
     32  * VendorTagDescriptor objects are parcelable containers for the vendor tag
     33  * definitions provided, and are typically used to pass the vendor tag
     34  * information enumerated by the HAL to clients of the camera service.
     35  */
     36 class VendorTagDescriptor
     37         : public LightRefBase<VendorTagDescriptor> {
     38     public:
     39         virtual ~VendorTagDescriptor();
     40 
     41         /**
     42          * The following 'get*' methods implement the corresponding
     43          * functions defined in
     44          * system/media/camera/include/system/camera_vendor_tags.h
     45          */
     46 
     47         // Returns the number of vendor tags defined.
     48         int getTagCount() const;
     49 
     50         // Returns an array containing the id's of vendor tags defined.
     51         void getTagArray(uint32_t* tagArray) const;
     52 
     53         // Returns the section name string for a given vendor tag id.
     54         const char* getSectionName(uint32_t tag) const;
     55 
     56         // Returns the tag name string for a given vendor tag id.
     57         const char* getTagName(uint32_t tag) const;
     58 
     59         // Returns the tag type for a given vendor tag id.
     60         int getTagType(uint32_t tag) const;
     61 
     62         /**
     63          * Write the VendorTagDescriptor object into the given parcel.
     64          *
     65          * Returns OK on success, or a negative error code.
     66          */
     67         status_t writeToParcel(
     68                 /*out*/
     69                 Parcel* parcel) const;
     70 
     71         /**
     72          * Convenience method to get a vector containing all vendor tag
     73          * sections, or an empty vector if none are defined.
     74          */
     75         SortedVector<String8> getAllSectionNames() const;
     76 
     77         /**
     78          * Lookup the tag id for a given tag name and section.
     79          *
     80          * Returns OK on success, or a negative error code.
     81          */
     82         status_t lookupTag(String8 name, String8 section, /*out*/uint32_t* tag) const;
     83 
     84         /**
     85          * Dump the currently configured vendor tags to a file descriptor.
     86          */
     87         void dump(int fd, int verbosity, int indentation) const;
     88 
     89         // Static methods:
     90 
     91         /**
     92          * Create a VendorTagDescriptor object from the given parcel.
     93          *
     94          * Returns OK on success, or a negative error code.
     95          */
     96         static status_t createFromParcel(const Parcel* parcel,
     97                 /*out*/
     98                 sp<VendorTagDescriptor>& descriptor);
     99 
    100         /**
    101          * Create a VendorTagDescriptor object from the given vendor_tag_ops_t
    102          * struct.
    103          *
    104          * Returns OK on success, or a negative error code.
    105          */
    106         static status_t createDescriptorFromOps(const vendor_tag_ops_t* vOps,
    107                 /*out*/
    108                 sp<VendorTagDescriptor>& descriptor);
    109 
    110         /**
    111          * Sets the global vendor tag descriptor to use for this process.
    112          * Camera metadata operations that access vendor tags will use the
    113          * vendor tag definitions set this way.
    114          *
    115          * Returns OK on success, or a negative error code.
    116          */
    117         static status_t setAsGlobalVendorTagDescriptor(const sp<VendorTagDescriptor>& desc);
    118 
    119         /**
    120          * Clears the global vendor tag descriptor used by this process.
    121          */
    122         static void clearGlobalVendorTagDescriptor();
    123 
    124         /**
    125          * Returns the global vendor tag descriptor used by this process.
    126          * This will contain NULL if no vendor tags are defined.
    127          */
    128         static sp<VendorTagDescriptor> getGlobalVendorTagDescriptor();
    129     protected:
    130         VendorTagDescriptor();
    131         KeyedVector<String8, KeyedVector<String8, uint32_t>*> mReverseMapping;
    132         KeyedVector<uint32_t, String8> mTagToNameMap;
    133         KeyedVector<uint32_t, uint32_t> mTagToSectionMap; // Value is offset in mSections
    134         KeyedVector<uint32_t, int32_t> mTagToTypeMap;
    135         SortedVector<String8> mSections;
    136         // must be int32_t to be compatible with Parcel::writeInt32
    137         int32_t mTagCount;
    138     private:
    139         vendor_tag_ops mVendorOps;
    140 };
    141 
    142 } /* namespace android */
    143 
    144 #define VENDOR_TAG_DESCRIPTOR_H
    145 #endif /* VENDOR_TAG_DESCRIPTOR_H */
    146