JpegProcessor.h revision d09801b99503b57c35e321ad9afa7e861e012813
1ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/* 2ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 3ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * 4ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * you may not use this file except in compliance with the License. 6ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * You may obtain a copy of the License at 7ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * 8ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * 10ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * See the License for the specific language governing permissions and 14ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * limitations under the License. 15ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */ 16ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 17da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H 18da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_JPEGPROCESSOR_H 19ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 20ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Thread.h> 21ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/String16.h> 22ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Vector.h> 23ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Mutex.h> 24ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <utils/Condition.h> 25ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include <gui/CpuConsumer.h> 26ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#include "Parameters.h" 277efa520c76e6a1f6b3146404cc6aca5a8353583aIgor Murashkin#include "camera/CameraMetadata.h" 28ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 29ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalanamespace android { 30ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 31ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalaclass Camera2Client; 32d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvalaclass CameraDeviceBase; 3373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass MemoryHeapBase; 34ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 35ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvalanamespace camera2 { 36ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 37da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass CaptureSequencer; 38da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 39ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/*** 40ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Still image capture output image processing 41ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */ 42da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass JpegProcessor: 43ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala public Thread, public CpuConsumer::FrameAvailableListener { 44ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala public: 45d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer); 46da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ~JpegProcessor(); 47ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 48b3a95a56f0adaf2b60ff164275487d1870442734Igor Murashkin // CpuConsumer listener implementation 49ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala void onFrameAvailable(); 50ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 51ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala status_t updateStream(const Parameters ¶ms); 52ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala status_t deleteStream(); 53ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala int getStreamId() const; 54ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 55da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 56ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala private: 57ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 58d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala wp<CameraDeviceBase> mDevice; 59da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<CaptureSequencer> mSequencer; 60d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala int mId; 61ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 62ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala mutable Mutex mInputMutex; 63ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala bool mCaptureAvailable; 64ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala Condition mCaptureAvailableSignal; 65ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 66ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala enum { 67ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala NO_STREAM = -1 68ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala }; 69ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 70ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala int mCaptureStreamId; 71ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala sp<CpuConsumer> mCaptureConsumer; 72ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala sp<ANativeWindow> mCaptureWindow; 73a6b4c40e70eafc5aba16163999de6d3e26667b89Alex Ray sp<MemoryHeapBase> mCaptureHeap; 74ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 75ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala virtual bool threadLoop(); 76ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 77d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala status_t processNewCapture(); 780fa1e760f7093d025c977e5813e8d3a04c863ce3Alex Ray size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize); 79ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 80ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; 81ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 82ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 83ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace camera2 84ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace android 85ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 86ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#endif 87