From 7b82efe7a376c882f8f938e1c41b8311a8cdda4a Mon Sep 17 00:00:00 2001 From: Eino-Ville Talvala Date: Thu, 25 Jul 2013 17:12:35 -0700 Subject: Camera: Rename new API to camera2, rearrange camera service - Support API rename from photography to camera2 - Reorganize camera service files - API support files to api1/, api2/, api_pro/ - HAL device support files into device{1,2,3}/ - Common files into common/ - Camera service remains at top-level Change-Id: Ie474c12536f543832fba0a2dc936ac4fd39fe6a9 --- .../api1/client2/StreamingProcessor.h | 143 +++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 services/camera/libcameraservice/api1/client2/StreamingProcessor.h (limited to 'services/camera/libcameraservice/api1/client2/StreamingProcessor.h') diff --git a/services/camera/libcameraservice/api1/client2/StreamingProcessor.h b/services/camera/libcameraservice/api1/client2/StreamingProcessor.h new file mode 100644 index 0000000..d879b83 --- /dev/null +++ b/services/camera/libcameraservice/api1/client2/StreamingProcessor.h @@ -0,0 +1,143 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H +#define ANDROID_SERVERS_CAMERA_CAMERA2_STREAMINGPROCESSOR_H + +#include +#include +#include + +#include "camera/CameraMetadata.h" + +namespace android { + +class Camera2Client; +class CameraDeviceBase; +class IMemory; + +namespace camera2 { + +class Parameters; +class Camera2Heap; + +/** + * Management and processing for preview and recording streams + */ +class StreamingProcessor: + public Thread, public BufferItemConsumer::FrameAvailableListener { + public: + StreamingProcessor(sp client); + ~StreamingProcessor(); + + status_t setPreviewWindow(sp window); + + bool haveValidPreviewWindow() const; + + status_t updatePreviewRequest(const Parameters ¶ms); + status_t updatePreviewStream(const Parameters ¶ms); + status_t deletePreviewStream(); + int getPreviewStreamId() const; + + status_t setRecordingBufferCount(size_t count); + status_t updateRecordingRequest(const Parameters ¶ms); + status_t updateRecordingStream(const Parameters ¶ms); + status_t deleteRecordingStream(); + int getRecordingStreamId() const; + + enum StreamType { + NONE, + PREVIEW, + RECORD + }; + status_t startStream(StreamType type, + const Vector &outputStreams); + + // Toggle between paused and unpaused. Stream must be started first. + status_t togglePauseStream(bool pause); + + status_t stopStream(); + + // Returns the request ID for the currently streaming request + // Returns 0 if there is no active request. + status_t getActiveRequestId() const; + status_t incrementStreamingIds(); + + // Callback for new recording frames from HAL + virtual void onFrameAvailable(); + // Callback from stagefright which returns used recording frames + void releaseRecordingFrame(const sp& mem); + + status_t dump(int fd, const Vector& args); + + private: + mutable Mutex mMutex; + + enum { + NO_STREAM = -1 + }; + + wp mClient; + wp mDevice; + int mId; + + StreamType mActiveRequest; + bool mPaused; + + Vector mActiveStreamIds; + + // Preview-related members + int32_t mPreviewRequestId; + int mPreviewStreamId; + CameraMetadata mPreviewRequest; + sp mPreviewWindow; + + // Recording-related members + static const nsecs_t kWaitDuration = 50000000; // 50 ms + + int32_t mRecordingRequestId; + int mRecordingStreamId; + int mRecordingFrameCount; + sp mRecordingConsumer; + sp mRecordingWindow; + CameraMetadata mRecordingRequest; + sp mRecordingHeap; + + bool mRecordingFrameAvailable; + Condition mRecordingFrameAvailableSignal; + + static const size_t kDefaultRecordingHeapCount = 8; + size_t mRecordingHeapCount; + Vector mRecordingBuffers; + size_t mRecordingHeapHead, mRecordingHeapFree; + + virtual bool threadLoop(); + + status_t processRecordingFrame(); + + // Unilaterally free any buffers still outstanding to stagefright + void releaseAllRecordingFramesLocked(); + + // Determine if the specified stream is currently in use + static bool isStreamActive(const Vector &streams, + uint8_t recordingStreamId); +}; + + +}; // namespace camera2 +}; // namespace android + +#endif -- cgit v1.1 From d1d6467d3bcbc1305eeba0176a2edf04925c368e Mon Sep 17 00:00:00 2001 From: Zhijun He Date: Fri, 6 Sep 2013 15:00:01 -0700 Subject: Camera: Correct stream id types Bug: 10604704 Change-Id: I223ac5d200eb6439c08955fb7ad586592099fbae --- .../camera/libcameraservice/api1/client2/StreamingProcessor.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'services/camera/libcameraservice/api1/client2/StreamingProcessor.h') diff --git a/services/camera/libcameraservice/api1/client2/StreamingProcessor.h b/services/camera/libcameraservice/api1/client2/StreamingProcessor.h index d879b83..833bb8f 100644 --- a/services/camera/libcameraservice/api1/client2/StreamingProcessor.h +++ b/services/camera/libcameraservice/api1/client2/StreamingProcessor.h @@ -64,7 +64,7 @@ class StreamingProcessor: RECORD }; status_t startStream(StreamType type, - const Vector &outputStreams); + const Vector &outputStreams); // Toggle between paused and unpaused. Stream must be started first. status_t togglePauseStream(bool pause); @@ -97,7 +97,7 @@ class StreamingProcessor: StreamType mActiveRequest; bool mPaused; - Vector mActiveStreamIds; + Vector mActiveStreamIds; // Preview-related members int32_t mPreviewRequestId; @@ -132,8 +132,8 @@ class StreamingProcessor: void releaseAllRecordingFramesLocked(); // Determine if the specified stream is currently in use - static bool isStreamActive(const Vector &streams, - uint8_t recordingStreamId); + static bool isStreamActive(const Vector &streams, + int32_t recordingStreamId); }; -- cgit v1.1