FrameProcessorBase.h revision f1e98d857ec377f2c9b916073d40732e6ebb7ced
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 Murashkinnamespace android { 28a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 29ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkinclass CameraDeviceBase; 30a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 31a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinnamespace camera2 { 32a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 33a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin/* Output frame metadata processing thread. This thread waits for new 34a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * frames from the device, and analyzes them as necessary. 35a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin */ 367b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass FrameProcessorBase: public Thread { 37a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin public: 387b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala FrameProcessorBase(wp<CameraDeviceBase> device); 397b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala virtual ~FrameProcessorBase(); 40a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 41a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin struct FilteredListener: virtual public RefBase { 42f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala virtual void onFrameAvailable(int32_t requestId, 43ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin const CameraMetadata &frame) = 0; 44a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin }; 45a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 46a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin // Register a listener for a range of IDs [minId, maxId). Multiple listeners 47a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin // can be listening to the same range 48ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin status_t registerListener(int32_t minId, int32_t maxId, 49ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin wp<FilteredListener> listener); 50ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin status_t removeListener(int32_t minId, int32_t maxId, 51ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin wp<FilteredListener> listener); 52a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 53a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin void dump(int fd, const Vector<String16>& args); 54ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin protected: 55a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin static const nsecs_t kWaitDuration = 10000000; // 10 ms 56ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin wp<CameraDeviceBase> mDevice; 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 69ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin void processNewFrames(const sp<CameraDeviceBase> &device); 70ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin 71ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin virtual bool processSingleFrame(CameraMetadata &frame, 72ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin const sp<CameraDeviceBase> &device); 73a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 74a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin status_t processListeners(const CameraMetadata &frame, 75ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin const sp<CameraDeviceBase> &device); 76a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 77a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin CameraMetadata mLastFrame; 78a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; 79a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 80a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 81a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace camera2 82a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace android 83a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 84a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#endif 85