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