12863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala/* 22863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 32863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * 42863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 52863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * you may not use this file except in compliance with the License. 62863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * You may obtain a copy of the License at 72863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * 82863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 92863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * 102863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 112863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 122863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * See the License for the specific language governing permissions and 142863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * limitations under the License. 152863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala */ 162863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 172863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H 182863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H 192863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 202863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Thread.h> 212863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/String16.h> 222863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Vector.h> 232863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Mutex.h> 242863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <utils/Condition.h> 252863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include <gui/CpuConsumer.h> 262863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include "Parameters.h" 27bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h" 282863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#include "Camera2Heap.h" 292863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 302863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalanamespace android { 312863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 322863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalaclass Camera2Client; 3302f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvalaclass CameraDeviceBase; 342863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 352863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalanamespace camera2 { 362863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 372863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala/*** 382863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala * Still image capture output image processing 392863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala */ 402863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvalaclass CallbackProcessor: 412863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala public Thread, public CpuConsumer::FrameAvailableListener { 422863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala public: 4302f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala CallbackProcessor(sp<Camera2Client> client); 442863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala ~CallbackProcessor(); 452863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 462863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala void onFrameAvailable(); 472863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 482863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala status_t updateStream(const Parameters ¶ms); 492863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala status_t deleteStream(); 502863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala int getStreamId() const; 512863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 5269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 532863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala private: 542863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 552863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala wp<Camera2Client> mClient; 5602f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala wp<CameraDeviceBase> mDevice; 5702f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala int mId; 582863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 592863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala mutable Mutex mInputMutex; 602863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala bool mCallbackAvailable; 612863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala Condition mCallbackAvailableSignal; 622863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 632863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala enum { 642863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala NO_STREAM = -1 652863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala }; 662863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 672863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala int mCallbackStreamId; 682863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala static const size_t kCallbackHeapCount = 6; 692863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala sp<CpuConsumer> mCallbackConsumer; 702863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala sp<ANativeWindow> mCallbackWindow; 712863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala sp<Camera2Heap> mCallbackHeap; 722863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala int mCallbackHeapId; 732863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala size_t mCallbackHeapHead, mCallbackHeapFree; 742863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 752863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala virtual bool threadLoop(); 762863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 772863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala status_t processNewCallback(sp<Camera2Client> &client); 7802f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala // Used when shutting down 7902f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala status_t discardNewCallback(); 8092086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala 8192086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala // Convert from flexible YUV to NV21 or YV12 8292086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala status_t convertFromFlexibleYuv(int32_t previewFormat, 8392086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala uint8_t *dst, 8492086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala const CpuConsumer::LockedBuffer &src, 8592086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala uint32_t dstYStride, 8692086e6d402dcad6e199325ef097d7707b3d1f83Eino-Ville Talvala uint32_t dstCStride) const; 872863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala}; 882863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 892863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 902863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala}; //namespace camera2 912863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala}; //namespace android 922863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala 932863918926c82d6002de160c9d499be9b6a3856eEino-Ville Talvala#endif 94