173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala/* 273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * Copyright (C) 2012 The Android Open Source Project 373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * 473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * you may not use this file except in compliance with the License. 673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * You may obtain a copy of the License at 773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * 873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * 1073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 1173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 1273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * See the License for the specific language governing permissions and 1473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * limitations under the License. 1573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala */ 1673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 1773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H 1873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#define ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H 1973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 2073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#include <utils/Mutex.h> 2173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#include <utils/String16.h> 2273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#include <gui/BufferItemConsumer.h> 2373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 2473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#include "Parameters.h" 2573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#include "CameraMetadata.h" 2673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 2773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalanamespace android { 2873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 2973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass Camera2Client; 3073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass IMemory; 3173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 3273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalanamespace camera2 { 3373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 3473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass Camera2Heap; 3573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 3673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala/** 3773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala * Management and processing for preview and recording streams 3873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala */ 3973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvalaclass StreamingProcessor: public BufferItemConsumer::FrameAvailableListener { 4073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala public: 4173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala StreamingProcessor(wp<Camera2Client> client); 4273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala ~StreamingProcessor(); 4373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 4473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t setPreviewWindow(sp<ANativeWindow> window); 4573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 4673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala bool haveValidPreviewWindow() const; 4773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 4873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t updatePreviewRequest(const Parameters ¶ms); 4973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t updatePreviewStream(const Parameters ¶ms); 5073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t deletePreviewStream(); 5173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala int getPreviewStreamId() const; 5273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 5373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t setRecordingBufferCount(size_t count); 5473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t updateRecordingRequest(const Parameters ¶ms); 5573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t updateRecordingStream(const Parameters ¶ms); 5673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t deleteRecordingStream(); 5773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala int getRecordingStreamId() const; 5873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 5973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala enum StreamType { 604865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala NONE, 6173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala PREVIEW, 6273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala RECORD 6373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala }; 6473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t startStream(StreamType type, 6573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala const Vector<uint8_t> &outputStreams); 6673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 6773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t stopStream(); 6873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 694865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala // Returns the request ID for the currently streaming request 704865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala // Returns 0 if there is no active request. 714865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala status_t getActiveRequestId() const; 724865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala status_t incrementStreamingIds(); 734865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala 7473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala // Callback for new recording frames from HAL 7573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala virtual void onFrameAvailable(); 7673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala // Callback from stagefright which returns used recording frames 7773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala void releaseRecordingFrame(const sp<IMemory>& mem); 7873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 7973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala status_t dump(int fd, const Vector<String16>& args); 8073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 8173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala private: 8273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala mutable Mutex mMutex; 8373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 8473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala enum { 8573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala NO_STREAM = -1 8673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala }; 8773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 8873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala wp<Camera2Client> mClient; 8973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 904865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala StreamType mActiveRequest; 914865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala 9273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala // Preview-related members 934865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala int32_t mPreviewRequestId; 9473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala int mPreviewStreamId; 9573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala CameraMetadata mPreviewRequest; 9673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala sp<ANativeWindow> mPreviewWindow; 9773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 9873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala // Recording-related members 994865c526e681366481b0ab242ffa1ead57bb02ccEino-Ville Talvala int32_t mRecordingRequestId; 10073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala int mRecordingStreamId; 10173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala int mRecordingFrameCount; 10273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala sp<BufferItemConsumer> mRecordingConsumer; 10373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala sp<ANativeWindow> mRecordingWindow; 10473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala CameraMetadata mRecordingRequest; 10573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala sp<camera2::Camera2Heap> mRecordingHeap; 10673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 10773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala static const size_t kDefaultRecordingHeapCount = 8; 10873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala size_t mRecordingHeapCount; 10973bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala Vector<BufferItemConsumer::BufferItem> mRecordingBuffers; 11073bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala size_t mRecordingHeapHead, mRecordingHeapFree; 11173bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 11273bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala}; 11373bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 11473bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 11573bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala}; // namespace camera2 11673bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala}; // namespace android 11773bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala 11873bbd1f1c493835f191ea2b0b72439292496b40aEino-Ville Talvala#endif 119