StreamingProcessor.h revision 43cbdc5b5545d3344c556014b9afe8249add91e4
143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala/* 243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * 443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * you may not use this file except in compliance with the License. 643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * You may obtain a copy of the License at 743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * 843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * 1043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * See the License for the specific language governing permissions and 1443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * limitations under the License. 1543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala */ 1643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 1743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H 1843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H 1943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 2043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <utils/Mutex.h> 2143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <utils/String16.h> 2243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include <gui/BufferItemConsumer.h> 2343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 2443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include "Parameters.h" 2543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#include "CameraMetadata.h" 2643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 2743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalanamespace android { 2843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 2943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass Camera2Client; 3043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass IMemory; 3143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 3243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalanamespace camera2 { 3343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 3443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass Camera2Heap; 3543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 3643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala/** 3743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala * Management and processing for preview and recording streams 3843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala */ 3943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvalaclass StreamingProcessor: public BufferItemConsumer::FrameAvailableListener { 4043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala public: 4143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala StreamingProcessor(wp<Camera2Client> client); 4243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala ~StreamingProcessor(); 4343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 4443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t setPreviewWindow(sp<ANativeWindow> window); 4543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 4643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala bool haveValidPreviewWindow() const; 4743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 4843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t updatePreviewRequest(const Parameters ¶ms); 4943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t updatePreviewStream(const Parameters ¶ms); 5043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t deletePreviewStream(); 5143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala int getPreviewStreamId() const; 5243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 5343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t setRecordingBufferCount(size_t count); 5443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t updateRecordingRequest(const Parameters ¶ms); 5543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t updateRecordingStream(const Parameters ¶ms); 5643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t deleteRecordingStream(); 5743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala int getRecordingStreamId() const; 5843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 5943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala enum StreamType { 6043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala PREVIEW, 6143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala RECORD 6243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala }; 6343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t startStream(StreamType type, 6443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala const Vector<uint8_t> &outputStreams); 6543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 6643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t stopStream(); 6743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 6843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala // Callback for new recording frames from HAL 6943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala virtual void onFrameAvailable(); 7043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala // Callback from stagefright which returns used recording frames 7143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala void releaseRecordingFrame(const sp<IMemory>& mem); 7243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 7343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala status_t dump(int fd, const Vector<String16>& args); 7443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 7543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala private: 7643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala mutable Mutex mMutex; 7743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 7843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala enum { 7943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala NO_STREAM = -1 8043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala }; 8143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 8243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala wp<Camera2Client> mClient; 8343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 8443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala // Preview-related members 8543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala int mPreviewStreamId; 8643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala CameraMetadata mPreviewRequest; 8743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala sp<ANativeWindow> mPreviewWindow; 8843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 8943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala // Recording-related members 9043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala int mRecordingStreamId; 9143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala int mRecordingFrameCount; 9243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala sp<BufferItemConsumer> mRecordingConsumer; 9343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala sp<ANativeWindow> mRecordingWindow; 9443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala CameraMetadata mRecordingRequest; 9543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala sp<camera2::Camera2Heap> mRecordingHeap; 9643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 9743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala static const size_t kDefaultRecordingHeapCount = 8; 9843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala size_t mRecordingHeapCount; 9943cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala Vector<BufferItemConsumer::BufferItem> mRecordingBuffers; 10043cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala size_t mRecordingHeapHead, mRecordingHeapFree; 10143cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 10243cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala}; 10343cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 10443cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 10543cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala}; // namespace camera2 10643cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala}; // namespace android 10743cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala 10843cbdc5b5545d3344c556014b9afe8249add91e4Eino-Ville Talvala#endif 109