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> 26cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei#include <camera/CaptureResult.h> 27a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 28a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinnamespace android { 29a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 30ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkinclass CameraDeviceBase; 31a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 32a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkinnamespace camera2 { 33a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 34a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin/* Output frame metadata processing thread. This thread waits for new 35a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin * frames from the device, and analyzes them as necessary. 36a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin */ 377b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvalaclass FrameProcessorBase: public Thread { 38a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin public: 398b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh explicit FrameProcessorBase(wp<CameraDeviceBase> device); 407b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala virtual ~FrameProcessorBase(); 41a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 42a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin struct FilteredListener: virtual public RefBase { 43cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei virtual void onResultAvailable(const CaptureResult &result) = 0; 44a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin }; 45a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 46a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin // Register a listener for a range of IDs [minId, maxId). Multiple listeners 47954d248e02e19f8ecd165804b7d063d346154f4cGaurav Batra // can be listening to the same range. Registering the same listener with 48954d248e02e19f8ecd165804b7d063d346154f4cGaurav Batra // the same range of IDs has no effect. 4925a0aef19e170d2695f64b4c48296e7914155a88Zhijun He // sendPartials controls whether partial results will be sent. 50ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin status_t registerListener(int32_t minId, int32_t maxId, 518b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh const wp<FilteredListener>& listener, 5225a0aef19e170d2695f64b4c48296e7914155a88Zhijun He bool sendPartials = true); 53ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin status_t removeListener(int32_t minId, int32_t maxId, 548b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh const wp<FilteredListener>& listener); 55a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 56a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin void dump(int fd, const Vector<String16>& args); 57ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin protected: 58a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin static const nsecs_t kWaitDuration = 10000000; // 10 ms 59ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin wp<CameraDeviceBase> mDevice; 60a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 61a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin virtual bool threadLoop(); 62a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 63a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin Mutex mInputMutex; 64215bb3499c7eeea6303e55fac66452f2574c022aIgor Murashkin Mutex mLastFrameMutex; 65a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 66a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin struct RangeListener { 67a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin int32_t minId; 68a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin int32_t maxId; 69a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin wp<FilteredListener> listener; 7025a0aef19e170d2695f64b4c48296e7914155a88Zhijun He bool sendPartials; 71a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin }; 72a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin List<RangeListener> mRangeListeners; 73a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 74204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He // Number of partial result the HAL will potentially send. 75204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He int32_t mNumPartialResults; 76204e3295e2814052aef7e45ee9edd60128efbbd0Zhijun He 77ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin void processNewFrames(const sp<CameraDeviceBase> &device); 78ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin 79cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei virtual bool processSingleFrame(CaptureResult &result, 80ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin const sp<CameraDeviceBase> &device); 81a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 82cb0652e5a850b2fcd919e977247e87239efaf70eJianing Wei status_t processListeners(const CaptureResult &result, 83ce124da179775a81ad7dcc3f33315eca451e66f2Igor Murashkin const sp<CameraDeviceBase> &device); 84a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 85a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin CameraMetadata mLastFrame; 86a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; 87a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 88a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 89a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace camera2 90a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin}; //namespace android 91a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin 92a91537e268f2b35f9f0dfdc0c4f84655c93285aeIgor Murashkin#endif 93