Home | History | Annotate | Download | only in camera
      1 /*
      2  * Copyright (C) 2013 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 METADATA_H_
     18 #define METADATA_H_
     19 
     20 #include <hardware/camera3.h>
     21 #include <hardware/gralloc.h>
     22 #include <system/camera_metadata.h>
     23 #include <system/graphics.h>
     24 
     25 namespace default_camera_hal {
     26 // Metadata is a convenience class for dealing with libcamera_metadata
     27 class Metadata {
     28     public:
     29         Metadata();
     30         ~Metadata();
     31         // Constructor used for request metadata templates
     32         Metadata(uint8_t mode, uint8_t intent);
     33 
     34         // Parse and add an entry
     35         int addUInt8(uint32_t tag, int count, uint8_t *data);
     36         int addInt32(uint32_t tag, int count, int32_t *data);
     37         int addFloat(uint32_t tag, int count, float *data);
     38         int addInt64(uint32_t tag, int count, int64_t *data);
     39         int addDouble(uint32_t tag, int count, double *data);
     40         int addRational(uint32_t tag, int count,
     41                 camera_metadata_rational_t *data);
     42         // Generate a camera_metadata structure and fill it with internal data
     43         camera_metadata_t *generate();
     44 
     45     private:
     46         // Validate the tag, type and count for a metadata entry
     47         bool validate(uint32_t tag, int tag_type, int count);
     48         // Add a verified tag with data to this Metadata structure
     49         int add(uint32_t tag, int count, void *tag_data);
     50 
     51         class Entry {
     52             public:
     53                 Entry(uint32_t tag, void *data, int count);
     54                 ~Entry();
     55                 Entry *mNext;
     56                 Entry *mPrev;
     57                 const uint32_t mTag;
     58                 const void *mData;
     59                 const int mCount;
     60                 void insertAfter(Entry *e);
     61         };
     62         // List ends
     63         Entry *mHead;
     64         Entry *mTail;
     65         // Append entry to list
     66         void push(Entry *e);
     67         // Total of entries and entry data size
     68         int mEntryCount;
     69         int mDataCount;
     70         // Save generated metadata, invalidated on update
     71         camera_metadata_t *mGenerated;
     72         // Flag to force metadata regeneration
     73         bool mDirty;
     74         // Lock protecting the Metadata object for modifications
     75         pthread_mutex_t mMutex;
     76 };
     77 } // namespace default_camera_hal
     78 
     79 #endif // METADATA_H_
     80