• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2013 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef ANDROID_SERVERS_CAMERA3_OUTPUT_STREAM_H
18 #define ANDROID_SERVERS_CAMERA3_OUTPUT_STREAM_H
19 
20 #include <utils/RefBase.h>
21 #include <gui/Surface.h>
22 
23 #include "Camera3Stream.h"
24 #include "Camera3IOStreamBase.h"
25 #include "Camera3OutputStreamInterface.h"
26 
27 namespace android {
28 
29 namespace camera3 {
30 
31 /**
32  * A class for managing a single stream of output data from the camera device.
33  */
34 class Camera3OutputStream :
35         public Camera3IOStreamBase,
36         public Camera3OutputStreamInterface {
37   public:
38     /**
39      * Set up a stream for formats that have 2 dimensions, such as RAW and YUV.
40      */
41     Camera3OutputStream(int id, sp<Surface> consumer,
42             uint32_t width, uint32_t height, int format,
43             android_dataspace dataSpace, camera3_stream_rotation_t rotation);
44 
45     /**
46      * Set up a stream for formats that have a variable buffer size for the same
47      * dimensions, such as compressed JPEG.
48      */
49     Camera3OutputStream(int id, sp<Surface> consumer,
50             uint32_t width, uint32_t height, size_t maxSize, int format,
51             android_dataspace dataSpace, camera3_stream_rotation_t rotation);
52 
53     virtual ~Camera3OutputStream();
54 
55     /**
56      * Camera3Stream interface
57      */
58 
59     virtual void     dump(int fd, const Vector<String16> &args) const;
60 
61     /**
62      * Set the transform on the output stream; one of the
63      * HAL_TRANSFORM_* / NATIVE_WINDOW_TRANSFORM_* constants.
64      */
65     status_t         setTransform(int transform);
66 
67     /**
68      * Return if this output stream is for video encoding.
69      */
70     bool isVideoStream() const;
71 
72   protected:
73     Camera3OutputStream(int id, camera3_stream_type_t type,
74             uint32_t width, uint32_t height, int format,
75             android_dataspace dataSpace, camera3_stream_rotation_t rotation);
76 
77     /**
78      * Note that we release the lock briefly in this function
79      */
80     virtual status_t returnBufferCheckedLocked(
81             const camera3_stream_buffer &buffer,
82             nsecs_t timestamp,
83             bool output,
84             /*out*/
85             sp<Fence> *releaseFenceOut);
86 
87     virtual status_t disconnectLocked();
88 
89     sp<Surface> mConsumer;
90   private:
91     int               mTransform;
92 
93     virtual status_t  setTransformLocked(int transform);
94 
95     bool mTraceFirstBuffer;
96 
97     // Name of Surface consumer
98     String8           mConsumerName;
99 
100     /**
101      * Internal Camera3Stream interface
102      */
103     virtual status_t getBufferLocked(camera3_stream_buffer *buffer);
104     virtual status_t returnBufferLocked(
105             const camera3_stream_buffer &buffer,
106             nsecs_t timestamp);
107 
108     virtual status_t configureQueueLocked();
109 
110     virtual status_t getEndpointUsage(uint32_t *usage) const;
111 
112 }; // class Camera3OutputStream
113 
114 } // namespace camera3
115 
116 } // namespace android
117 
118 #endif
119