ZslProcessor.h revision 768cf093dade9085e0ad6305d9f7c16ae9ad9e26
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); 65768cf093dade9085e0ad6305d9f7c16ae9ad9e26Eino-Ville Talvala status_t clearZslQueue(); 66da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 67da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 68da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala private: 69da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 70da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 71da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala enum { 72da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala RUNNING, 73da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala LOCKED 74da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala } mState; 75da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 76da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<Camera2Client> mClient; 77da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<CaptureSequencer> mSequencer; 78da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 79da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala mutable Mutex mInputMutex; 80da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala bool mZslBufferAvailable; 81da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Condition mZslBufferAvailableSignal; 82da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 83da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala enum { 84da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala NO_STREAM = -1 85da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala }; 86da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 87da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int mZslStreamId; 88da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala int mZslReprocessStreamId; 89da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala sp<BufferItemConsumer> mZslConsumer; 90da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala sp<ANativeWindow> mZslWindow; 91da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 92da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala struct ZslPair { 93da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala BufferItemConsumer::BufferItem buffer; 94da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala CameraMetadata frame; 95da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala }; 96da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 97bdde5f884eaf270ab4b806849f3122a46cd872ceEino-Ville Talvala static const size_t kZslBufferDepth = 4; 98da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala static const size_t kFrameListDepth = kZslBufferDepth * 2; 99da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Vector<CameraMetadata> mFrameList; 100da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mFrameListHead; 101da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 102da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ZslPair mNextPair; 103da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 104da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala Vector<ZslPair> mZslQueue; 105da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mZslQueueHead; 106da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala size_t mZslQueueTail; 107da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 108da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala virtual bool threadLoop(); 109da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 110da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala status_t processNewZslBuffer(sp<Camera2Client> &client); 111da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 112da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala // Match up entries from frame list to buffers in ZSL queue 113da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void findMatchesLocked(); 11497b38a81ac989ccba02d726011a82541f14166dfEino-Ville Talvala 115768cf093dade9085e0ad6305d9f7c16ae9ad9e26Eino-Ville Talvala status_t clearZslQueueLocked(); 116768cf093dade9085e0ad6305d9f7c16ae9ad9e26Eino-Ville Talvala 11797b38a81ac989ccba02d726011a82541f14166dfEino-Ville Talvala void dumpZslQueue(int id) const; 118da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; 119da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 120da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 121da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; //namespace camera2 122da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala}; //namespace android 123da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 124da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#endif 125