Camera3StreamInterface.h revision f1e98d857ec377f2c9b916073d40732e6ebb7ced
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 /** 85ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Fill in the camera3_stream_buffer with the next valid buffer for this 86ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * stream, to hand over to the HAL. 87ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 88ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called once finishConfiguration has been called. 89ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the output-side 90ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 91ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 92ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 93ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t getBuffer(camera3_stream_buffer *buffer) = 0; 94ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 95ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 96ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Return a buffer to the stream after use by the HAL. 97ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 98ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called for buffers provided by getBuffer(). 99ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the output-side buffers 100ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 101ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t returnBuffer(const camera3_stream_buffer &buffer, 102ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin nsecs_t timestamp) = 0; 103ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 104ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 105ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Fill in the camera3_stream_buffer with the next valid buffer for this 106ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * stream, to hand over to the HAL. 107ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 108ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called once finishConfiguration has been called. 109ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the input-side 110ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 111ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 112ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 113ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t getInputBuffer(camera3_stream_buffer *buffer) = 0; 114ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 115ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 116ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Return a buffer to the stream after use by the HAL. 117ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * 118ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * This method may only be called for buffers provided by getBuffer(). 119ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * For bidirectional streams, this method applies to the input-side buffers 120ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 121ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t returnInputBuffer(const camera3_stream_buffer &buffer) = 0; 122ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 123ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 124ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Whether any of the stream's buffers are currently in use by the HAL, 125ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * including buffers that have been returned but not yet had their 126ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * release fence signaled. 127ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 128ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual bool hasOutstandingBuffers() const = 0; 129ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 130ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin enum { 131ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin TIMEOUT_NEVER = -1 132ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin }; 133f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala 134ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 135f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala * Set the state tracker to use for signaling idle transitions. 136ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 137f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala virtual status_t setStatusTracker(sp<StatusTracker> statusTracker) = 0; 138ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 139ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 140ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Disconnect stream from its non-HAL endpoint. After this, 141ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * start/finishConfiguration must be called before the stream can be used 142ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * again. This cannot be called if the stream has outstanding dequeued 143ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * buffers. 144ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 145ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual status_t disconnect() = 0; 146ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 147ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin /** 148ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin * Debug dump of the stream's state. 149ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin */ 150ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void dump(int fd, const Vector<String16> &args) const = 0; 151ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 152ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void addBufferListener( 153ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin wp<Camera3StreamBufferListener> listener) = 0; 154ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin virtual void removeBufferListener( 155ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin const sp<Camera3StreamBufferListener>& listener) = 0; 156ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin}; 157ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 158ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin} // namespace camera3 159ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 160ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin} // namespace android 161ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin 162ae500e53efa1d26eb7c13e62d0ecc8d75db2473aIgor Murashkin#endif 163