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> 267b82efe7a376c882f8f938e1c41b8311a8cdda4aEino-Ville Talvala 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; 38d309fb9c8a2c4564d88fffba19c4e3688e4b862bEino-Ville Talvalastruct Parameters; 39da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala 40ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala/*** 41ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala * Still image capture output image processing 42ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala */ 43da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvalaclass JpegProcessor: 44b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang public Thread, public CpuConsumer::FrameAvailableListener, 45b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang public camera3::Camera3StreamBufferListener { 46ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala public: 47d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala JpegProcessor(sp<Camera2Client> client, wp<CaptureSequencer> sequencer); 48da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala ~JpegProcessor(); 49ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 50b3a95a56f0adaf2b60ff164275487d1870442734Igor Murashkin // CpuConsumer listener implementation 5104f101c35eaa90b1f95939afac30674ec1611e6fDan Stoza void onFrameAvailable(const BufferItem& item); 52ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 53b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang // Camera3StreamBufferListener implementation 54b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang void onBufferAcquired(const BufferInfo& bufferInfo) override; 55b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang void onBufferReleased(const BufferInfo& bufferInfo) override; 56b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang 57ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala status_t updateStream(const Parameters ¶ms); 58ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala status_t deleteStream(); 59ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala int getStreamId() const; 60ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 61da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala void dump(int fd, const Vector<String16>& args) const; 62ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala private: 63ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala static const nsecs_t kWaitDuration = 10000000; // 10 ms 64d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala wp<CameraDeviceBase> mDevice; 65da6665cbd06ca58d3357c3002b7366d13e23f152Eino-Ville Talvala wp<CaptureSequencer> mSequencer; 66d09801b99503b57c35e321ad9afa7e861e012813Eino-Ville Talvala int mId; 67ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 68ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala mutable Mutex mInputMutex; 69b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang bool mCaptureDone; 70b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang bool mCaptureSuccess; 71b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang Condition mCaptureDoneSignal; 72ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 73ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala enum { 74ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala NO_STREAM = -1 75ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala }; 76ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 77ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala int mCaptureStreamId; 78ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala sp<CpuConsumer> mCaptureConsumer; 79727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<Surface> mCaptureWindow; 80727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<MemoryHeapBase> mCaptureHeap; 81ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 82ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala virtual bool threadLoop(); 83ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 84b0fdc1ed2182fe851ef7ca98a1b4a552b53b3033Shuzhen Wang status_t processNewCapture(bool captureSuccess); 850fa1e760f7093d025c977e5813e8d3a04c863ce3Alex Ray size_t findJpegSize(uint8_t* jpegBuffer, size_t maxSize); 86ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 87ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; 88ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 89ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 90ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace camera2 91ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala}; //namespace android 92ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala 93ea0d51b5ed0b474433b02414f9133b835f972569Eino-Ville Talvala#endif 94