1d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala/* 2d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 3d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * 4d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * you may not use this file except in compliance with the License. 6d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * You may obtain a copy of the License at 7d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * 8d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * 10d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * See the License for the specific language governing permissions and 14d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * limitations under the License. 15d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala */ 16d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 17d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H 18d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_CALLBACKPROCESSOR_H 19d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 20d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Thread.h> 21d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/String16.h> 22d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Vector.h> 23d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Mutex.h> 24d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <utils/Condition.h> 25d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#include <gui/CpuConsumer.h> 267b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala 277b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala#include "api1/client2/Camera2Heap.h" 28d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 29d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalanamespace android { 30d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 31d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalaclass Camera2Client; 32d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvalaclass CameraDeviceBase; 33d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 34d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalanamespace camera2 { 35d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 36d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvalastruct Parameters; 377b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala 38d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala/*** 39d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala * Still image capture output image processing 40d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala */ 41d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvalaclass CallbackProcessor: 42d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala public Thread, public CpuConsumer::FrameAvailableListener { 43d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala public: 448b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh explicit CallbackProcessor(sp<Camera2Client> client); 45d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala ~CallbackProcessor(); 46d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 4704f101c35eaa90b1f95939afac30674ec1611e6fDan Stoza void onFrameAvailable(const BufferItem& item); 48d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 493ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // Set to NULL to disable the direct-to-app callback window 508b0b971b1416738f22488a80be726d1ec12552a8Chih-Hung Hsieh status_t setCallbackWindow(const sp<Surface>& callbackWindow); 51d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala status_t updateStream(const Parameters ¶ms); 52d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala status_t deleteStream(); 53d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala int getStreamId() const; 54d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 55da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 56d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala private: 57d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 58d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala wp<Camera2Client> mClient; 59d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala wp<CameraDeviceBase> mDevice; 60d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala int mId; 61d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 62d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala mutable Mutex mInputMutex; 63d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala bool mCallbackAvailable; 64d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala Condition mCallbackAvailableSignal; 65d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 66d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala enum { 67d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala NO_STREAM = -1 68d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala }; 69d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 703ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // True if mCallbackWindow is a remote consumer, false if just the local 713ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala // mCallbackConsumer 723ee3550a2f529cbf56d87d8503f59a8f45dccf32Eino-Ville Talvala bool mCallbackToApp; 73d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala int mCallbackStreamId; 74d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala static const size_t kCallbackHeapCount = 6; 75d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala sp<CpuConsumer> mCallbackConsumer; 76727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<Surface> mCallbackWindow; 77d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala sp<Camera2Heap> mCallbackHeap; 78d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala size_t mCallbackHeapHead, mCallbackHeapFree; 79d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 80d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala virtual bool threadLoop(); 81d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 82d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala status_t processNewCallback(sp<Camera2Client> &client); 83d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala // Used when shutting down 84d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala status_t discardNewCallback(); 854a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala 864a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala // Convert from flexible YUV to NV21 or YV12 874a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala status_t convertFromFlexibleYuv(int32_t previewFormat, 884a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala uint8_t *dst, 894a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala const CpuConsumer::LockedBuffer &src, 904a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala uint32_t dstYStride, 914a66ad403b21a256773c719ae39f7b5e705b244eEino-Ville Talvala uint32_t dstCStride) const; 92d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala}; 93d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 94d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 95d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala}; //namespace camera2 96d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala}; //namespace android 97d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala 98d86a6880fe86bda21a9b53b240996fc410a512a5Eino-Ville Talvala#endif 99