blob: 08fcf384b916a130e32195d5b7363f527aca54df [file] [log] [blame]
Igor Murashkinae500e52013-04-22 14:03:54 -07001/*
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_INTERFACE_H
18#define ANDROID_SERVERS_CAMERA3_OUTPUT_STREAM_INTERFACE_H
19
20#include "Camera3StreamInterface.h"
Emilian Peev40ead602017-09-26 15:46:36 +010021#include <utils/KeyedVector.h>
Igor Murashkinae500e52013-04-22 14:03:54 -070022
23namespace android {
24
25namespace camera3 {
26
27/**
28 * An interface for managing a single stream of output data from the camera
29 * device.
30 */
31class Camera3OutputStreamInterface : public virtual Camera3StreamInterface {
32 public:
33 /**
34 * Set the transform on the output stream; one of the
35 * HAL_TRANSFORM_* / NATIVE_WINDOW_TRANSFORM_* constants.
36 */
37 virtual status_t setTransform(int transform) = 0;
Chien-Yu Chen85a64552015-08-28 15:46:12 -070038
39 /**
40 * Return if this output stream is for video encoding.
41 */
42 virtual bool isVideoStream() const = 0;
Zhijun He5d677d12016-05-29 16:52:39 -070043
44 /**
45 * Return if the consumer configuration of this stream is deferred.
46 */
Shuzhen Wang0129d522016-10-30 22:43:41 -070047 virtual bool isConsumerConfigurationDeferred(size_t surface_id = 0) const = 0;
Zhijun He5d677d12016-05-29 16:52:39 -070048
49 /**
Shuzhen Wang758c2152017-01-10 18:26:18 -080050 * Set the consumer surfaces to the output stream.
Zhijun He5d677d12016-05-29 16:52:39 -070051 */
Shuzhen Wang758c2152017-01-10 18:26:18 -080052 virtual status_t setConsumers(const std::vector<sp<Surface>>& consumers) = 0;
Eino-Ville Talvalad58445d2016-06-17 22:58:43 -070053
54 /**
Eino-Ville Talvala77c1a352016-06-13 12:32:43 -070055 * Detach an unused buffer from the stream.
56 *
57 * buffer must be non-null; fenceFd may null, and if it is non-null, but
58 * there is no valid fence associated with the detached buffer, it will be
59 * set to -1.
60 *
61 */
62 virtual status_t detachBuffer(sp<GraphicBuffer>* buffer, int* fenceFd) = 0;
Emilian Peev40ead602017-09-26 15:46:36 +010063
64 /**
65 * Query the surface id.
66 */
67 virtual ssize_t getSurfaceId(const sp<Surface> &surface) = 0;
68
69 /**
70 * Update the stream output surfaces.
71 */
72 virtual status_t updateStream(const std::vector<sp<Surface>> &outputSurfaces,
73 const std::vector<OutputStreamInfo> &outputInfo,
74 const std::vector<size_t> &removedSurfaceIds,
75 KeyedVector<sp<Surface>, size_t> *outputMap/*out*/) = 0;
Chien-Yu Chena936ac22017-10-23 15:59:49 -070076
77 /**
78 * Drop buffers if dropping is true. If dropping is false, do not drop buffers.
79 */
80 virtual status_t dropBuffers(bool /*dropping*/) = 0;
Igor Murashkinae500e52013-04-22 14:03:54 -070081};
82
83} // namespace camera3
84
85} // namespace android
86
87#endif