FrameProcessorBase.h revision a91537e268f2b35f9f0dfdc0c4f84655c93285ae
1a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin/* 2a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 3a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * 4a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * you may not use this file except in compliance with the License. 6a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * You may obtain a copy of the License at 7a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * 8a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * 10a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * See the License for the specific language governing permissions and 14a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * limitations under the License. 15a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin */ 16a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 17a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_PROFRAMEPROCESSOR_H 18a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#define ANDROID_SERVERS_CAMERA_CAMERA2_PROFRAMEPROCESSOR_H 19a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 20a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <utils/Thread.h> 21a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <utils/String16.h> 22a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <utils/Vector.h> 23a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <utils/KeyedVector.h> 24a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <utils/List.h> 25a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#include <camera/CameraMetadata.h> 26a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 27a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinstruct camera_frame_metadata; 28a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 29a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinnamespace android { 30a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 31a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinclass ProCamera2Client; 32a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 33a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinnamespace camera2 { 34a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 35a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin/* Output frame metadata processing thread. This thread waits for new 36a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * frames from the device, and analyzes them as necessary. 37a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin */ 38a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinclass ProFrameProcessor: public Thread { 39a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin public: 40a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin ProFrameProcessor(wp<ProCamera2Client> client); 41a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin ~ProFrameProcessor(); 42a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 43a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin struct FilteredListener: virtual public RefBase { 44a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin virtual void onFrameAvailable(int32_t frameId, 45a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin const CameraMetadata &frame) = 0; 46a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin }; 47a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 48a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin // Register a listener for a range of IDs [minId, maxId). Multiple listeners 49a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin // can be listening to the same range 50a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin status_t registerListener(int32_t minId, int32_t maxId, wp<FilteredListener> listener); 51a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin status_t removeListener(int32_t minId, int32_t maxId, wp<FilteredListener> listener); 52a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 53a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin void dump(int fd, const Vector<String16>& args); 54a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin private: 55a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin static const nsecs_t kWaitDuration = 10000000; // 10 ms 56a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin wp<ProCamera2Client> mClient; 57a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 58a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin virtual bool threadLoop(); 59a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 60a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin Mutex mInputMutex; 61a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 62a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin struct RangeListener { 63a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin int32_t minId; 64a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin int32_t maxId; 65a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin wp<FilteredListener> listener; 66a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin }; 67a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin List<RangeListener> mRangeListeners; 68a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 69a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin void processNewFrames(sp<ProCamera2Client> &client); 70a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 71a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin status_t processListeners(const CameraMetadata &frame, 72a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin sp<ProCamera2Client> &client); 73a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 74a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin CameraMetadata mLastFrame; 75a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; 76a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 77a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 78a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace camera2 79a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace android 80a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 81a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#endif 82