ZslProcessor3.h revision 754fb0225369123ef6e369fd91c48071dcf6057c
1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Copyright (C) 2013 The Android Open Source Project 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * you may not use this file except in compliance with the License. 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * You may obtain a copy of the License at 7aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner * 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * See the License for the specific language governing permissions and 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * limitations under the License. 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR3_H 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR3_H 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <utils/Thread.h> 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <utils/String16.h> 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <utils/Vector.h> 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <utils/Mutex.h> 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <utils/Condition.h> 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <gui/BufferItemConsumer.h> 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <camera/CameraMetadata.h> 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "api1/client2/FrameProcessor.h" 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "api1/client2/ZslProcessorInterface.h" 30aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner#include "device3/Camera3ZslStream.h" 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectnamespace android { 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectclass Camera2Client; 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 36aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turnernamespace camera2 { 37aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Projectclass CaptureSequencer; 39aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turnerclass Parameters; 40aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 41aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner/*** 42aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner * ZSL queue processing 43aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner */ 44aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turnerclass ZslProcessor3 : 45aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner public ZslProcessorInterface, 46aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner public camera3::Camera3StreamBufferListener, 47aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner virtual public Thread, 48aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner virtual public FrameProcessor::FilteredListener { 49aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner public: 50aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner ZslProcessor3(sp<Camera2Client> client, wp<CaptureSequencer> sequencer); 51aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner ~ZslProcessor3(); 52aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 53aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner // From FrameProcessor::FilteredListener 54aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner virtual void onResultAvailable(const CaptureResult &result); 55aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 56aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner /** 57aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner **************************************** 58aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner * ZslProcessorInterface implementation * 59aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner **************************************** 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual status_t updateStream(const Parameters ¶ms); 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual status_t deleteStream(); 64aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner virtual int getStreamId() const; 65aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual status_t pushToReprocess(int32_t requestId); 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual status_t clearZslQueue(); 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void dump(int fd, const Vector<String16>& args) const; 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project protected: 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /** 73aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner ********************************************** 74aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner * Camera3StreamBufferListener implementation * 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ********************************************** 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef camera3::Camera3StreamBufferListener::BufferInfo BufferInfo; 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project // Buffer was acquired by the HAL 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual void onBufferAcquired(const BufferInfo& bufferInfo); 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project // Buffer was released by the HAL 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual void onBufferReleased(const BufferInfo& bufferInfo); 82aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 83aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner private: 84aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner static const nsecs_t kWaitDuration = 10000000; // 10 ms 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project enum { 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project RUNNING, 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project LOCKED 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } mState; 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project wp<Camera2Client> mClient; 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project wp<CaptureSequencer> mSequencer; 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const int mId; 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project mutable Mutex mInputMutex; 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project enum { 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project NO_STREAM = -1 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project }; 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project int mZslStreamId; 103295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner sp<camera3::Camera3ZslStream> mZslStream; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 105295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner struct ZslPair { 106aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner BufferItemConsumer::BufferItem buffer; 107aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner CameraMetadata frame; 108aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner }; 109aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner 110aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner static const int32_t kDefaultMaxPipelineDepth = 4; 111aeb407daf3711a10a27f3bc2223c5eb05158076eDavid 'Digit' Turner size_t mBufferQueueDepth; 112295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner size_t mFrameListDepth; 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Vector<CameraMetadata> mFrameList; 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size_t mFrameListHead; 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 11641371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier ZslPair mNextPair; 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Vector<ZslPair> mZslQueue; 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size_t mZslQueueHead; 12041371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier size_t mZslQueueTail; 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project CameraMetadata mLatestCapturedRequest; 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bool mHasFocuser; 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project virtual bool threadLoop(); 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 128295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner status_t clearZslQueueLocked(); 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void clearZslResultQueueLocked(); 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void dumpZslQueue(int id) const; 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project nsecs_t getCandidateTimestampLocked(size_t* metadataIdx) const; 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project}; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 13841371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier}; //namespace camera2 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project}; //namespace android 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 14241371e1e39c8528eb0c4bc40683c736e6683e60cEric Vannier