ZslProcessor.h revision da6665cbd06ca58d3357c3002b7366d13e23f152
1da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala/* 2da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 3da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * 4da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * you may not use this file except in compliance with the License. 6da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * You may obtain a copy of the License at 7da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * 8da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * 10da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * See the License for the specific language governing permissions and 14da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * limitations under the License. 15da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 16da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 17da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR_H 18da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR_H 19da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 20da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <utils/Thread.h> 21da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <utils/String16.h> 22da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <utils/Vector.h> 23da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <utils/Mutex.h> 24da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <utils/Condition.h> 25da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include <gui/BufferItemConsumer.h> 26da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include "Parameters.h" 27da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include "FrameProcessor.h" 28da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include "CameraMetadata.h" 29da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include "Camera2Heap.h" 30da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#include "../Camera2Device.h" 31da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 32da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalanamespace android { 33da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 34da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass Camera2Client; 35da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 36da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalanamespace camera2 { 37da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 38da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass CaptureSequencer; 39da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 40da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala/*** 41da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala * ZSL queue processing 42da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala */ 43da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass ZslProcessor: 44da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual public Thread, 45da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual public BufferItemConsumer::FrameAvailableListener, 46da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual public FrameProcessor::FilteredListener, 47da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual public Camera2Device::BufferReleasedListener { 48da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala public: 49da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ZslProcessor(wp<Camera2Client> client, wp<CaptureSequencer> sequencer); 50da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ~ZslProcessor(); 51da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 52da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // From mZslConsumer 53da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual void onFrameAvailable(); 54da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // From FrameProcessor 55da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual void onFrameAvailable(int32_t frameId, CameraMetadata &frame); 56da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 57da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual void onBufferReleased(buffer_handle_t *handle); 58da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 59da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t updateStream(const Parameters ¶ms); 60da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t deleteStream(); 61da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int getStreamId() const; 62da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int getReprocessStreamId() const; 63da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 64da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t pushToReprocess(int32_t requestId); 65da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 66da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 67da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala private: 68da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 69da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 70da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala enum { 71da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala RUNNING, 72da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala LOCKED 73da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala } mState; 74da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 75da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<Camera2Client> mClient; 76da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<CaptureSequencer> mSequencer; 77da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 78da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala mutable Mutex mInputMutex; 79da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool mZslBufferAvailable; 80da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Condition mZslBufferAvailableSignal; 81da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 82da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala enum { 83da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala NO_STREAM = -1 84da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala }; 85da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 86da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int mZslStreamId; 87da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int mZslReprocessStreamId; 88da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala sp<BufferItemConsumer> mZslConsumer; 89da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala sp<ANativeWindow> mZslWindow; 90da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 91da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala struct ZslPair { 92da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala BufferItemConsumer::BufferItem buffer; 93da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala CameraMetadata frame; 94da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala }; 95da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 96da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala static const size_t kZslBufferDepth = 3; 97da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala static const size_t kFrameListDepth = kZslBufferDepth * 2; 98da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Vector<CameraMetadata> mFrameList; 99da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mFrameListHead; 100da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 101da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ZslPair mNextPair; 102da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 103da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Vector<ZslPair> mZslQueue; 104da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mZslQueueHead; 105da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mZslQueueTail; 106da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 107da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual bool threadLoop(); 108da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 109da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t processNewZslBuffer(sp<Camera2Client> &client); 110da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 111da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // Match up entries from frame list to buffers in ZSL queue 112da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void findMatchesLocked(); 113da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; 114da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 115da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 116da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; //namespace camera2 117da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; //namespace android 118da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 119da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#endif 120