1177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala/* 2177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 3177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * 4177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * you may not use this file except in compliance with the License. 6177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * You may obtain a copy of the License at 7177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * 8177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * 10177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * See the License for the specific language governing permissions and 14177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * limitations under the License. 15177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala */ 16177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 1769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H 1869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H 19177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 20177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Thread.h> 21177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/String16.h> 22177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Vector.h> 23177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Mutex.h> 24177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <utils/Condition.h> 25177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include <gui/CpuConsumer.h> 26177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#include "Parameters.h" 27bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h" 28177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 29177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalanamespace android { 30177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 31177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalaclass Camera2Client; 3202f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvalaclass CameraDeviceBase; 3343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass MemoryHeapBase; 34177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 35177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvalanamespace camera2 { 36177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 3769230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaclass CaptureSequencer; 3869230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala 39177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala/*** 40177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala * Still image capture output image processing 41177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala */ 4269230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvalaclass JpegProcessor: 43177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala public Thread, public CpuConsumer::FrameAvailableListener { 44177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala public: 4502f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer); 4669230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala ~JpegProcessor(); 47177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 484d2f2e8414df33337d4f09e5235719dfcc705674Igor Murashkin // CpuConsumer listener implementation 49177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala void onFrameAvailable(); 50177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 51177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala status_t updateStream(const Parameters ¶ms); 52177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala status_t deleteStream(); 53177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala int getStreamId() const; 54177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 5569230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 56177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala private: 57177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 5802f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala wp<CameraDeviceBase> mDevice; 5969230df9905534cda15becd44c0109874c4be5f0Eino-Ville Talvala wp<CaptureSequencer> mSequencer; 6002f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala int mId; 61177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 62177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala mutable Mutex mInputMutex; 63177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala bool mCaptureAvailable; 64177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala Condition mCaptureAvailableSignal; 65177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 66177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala enum { 67177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala NO_STREAM = -1 68177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala }; 69177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 70177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala int mCaptureStreamId; 71177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala sp<CpuConsumer> mCaptureConsumer; 72177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala sp<ANativeWindow> mCaptureWindow; 7312c5d13c644cef1774cec2aafcbfeb4b205ba70fAlex Ray sp<MemoryHeapBase> mCaptureHeap; 74177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 75177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala virtual bool threadLoop(); 76177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 7702f8457cf788e09e4f0c302dda453f13293009e7Eino-Ville Talvala status_t processNewCapture(); 786751c093886112f4774bc3de514268e7b85ea417Alex Ray size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize); 79177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 80177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala}; 81177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 82177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 83177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala}; //namespace camera2 84177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala}; //namespace android 85177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala 86177bd3489e73ed86cf47c485c88292bf399bd48aEino-Ville Talvala#endif 87