Camera3StreamInterface.h revision 618ff8a48a0c895a78f91f5692510c2a809425c3
1ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin/* 2ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Copyright (C) 2013 The Android Open Source Project 3ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 4ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * you may not use this file except in compliance with the License. 6ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * You may obtain a copy of the License at 7ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 8ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 10ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * See the License for the specific language governing permissions and 14ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * limitations under the License. 15ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 16ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 17ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#ifndef ANDROID_SERVERS_CAMERA3_STREAM_INTERFACE_H 18ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#define ANDROID_SERVERS_CAMERA3_STREAM_INTERFACE_H 19ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 20ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#include <utils/RefBase.h> 21ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#include "Camera3StreamBufferListener.h" 22ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 23ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkinstruct camera3_stream_buffer; 24ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 25ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkinnamespace android { 26ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 27ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkinnamespace camera3 { 28ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 29f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvalaclass StatusTracker; 30f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala 31ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin/** 32ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * An interface for managing a single stream of input and/or output data from 33ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * the camera device. 34ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 35ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkinclass Camera3StreamInterface : public virtual RefBase { 36ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin public: 37ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 38ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Get the stream's ID 39ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 40ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual int getId() const = 0; 41ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 42ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 43ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Get the stream's dimensions and format 44ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 45ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual uint32_t getWidth() const = 0; 46ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual uint32_t getHeight() const = 0; 47ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual int getFormat() const = 0; 48ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 49ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 50ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Start the stream configuration process. Returns a handle to the stream's 51ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * information to be passed into the HAL device's configure_streams call. 52ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 53ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Until finishConfiguration() is called, no other methods on the stream may 54ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * be called. The usage and max_buffers fields of camera3_stream may be 55ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * modified between start/finishConfiguration, but may not be changed after 56ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * that. The priv field of camera3_stream may be modified at any time after 57ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * startConfiguration. 58ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 59ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Returns NULL in case of error starting configuration. 60ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 61ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual camera3_stream* startConfiguration() = 0; 62ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 63ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 64ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Check if the stream is mid-configuration (start has been called, but not 65ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * finish). Used for lazy completion of configuration. 66ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 67ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual bool isConfiguring() const = 0; 68ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 69ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 70ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Completes the stream configuration process. During this call, the stream 71ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * may call the device's register_stream_buffers() method. The stream 72ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * information structure returned by startConfiguration() may no longer be 73ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * modified after this call, but can still be read until the destruction of 74ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * the stream. 75ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 76ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Returns: 77ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * OK on a successful configuration 78ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * NO_INIT in case of a serious error from the HAL device 79ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * NO_MEMORY in case of an error registering buffers 80ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * INVALID_OPERATION in case connecting to the consumer failed 81ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 82ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t finishConfiguration(camera3_device *hal3Device) = 0; 83ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 84ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 851754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * Cancels the stream configuration process. This returns the stream to the 861754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * initial state, allowing it to be configured again later. 871754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * This is done if the HAL rejects the proposed combined stream configuration 881754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala */ 891754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala virtual status_t cancelConfiguration() = 0; 901754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala 911754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala /** 92ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Fill in the camera3_stream_buffer with the next valid buffer for this 93ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * stream, to hand over to the HAL. 94ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 95ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called once finishConfiguration has been called. 96ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the output-side 97ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 98ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 99ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 100ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t getBuffer(camera3_stream_buffer *buffer) = 0; 101ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 102ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 103ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Return a buffer to the stream after use by the HAL. 104ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 105ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called for buffers provided by getBuffer(). 106ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the output-side buffers 107ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 108ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t returnBuffer(const camera3_stream_buffer &buffer, 109ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin nsecs_t timestamp) = 0; 110ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 111ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 112ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Fill in the camera3_stream_buffer with the next valid buffer for this 113ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * stream, to hand over to the HAL. 114ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 115ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called once finishConfiguration has been called. 116ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the input-side 117ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 118ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 119ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 120ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t getInputBuffer(camera3_stream_buffer *buffer) = 0; 121ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 122ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 123ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Return a buffer to the stream after use by the HAL. 124ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 125ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called for buffers provided by getBuffer(). 126ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the input-side buffers 127ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 128ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t returnInputBuffer(const camera3_stream_buffer &buffer) = 0; 129ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 130ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 131618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen * Get the buffer producer of the input buffer queue. 132618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen * 133618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen * This method only applies to input streams. 134618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen */ 135618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen virtual status_t getInputBufferProducer(sp<IGraphicBufferProducer> *producer) = 0; 136618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen 137618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen /** 138ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Whether any of the stream's buffers are currently in use by the HAL, 139ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * including buffers that have been returned but not yet had their 140ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * release fence signaled. 141ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 142ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual bool hasOutstandingBuffers() const = 0; 143ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 144ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin enum { 145ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin TIMEOUT_NEVER = -1 146ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin }; 147f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala 148ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 149f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala * Set the state tracker to use for signaling idle transitions. 150ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 151f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala virtual status_t setStatusTracker(sp<StatusTracker> statusTracker) = 0; 152ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 153ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 154ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Disconnect stream from its non-HAL endpoint. After this, 155ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * start/finishConfiguration must be called before the stream can be used 156ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * again. This cannot be called if the stream has outstanding dequeued 157ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 158ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 159ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t disconnect() = 0; 160ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 161ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 162ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Debug dump of the stream's state. 163ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 164ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void dump(int fd, const Vector<String16> &args) const = 0; 165ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 166ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void addBufferListener( 167ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin wp<Camera3StreamBufferListener> listener) = 0; 168ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void removeBufferListener( 169ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin const sp<Camera3StreamBufferListener>& listener) = 0; 170ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin}; 171ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 172ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin} // namespace camera3 173ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 174ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin} // namespace android 175ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 176ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#endif 177