ZslProcessor3.h revision 7b82efe7a376c882f8f938e1c41b8311a8cdda4a
15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2013 The Android Open Source Project 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * you may not use this file except in compliance with the License. 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You may obtain a copy of the License at 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * See the License for the specific language governing permissions and 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * limitations under the License. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR3_H 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define ANDROID_SERVERS_CAMERA_CAMERA2_ZSLPROCESSOR3_H 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <utils/Thread.h> 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <utils/String16.h> 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <utils/Vector.h> 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <utils/Mutex.h> 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <utils/Condition.h> 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <gui/BufferItemConsumer.h> 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include <camera/CameraMetadata.h> 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "api1/client2/FrameProcessor.h" 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "api1/client2/ZslProcessorInterface.h" 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "device3/Camera3ZslStream.h" 315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)namespace android { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class Camera2Client; 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace camera2 { 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class CaptureSequencer; 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class Parameters; 405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)/*** 425267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * ZSL queue processing 435267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 445267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)class ZslProcessor3 : 455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) public ZslProcessorInterface, 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public camera3::Camera3StreamBufferListener, 475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual public Thread, 485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual public FrameProcessor::FilteredListener { 495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) public: 505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ZslProcessor3(sp<Camera2Client> client, wp<CaptureSequencer> sequencer); 515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ~ZslProcessor3(); 525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // From FrameProcessor 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual void onFrameAvailable(int32_t frameId, const CameraMetadata &frame); 555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) /** 575267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) **************************************** 585267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * ZslProcessorInterface implementation * 595267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) **************************************** 605267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 615267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 625267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual status_t updateStream(const Parameters ¶ms); 635267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual status_t deleteStream(); 645267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual int getStreamId() const; 655267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual status_t pushToReprocess(int32_t requestId); 675267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual status_t clearZslQueue(); 6851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void dump(int fd, const Vector<String16>& args) const; 705267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 71 protected: 72 /** 73 ********************************************** 74 * Camera3StreamBufferListener implementation * 75 ********************************************** 76 */ 77 typedef camera3::Camera3StreamBufferListener::BufferInfo BufferInfo; 78 // Buffer was acquired by the HAL 79 virtual void onBufferAcquired(const BufferInfo& bufferInfo); 80 // Buffer was released by the HAL 81 virtual void onBufferReleased(const BufferInfo& bufferInfo); 82 83 private: 84 static const nsecs_t kWaitDuration = 10000000; // 10 ms 85 86 enum { 87 RUNNING, 88 LOCKED 89 } mState; 90 91 wp<Camera2Client> mClient; 92 wp<CaptureSequencer> mSequencer; 93 94 const int mId; 95 96 mutable Mutex mInputMutex; 97 98 enum { 99 NO_STREAM = -1 100 }; 101 102 int mZslStreamId; 103 sp<camera3::Camera3ZslStream> mZslStream; 104 105 struct ZslPair { 106 BufferItemConsumer::BufferItem buffer; 107 CameraMetadata frame; 108 }; 109 110 static const size_t kZslBufferDepth = 4; 111 static const size_t kFrameListDepth = kZslBufferDepth * 2; 112 Vector<CameraMetadata> mFrameList; 113 size_t mFrameListHead; 114 115 ZslPair mNextPair; 116 117 Vector<ZslPair> mZslQueue; 118 size_t mZslQueueHead; 119 size_t mZslQueueTail; 120 121 CameraMetadata mLatestCapturedRequest; 122 123 virtual bool threadLoop(); 124 125 status_t clearZslQueueLocked(); 126 127 void dumpZslQueue(int id) const; 128 129 nsecs_t getCandidateTimestampLocked(size_t* metadataIdx) const; 130}; 131 132 133}; //namespace camera2 134}; //namespace android 135 136#endif 137