1c3dbf1a40df85b75e5805382838a90416f69730fJames Painter/* 2c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Copyright (C) 2012 The Android Open Source Project 3c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * 4c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Licensed under the Apache License, Version 2.0 (the "License"); 5c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * you may not use this file except in compliance with the License. 6c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * You may obtain a copy of the License at 7c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * 8c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * http://www.apache.org/licenses/LICENSE-2.0 9c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * 10c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * Unless required by applicable law or agreed to in writing, software 11c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * distributed under the License is distributed on an "AS IS" BASIS, 12c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * See the License for the specific language governing permissions and 14c3dbf1a40df85b75e5805382838a90416f69730fJames Painter * limitations under the License. 15c3dbf1a40df85b75e5805382838a90416f69730fJames Painter */ 16c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 17c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#ifndef ANDROID_SERVERS_CAMERA_BURST_CAPTURE_H 18c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#define ANDROID_SERVERS_CAMERA_BURST_CAPTURE_H 19c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 20bd02dd1bf1f34eb4e100d0d058f1fe5a2790d67eIgor Murashkin#include "camera/CameraMetadata.h" 21c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <binder/MemoryBase.h> 22c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <binder/MemoryHeapBase.h> 23c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include <gui/CpuConsumer.h> 24c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#include "Camera2Device.h" 25c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 26c3dbf1a40df85b75e5805382838a90416f69730fJames Painternamespace android { 27c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 28c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass Camera2Client; 29c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 30c3dbf1a40df85b75e5805382838a90416f69730fJames Painternamespace camera2 { 31c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 32c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass CaptureSequencer; 33c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 34c3dbf1a40df85b75e5805382838a90416f69730fJames Painterclass BurstCapture : public virtual Thread, 35c3dbf1a40df85b75e5805382838a90416f69730fJames Painter public virtual CpuConsumer::FrameAvailableListener 36c3dbf1a40df85b75e5805382838a90416f69730fJames Painter{ 37c3dbf1a40df85b75e5805382838a90416f69730fJames Painterpublic: 38c3dbf1a40df85b75e5805382838a90416f69730fJames Painter BurstCapture(wp<Camera2Client> client, wp<CaptureSequencer> sequencer); 39c3dbf1a40df85b75e5805382838a90416f69730fJames Painter virtual ~BurstCapture(); 40c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 41c3dbf1a40df85b75e5805382838a90416f69730fJames Painter virtual void onFrameAvailable(); 42c3dbf1a40df85b75e5805382838a90416f69730fJames Painter virtual status_t start(Vector<CameraMetadata> &metadatas, int32_t firstCaptureId); 43c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 44c3dbf1a40df85b75e5805382838a90416f69730fJames Painterprotected: 45c3dbf1a40df85b75e5805382838a90416f69730fJames Painter Mutex mInputMutex; 46c3dbf1a40df85b75e5805382838a90416f69730fJames Painter bool mInputChanged; 47c3dbf1a40df85b75e5805382838a90416f69730fJames Painter Condition mInputSignal; 48c3dbf1a40df85b75e5805382838a90416f69730fJames Painter int mCaptureStreamId; 49c3dbf1a40df85b75e5805382838a90416f69730fJames Painter wp<Camera2Client> mClient; 50c3dbf1a40df85b75e5805382838a90416f69730fJames Painter wp<CaptureSequencer> mSequencer; 51c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 52c3dbf1a40df85b75e5805382838a90416f69730fJames Painter // Should only be accessed by processing thread 53c3dbf1a40df85b75e5805382838a90416f69730fJames Painter enum { 54c3dbf1a40df85b75e5805382838a90416f69730fJames Painter NO_STREAM = -1 55c3dbf1a40df85b75e5805382838a90416f69730fJames Painter }; 56c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 57c3dbf1a40df85b75e5805382838a90416f69730fJames Painter CpuConsumer::LockedBuffer* jpegEncode( 58c3dbf1a40df85b75e5805382838a90416f69730fJames Painter CpuConsumer::LockedBuffer *imgBuffer, 59c3dbf1a40df85b75e5805382838a90416f69730fJames Painter int quality); 60c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 61c3dbf1a40df85b75e5805382838a90416f69730fJames Painter virtual status_t processFrameAvailable(sp<Camera2Client> &client); 62c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 63c3dbf1a40df85b75e5805382838a90416f69730fJames Painterprivate: 64c3dbf1a40df85b75e5805382838a90416f69730fJames Painter virtual bool threadLoop(); 65c3dbf1a40df85b75e5805382838a90416f69730fJames Painter static const nsecs_t kWaitDuration = 10000000; // 10 ms 66c3dbf1a40df85b75e5805382838a90416f69730fJames Painter}; 67c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 68c3dbf1a40df85b75e5805382838a90416f69730fJames Painter} // namespace camera2 69c3dbf1a40df85b75e5805382838a90416f69730fJames Painter} // namespace android 70c3dbf1a40df85b75e5805382838a90416f69730fJames Painter 71c3dbf1a40df85b75e5805382838a90416f69730fJames Painter#endif 72