1fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala/*
2fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Copyright (C) 2013 The Android Open Source Project
3fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala *
4fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License");
5fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * you may not use this file except in compliance with the License.
6fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * You may obtain a copy of the License at
7fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala *
8fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala *      http://www.apache.org/licenses/LICENSE-2.0
9fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala *
10fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Unless required by applicable law or agreed to in writing, software
11fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS,
12fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * See the License for the specific language governing permissions and
14fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * limitations under the License.
15fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */
16fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
17fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#ifndef ANDROID_SERVERS_CAMERA3_OUTPUT_STREAM_H
18fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA3_OUTPUT_STREAM_H
19fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
20fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <utils/RefBase.h>
21125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He#include <gui/IProducerListener.h>
22fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <gui/Surface.h>
23fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
24fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include "Camera3Stream.h"
25e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin#include "Camera3IOStreamBase.h"
262fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include "Camera3OutputStreamInterface.h"
27125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He#include "Camera3BufferManager.h"
28fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
29fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace android {
30fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
31fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace camera3 {
32fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
33125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun Heclass Camera3BufferManager;
34125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
35125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He/**
36125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * Stream info structure that holds the necessary stream info for buffer manager to use for
37125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * buffer allocation and management.
38125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He */
39125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun Hestruct StreamInfo {
40125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    int streamId;
41125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    int streamSetId;
42125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    uint32_t width;
43125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    uint32_t height;
44125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    uint32_t format;
45125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    android_dataspace dataSpace;
46125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    uint32_t combinedUsage;
47125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    size_t totalBufferCount;
48125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    bool isConfigured;
49125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    StreamInfo(int id = CAMERA3_STREAM_ID_INVALID,
50125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            int setId = CAMERA3_STREAM_SET_ID_INVALID,
51125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            uint32_t w = 0,
52125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            uint32_t h = 0,
53125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            uint32_t fmt = 0,
54125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            android_dataspace ds = HAL_DATASPACE_UNKNOWN,
55125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            uint32_t usage = 0,
56125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            size_t bufferCount = 0,
57125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            bool configured = false) :
58125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                streamId(id),
59125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                streamSetId(setId),
60125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                width(w),
61125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                height(h),
62125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                format(fmt),
63125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                dataSpace(ds),
64125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                combinedUsage(usage),
65125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                totalBufferCount(bufferCount),
66125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He                isConfigured(configured){}
67125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He};
68125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
69fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala/**
70fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * A class for managing a single stream of output data from the camera device.
71fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */
722fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkinclass Camera3OutputStream :
73e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin        public Camera3IOStreamBase,
742fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin        public Camera3OutputStreamInterface {
75fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala  public:
76fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
77fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set up a stream for formats that have 2 dimensions, such as RAW and YUV.
78125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * A valid stream set id needs to be set to support buffer sharing between multiple
79125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * streams.
80fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
81727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    Camera3OutputStream(int id, sp<Surface> consumer,
823d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala            uint32_t width, uint32_t height, int format,
83125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            android_dataspace dataSpace, camera3_stream_rotation_t rotation,
84c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang            nsecs_t timestampOffset, int setId = CAMERA3_STREAM_SET_ID_INVALID);
85fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
86fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
87fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set up a stream for formats that have a variable buffer size for the same
88fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * dimensions, such as compressed JPEG.
89125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * A valid stream set id needs to be set to support buffer sharing between multiple
90125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * streams.
91fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
92727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    Camera3OutputStream(int id, sp<Surface> consumer,
933d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala            uint32_t width, uint32_t height, size_t maxSize, int format,
94125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            android_dataspace dataSpace, camera3_stream_rotation_t rotation,
95c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang            nsecs_t timestampOffset, int setId = CAMERA3_STREAM_SET_ID_INVALID);
96fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
975d677d1f0879d5101e38df480a38228a64d63959Zhijun He    /**
985d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * Set up a stream with deferred consumer for formats that have 2 dimensions, such as
995d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * RAW and YUV. The consumer must be set before using this stream for output. A valid
1005d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * stream set id needs to be set to support buffer sharing between multiple streams.
1015d677d1f0879d5101e38df480a38228a64d63959Zhijun He     */
1025d677d1f0879d5101e38df480a38228a64d63959Zhijun He    Camera3OutputStream(int id, uint32_t width, uint32_t height, int format,
1035d677d1f0879d5101e38df480a38228a64d63959Zhijun He            uint32_t consumerUsage, android_dataspace dataSpace,
1045d677d1f0879d5101e38df480a38228a64d63959Zhijun He            camera3_stream_rotation_t rotation, nsecs_t timestampOffset,
1055d677d1f0879d5101e38df480a38228a64d63959Zhijun He            int setId = CAMERA3_STREAM_SET_ID_INVALID);
1065d677d1f0879d5101e38df480a38228a64d63959Zhijun He
107fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual ~Camera3OutputStream();
108fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
109fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
110fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Camera3Stream interface
111fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
112fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
113fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual void     dump(int fd, const Vector<String16> &args) const;
114fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
115fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
116fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set the transform on the output stream; one of the
117fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * HAL_TRANSFORM_* / NATIVE_WINDOW_TRANSFORM_* constants.
118fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
119fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    status_t         setTransform(int transform);
120fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
12185a6455f269d79adf9bf48d757a4b1b3c81cf760Chien-Yu Chen    /**
12285a6455f269d79adf9bf48d757a4b1b3c81cf760Chien-Yu Chen     * Return if this output stream is for video encoding.
12385a6455f269d79adf9bf48d757a4b1b3c81cf760Chien-Yu Chen     */
12485a6455f269d79adf9bf48d757a4b1b3c81cf760Chien-Yu Chen    bool isVideoStream() const;
12513a69633108f40f56aa47f1bcbb406cd5173c245Shuzhen Wang    /**
12613a69633108f40f56aa47f1bcbb406cd5173c245Shuzhen Wang     * Return if this output stream is consumed by hardware composer.
12713a69633108f40f56aa47f1bcbb406cd5173c245Shuzhen Wang     */
12813a69633108f40f56aa47f1bcbb406cd5173c245Shuzhen Wang    bool isConsumedByHWComposer() const;
12985a6455f269d79adf9bf48d757a4b1b3c81cf760Chien-Yu Chen
1305d677d1f0879d5101e38df480a38228a64d63959Zhijun He    /**
131f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He     * Return if this output stream is consumed by hardware texture.
132f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He     */
133f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He    bool isConsumedByHWTexture() const;
134f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He
135f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He    /**
1365d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * Return if the consumer configuration of this stream is deferred.
1375d677d1f0879d5101e38df480a38228a64d63959Zhijun He     */
1385d677d1f0879d5101e38df480a38228a64d63959Zhijun He    virtual bool isConsumerConfigurationDeferred() const;
1395d677d1f0879d5101e38df480a38228a64d63959Zhijun He
1405d677d1f0879d5101e38df480a38228a64d63959Zhijun He    /**
1415d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * Set the consumer surface to the output stream.
1425d677d1f0879d5101e38df480a38228a64d63959Zhijun He     */
1435d677d1f0879d5101e38df480a38228a64d63959Zhijun He    virtual status_t setConsumer(sp<Surface> consumer);
1445d677d1f0879d5101e38df480a38228a64d63959Zhijun He
145125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    class BufferReleasedListener : public BnProducerListener {
146125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He        public:
147125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          BufferReleasedListener(wp<Camera3OutputStream> parent) : mParent(parent) {}
148125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
149125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          /**
150125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          * Implementation of IProducerListener, used to notify this stream that the consumer
151125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          * has returned a buffer and it is ready to return to Camera3BufferManager for reuse.
152125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          */
153125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          virtual void onBufferReleased();
154125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
155125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He        private:
156125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He          wp<Camera3OutputStream> mParent;
157125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    };
158125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
15977c1a3554275a51ac8eb9fbe86f476afc8983192Eino-Ville Talvala    virtual status_t detachBuffer(sp<GraphicBuffer>* buffer, int* fenceFd);
16077c1a3554275a51ac8eb9fbe86f476afc8983192Eino-Ville Talvala
161125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    /**
162125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * Set the graphic buffer manager to get/return the stream buffers.
163125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     *
164125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * It is only legal to call this method when stream is in STATE_CONSTRUCTED state.
165125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     */
166125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    status_t setBufferManager(sp<Camera3BufferManager> bufferManager);
167125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
168e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin  protected:
169e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin    Camera3OutputStream(int id, camera3_stream_type_t type,
1703d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala            uint32_t width, uint32_t height, int format,
171125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            android_dataspace dataSpace, camera3_stream_rotation_t rotation,
172125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He            int setId = CAMERA3_STREAM_SET_ID_INVALID);
173e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin
174124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He    /**
175124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He     * Note that we release the lock briefly in this function
176124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He     */
177e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin    virtual status_t returnBufferCheckedLocked(
178e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin            const camera3_stream_buffer &buffer,
179e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin            nsecs_t timestamp,
180e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin            bool output,
181e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin            /*out*/
182e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin            sp<Fence> *releaseFenceOut);
183e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin
1840a21051b91c2e07e49eb6fa568c505aee967ab9dZhijun He    virtual status_t disconnectLocked();
1850a21051b91c2e07e49eb6fa568c505aee967ab9dZhijun He
186727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    sp<Surface> mConsumer;
1875d677d1f0879d5101e38df480a38228a64d63959Zhijun He
188e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin  private:
189f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He
190f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He    static const nsecs_t       kDequeueBufferTimeout   = 1000000000; // 1 sec
191f0645c19a8c8433766f4cb6edff7fca5db8017bfZhijun He
192fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    int               mTransform;
193fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
194e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin    virtual status_t  setTransformLocked(int transform);
195fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
196e0711f2651121754a10c784e3b149024d17fa4d5Ruchit Sharma    bool mTraceFirstBuffer;
197e0711f2651121754a10c784e3b149024d17fa4d5Ruchit Sharma
198727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    // Name of Surface consumer
199727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala    String8           mConsumerName;
200727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala
201c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang    // Whether consumer assumes MONOTONIC timestamp
202c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang    bool mUseMonoTimestamp;
20313a69633108f40f56aa47f1bcbb406cd5173c245Shuzhen Wang
204fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
205125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * GraphicBuffer manager this stream is registered to. Used to replace the buffer
206125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * allocation/deallocation role of BufferQueue.
207125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     */
208125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    sp<Camera3BufferManager> mBufferManager;
209125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
210125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    /**
211125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * Buffer released listener, used to notify the buffer manager that a buffer is released
212125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * from consumer side.
213125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     */
214125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    sp<BufferReleasedListener> mBufferReleasedListener;
215125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He
216125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    /**
217125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     * Flag indicating if the buffer manager is used to allocate the stream buffers
218125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He     */
219125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    bool mUseBufferManager;
220c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang
221c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang    /**
222c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang     * Timestamp offset for video and hardware composer consumed streams
223c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang     */
224c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang    nsecs_t mTimestampOffset;
225c28dcccb9bc0a94950a7475f9bd8a6a38be34419Shuzhen Wang
226125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He    /**
2275d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * Consumer end point usage flag set by the constructor for the deferred
2285d677d1f0879d5101e38df480a38228a64d63959Zhijun He     * consumer case.
2295d677d1f0879d5101e38df480a38228a64d63959Zhijun He     */
2305d677d1f0879d5101e38df480a38228a64d63959Zhijun He    uint32_t    mConsumerUsage;
2315d677d1f0879d5101e38df480a38228a64d63959Zhijun He
2325d677d1f0879d5101e38df480a38228a64d63959Zhijun He    /**
233fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Internal Camera3Stream interface
234fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
235fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t getBufferLocked(camera3_stream_buffer *buffer);
236fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t returnBufferLocked(
237fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            const camera3_stream_buffer &buffer,
238fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            nsecs_t timestamp);
239fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
240fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t configureQueueLocked();
241b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala
2424d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala    virtual status_t getEndpointUsage(uint32_t *usage) const;
243b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala
244fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // class Camera3OutputStream
245fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
246fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace camera3
247fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
248fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace android
249fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
250fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#endif
251