Camera3Stream.h revision e02e932d2210bd513bb8283840bbe24b58d28620
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_STREAM_H 18fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#define ANDROID_SERVERS_CAMERA3_STREAM_H 19fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 20fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <gui/Surface.h> 21fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <utils/RefBase.h> 22fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <utils/String8.h> 23fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <utils/String16.h> 242fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include <utils/List.h> 25fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 26fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include "hardware/camera3.h" 27fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 282fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include "Camera3StreamBufferListener.h" 292fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include "Camera3StreamInterface.h" 302fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin 31fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace android { 32fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 33fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace camera3 { 34fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 35fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala/** 36fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * A class for managing a single stream of input or output data from the camera 37fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * device. 38fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 39fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * The stream has an internal state machine to track whether it's 40fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * connected/configured/etc. 41fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 42fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * States: 43fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 44fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_ERROR: A serious error has occurred, stream is unusable. Outstanding 45fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * buffers may still be returned. 46fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 47fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_CONSTRUCTED: The stream is ready for configuration, but buffers cannot 48fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * be gotten yet. Not connected to any endpoint, no buffers are registered 49fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * with the HAL. 50fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 51fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_CONFIG: Configuration has started, but not yet concluded. During this 52fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * time, the usage, max_buffers, and priv fields of camera3_stream returned by 53fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * startConfiguration() may be modified. 54fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 55fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_RE_CONFIG: Configuration has started, and the stream has been 56fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * configured before. Need to track separately from IN_CONFIG to avoid 57fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * re-registering buffers with HAL. 58fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 59fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_CONFIGURED: Stream is configured, and has registered buffers with the 604d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * HAL (if necessary). The stream's getBuffer/returnBuffer work. The priv 614d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * pointer may still be modified. 624d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 634d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * STATE_PREPARING: The stream's buffers are being pre-allocated for use. On 644d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * older HALs, this is done as part of configuration, but in newer HALs 654d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * buffers may be allocated at time of first use. But some use cases require 664d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * buffer allocation upfront, to minmize disruption due to lengthy allocation 674d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * duration. In this state, only prepareNextBuffer() and cancelPrepare() 684d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * may be called. 69fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 70fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Transition table: 71fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 72fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * <none> => STATE_CONSTRUCTED: 73fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When constructed with valid arguments 74fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * <none> => STATE_ERROR: 75fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When constructed with invalid arguments 76fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_CONSTRUCTED => STATE_IN_CONFIG: 77fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When startConfiguration() is called 78fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_CONFIG => STATE_CONFIGURED: 79fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When finishConfiguration() is called 80fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_CONFIG => STATE_ERROR: 81fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When finishConfiguration() fails to allocate or register buffers. 82fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_CONFIGURED => STATE_IN_RE_CONFIG: * 83fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When startConfiguration() is called again, after making sure stream is 84fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * idle with waitUntilIdle(). 85fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_RE_CONFIG => STATE_CONFIGURED: 86fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When finishConfiguration() is called. 87fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_IN_RE_CONFIG => STATE_ERROR: 88fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When finishConfiguration() fails to allocate or register buffers. 89fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * STATE_CONFIGURED => STATE_CONSTRUCTED: 90fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * When disconnect() is called after making sure stream is idle with 91fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * waitUntilIdle(). 924d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * STATE_CONFIGURED => STATE_PREPARING: 934d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * When startPrepare is called before the stream has a buffer 944d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * queued back into it for the first time. 954d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * STATE_PREPARING => STATE_CONFIGURED: 964d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * When sufficient prepareNextBuffer calls have been made to allocate 974d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * all stream buffers, or cancelPrepare is called. 9813d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * 9913d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * Status Tracking: 10013d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * Each stream is tracked by StatusTracker as a separate component, 10113d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * depending on the handed out buffer count. The state must be STATE_CONFIGURED 10213d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * in order for the component to be marked. 10313d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * 10413d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * It's marked in one of two ways: 10513d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * 10613d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * - ACTIVE: One or more buffers have been handed out (with #getBuffer). 10713d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * - IDLE: All buffers have been returned (with #returnBuffer), and their 10813d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * respective release_fence(s) have been signaled. 10913d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * 11013d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * A typical use case is output streams. When the HAL has any buffers 11113d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * dequeued, the stream is marked ACTIVE. When the HAL returns all buffers 11213d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * (e.g. if no capture requests are active), the stream is marked IDLE. 11313d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * In this use case, the app consumer does not affect the component status. 11413d315eb8c0848ea0584b9fb1d27bab55bc8158bIgor Murashkin * 115fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 116fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalaclass Camera3Stream : 117fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala protected camera3_stream, 1182fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin public virtual Camera3StreamInterface, 1192fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin public virtual RefBase { 120fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala public: 121fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 122fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual ~Camera3Stream(); 123fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 124fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala static Camera3Stream* cast(camera3_stream *stream); 125fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala static const Camera3Stream* cast(const camera3_stream *stream); 126fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 127fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 128fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Get the stream's ID 129fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 130fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala int getId() const; 131fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 132fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 133125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * Get the output stream set id. 134125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He */ 135125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He int getStreamSetId() const; 136125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He 137125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He /** 138fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Get the stream's dimensions and format 139fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 1403d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t getWidth() const; 1413d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t getHeight() const; 1423d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala int getFormat() const; 1433d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala android_dataspace getDataSpace() const; 144fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 145fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 146fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Start the stream configuration process. Returns a handle to the stream's 147fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * information to be passed into the HAL device's configure_streams call. 148fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 149fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Until finishConfiguration() is called, no other methods on the stream may be 150fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * called. The usage and max_buffers fields of camera3_stream may be modified 151fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * between start/finishConfiguration, but may not be changed after that. 152fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * The priv field of camera3_stream may be modified at any time after 153fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * startConfiguration. 154fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 155fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Returns NULL in case of error starting configuration. 156fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 157fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala camera3_stream* startConfiguration(); 158fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 159fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 160fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Check if the stream is mid-configuration (start has been called, but not 161fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * finish). Used for lazy completion of configuration. 162fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 163fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala bool isConfiguring() const; 164fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 165fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 166fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Completes the stream configuration process. During this call, the stream 167fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * may call the device's register_stream_buffers() method. The stream 168fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * information structure returned by startConfiguration() may no longer be 169fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * modified after this call, but can still be read until the destruction of 170fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * the stream. 171fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 172fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Returns: 173fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * OK on a successful configuration 174fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * NO_INIT in case of a serious error from the HAL device 175fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * NO_MEMORY in case of an error registering buffers 176fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * INVALID_OPERATION in case connecting to the consumer failed 177fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 178fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t finishConfiguration(camera3_device *hal3Device); 179fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 180fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 1811754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * Cancels the stream configuration process. This returns the stream to the 1821754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * initial state, allowing it to be configured again later. 1831754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala * This is done if the HAL rejects the proposed combined stream configuration 1841754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala */ 1851754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala status_t cancelConfiguration(); 1861754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala 1871754351d9199721e7e7943461689e399ef015260Eino-Ville Talvala /** 1884d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Determine whether the stream has already become in-use (has received 1894d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * a valid filled buffer), which determines if a stream can still have 1904d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * prepareNextBuffer called on it. 1914d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala */ 1924d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala bool isUnpreparable(); 1934d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 1944d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala /** 1954d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Start stream preparation. May only be called in the CONFIGURED state, 196c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk * when no valid buffers have yet been returned to this stream. Prepares 197c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk * up to maxCount buffers, or the maximum number of buffers needed by the 198c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk * pipeline if maxCount is ALLOCATE_PIPELINE_MAX. 1994d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2004d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * If no prepartion is necessary, returns OK and does not transition to 2014d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * PREPARING state. Otherwise, returns NOT_ENOUGH_DATA and transitions 2024d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * to PREPARING. 2034d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2044d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * This call performs no allocation, so is quick to call. 2054d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2064d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Returns: 2074d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * OK if no more buffers need to be preallocated 2084d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * NOT_ENOUGH_DATA if calls to prepareNextBuffer are needed to finish 2094d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * buffer pre-allocation, and transitions to the PREPARING state. 2104d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * NO_INIT in case of a serious error from the HAL device 2114d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * INVALID_OPERATION if called when not in CONFIGURED state, or a 2124d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * valid buffer has already been returned to this stream. 2134d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala */ 214c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk status_t startPrepare(int maxCount); 2154d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 2164d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala /** 2174d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Check if the stream is mid-preparing. 2184d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala */ 2194d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala bool isPreparing() const; 2204d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 2214d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala /** 2224d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Continue stream buffer preparation by allocating the next 2234d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * buffer for this stream. May only be called in the PREPARED state. 2244d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2254d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Returns OK and transitions to the CONFIGURED state if all buffers 2264d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * are allocated after the call concludes. Otherwise returns NOT_ENOUGH_DATA. 2274d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2284d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * This call allocates one buffer, which may take several milliseconds for 2294d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * large buffers. 2304d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2314d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Returns: 2324d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * OK if no more buffers need to be preallocated, and transitions 2334d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * to the CONFIGURED state. 2344d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * NOT_ENOUGH_DATA if more calls to prepareNextBuffer are needed to finish 2354d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * buffer pre-allocation. 2364d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * NO_INIT in case of a serious error from the HAL device 2374d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * INVALID_OPERATION if called when not in CONFIGURED state, or a 2384d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * valid buffer has already been returned to this stream. 2394d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala */ 2404d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala status_t prepareNextBuffer(); 2414d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 2424d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala /** 2434d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Cancel stream preparation early. In case allocation needs to be 2444d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * stopped, this method transitions the stream back to the CONFIGURED state. 2454d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Buffers that have been allocated with prepareNextBuffer remain that way, 2464d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * but a later use of prepareNextBuffer will require just as many 2474d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * calls as if the earlier prepare attempt had not existed. 2484d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * 2494d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * Returns: 2504d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * OK if cancellation succeeded, and transitions to the CONFIGURED state 2514d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * INVALID_OPERATION if not in the PREPARING state 2524d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala * NO_INIT in case of a serious error from the HAL device 2534d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala */ 2544d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala status_t cancelPrepare(); 2554d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 2564d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala /** 257b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * Tear down memory for this stream. This frees all unused gralloc buffers 258b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * allocated for this stream, but leaves it ready for operation afterward. 259b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * 260b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * May only be called in the CONFIGURED state, and keeps the stream in 261b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * the CONFIGURED state. 262b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * 263b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * Returns: 264b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * OK if teardown succeeded. 265b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * INVALID_OPERATION if not in the CONFIGURED state 266b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala * NO_INIT in case of a serious error from the HAL device 267b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala */ 268b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala status_t tearDown(); 269b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala 270b25e3c87724b6147ed1da7c1d6617c39bfce2fbfEino-Ville Talvala /** 271fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Fill in the camera3_stream_buffer with the next valid buffer for this 272fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * stream, to hand over to the HAL. 273fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 274fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * This method may only be called once finishConfiguration has been called. 275fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * For bidirectional streams, this method applies to the output-side 276fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * buffers. 277fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 278fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 279fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t getBuffer(camera3_stream_buffer *buffer); 280fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 281fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 282fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Return a buffer to the stream after use by the HAL. 283fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * 284fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * This method may only be called for buffers provided by getBuffer(). 285fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * For bidirectional streams, this method applies to the output-side buffers 286fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 287fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t returnBuffer(const camera3_stream_buffer &buffer, 288fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala nsecs_t timestamp); 289fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 290fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 2915a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * Fill in the camera3_stream_buffer with the next valid buffer for this 2925a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * stream, to hand over to the HAL. 2935a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * 2945a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * This method may only be called once finishConfiguration has been called. 2955a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * For bidirectional streams, this method applies to the input-side 2965a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * buffers. 2975a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * 2985a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin */ 2995a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin status_t getInputBuffer(camera3_stream_buffer *buffer); 3005a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin 3015a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin /** 3025a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * Return a buffer to the stream after use by the HAL. 3035a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * 3045a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * This method may only be called for buffers provided by getBuffer(). 3055a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin * For bidirectional streams, this method applies to the input-side buffers 3065a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin */ 3075a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin status_t returnInputBuffer(const camera3_stream_buffer &buffer); 3085a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin 309618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen // get the buffer producer of the input buffer queue. 310618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen // only apply to input streams. 311618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen status_t getInputBufferProducer(sp<IGraphicBufferProducer> *producer); 312618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen 3135a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin /** 314fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Whether any of the stream's buffers are currently in use by the HAL, 315fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * including buffers that have been returned but not yet had their 316fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * release fence signaled. 317fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 318fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala bool hasOutstandingBuffers() const; 319fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 320fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala enum { 321fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala TIMEOUT_NEVER = -1 322fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala }; 323f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala 324fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 325f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala * Set the status tracker to notify about idle transitions 326fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 327f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala virtual status_t setStatusTracker(sp<StatusTracker> statusTracker); 328fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 329fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 330fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Disconnect stream from its non-HAL endpoint. After this, 331fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * start/finishConfiguration must be called before the stream can be used 332fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * again. This cannot be called if the stream has outstanding dequeued 333fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * buffers. 334fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 335fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t disconnect(); 336fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 337fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 338fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Debug dump of the stream's state. 339fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 340fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual void dump(int fd, const Vector<String16> &args) const = 0; 341fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 342f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He /** 343f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He * Add a camera3 buffer listener. Adding the same listener twice has 344f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He * no effect. 345f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He */ 3462fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin void addBufferListener( 3472fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin wp<Camera3StreamBufferListener> listener); 348f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He 349f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He /** 350f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He * Remove a camera3 buffer listener. Removing the same listener twice 351f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He * or the listener that was never added has no effect. 352f0d962a6737eb8eec002d6804d9ffbe7bee672a0Zhijun He */ 3532fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin void removeBufferListener( 3542fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin const sp<Camera3StreamBufferListener>& listener); 3552fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin 356fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala protected: 357fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala const int mId; 358125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He /** 359125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * Stream set id, used to indicate which group of this stream belongs to for buffer sharing 360125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * across multiple streams. 361125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * 362125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * The default value is set to CAMERA3_STREAM_SET_ID_INVALID, which indicates that this stream 363125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * doesn't intend to share buffers with any other streams, and this stream will fall back to 364125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * the existing BufferQueue mechanism to manage the buffer allocations and buffer circulation. 365125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * When a valid stream set id is set, this stream intends to use the Camera3BufferManager to 366125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * manage the buffer allocations; the BufferQueue will only handle the buffer transaction 367125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * between the producer and consumer. For this case, upon successfully registration, the streams 368125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * with the same stream set id will potentially share the buffers allocated by 369125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He * Camera3BufferManager. 370125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He */ 371125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He const int mSetId; 372125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He 373fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala const String8 mName; 374fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // Zero for formats with fixed buffer size for given dimensions. 375fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala const size_t mMaxSize; 376fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 377fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala enum { 378fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala STATE_ERROR, 379fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala STATE_CONSTRUCTED, 380fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala STATE_IN_CONFIG, 381fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala STATE_IN_RECONFIG, 3824d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala STATE_CONFIGURED, 3834d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala STATE_PREPARING 384fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala } mState; 385fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 386fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala mutable Mutex mLock; 387fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 388fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala Camera3Stream(int id, camera3_stream_type type, 3893d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t width, uint32_t height, size_t maxSize, int format, 390125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He android_dataspace dataSpace, camera3_stream_rotation_t rotation, 391125684aba1a11b7adbf5f9d607ee2bcc9449081cZhijun He int setId); 392fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 393fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 394fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Interface to be implemented by derived classes 395fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 396fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 397fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // getBuffer / returnBuffer implementations 398fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 399fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // Since camera3_stream_buffer includes a raw pointer to the stream, 400fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // cast to camera3_stream*, implementations must increment the 401fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // refcount of the stream manually in getBufferLocked, and decrement it in 402fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // returnBufferLocked. 4035a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin virtual status_t getBufferLocked(camera3_stream_buffer *buffer); 404fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t returnBufferLocked(const camera3_stream_buffer &buffer, 4055a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin nsecs_t timestamp); 4065a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin virtual status_t getInputBufferLocked(camera3_stream_buffer *buffer); 4075a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin virtual status_t returnInputBufferLocked( 4085a269fa72b419e7fe4bf6bf9b27eec8782b3a963Igor Murashkin const camera3_stream_buffer &buffer); 409fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual bool hasOutstandingBuffersLocked() const = 0; 410618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen // Get the buffer producer of the input buffer queue. Only apply to input streams. 411618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen virtual status_t getInputBufferProducerLocked(sp<IGraphicBufferProducer> *producer); 412618ff8a48a0c895a78f91f5692510c2a809425c3Chien-Yu Chen 413e2172bed7e77ab1d922588cf727818b481400b53Igor Murashkin // Can return -ENOTCONN when we are already disconnected (not an error) 414fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t disconnectLocked() = 0; 415fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 416fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // Configure the buffer queue interface to the other end of the stream, 417fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // after the HAL has provided usage and max_buffers values. After this call, 418fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // the stream must be ready to produce all buffers for registration with 419fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // HAL. 420fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t configureQueueLocked() = 0; 421fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 422fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // Get the total number of buffers in the queue 423fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual size_t getBufferCountLocked() = 0; 424fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 4256adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He // Get handout output buffer count. 4266adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He virtual size_t getHandoutOutputBufferCountLocked() = 0; 4276adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He 4286adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He // Get handout input buffer count. 4296adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He virtual size_t getHandoutInputBufferCountLocked() = 0; 4306adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He 431b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala // Get the usage flags for the other endpoint, or return 432b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala // INVALID_OPERATION if they cannot be obtained. 4334d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala virtual status_t getEndpointUsage(uint32_t *usage) const = 0; 434b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala 435f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala // Tracking for idle state 436f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala wp<StatusTracker> mStatusTracker; 437f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala // Status tracker component ID 438f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala int mStatusId; 439f1e98d857ec377f2c9b916073d40732e6ebb7cedEino-Ville Talvala 4404d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // Tracking for stream prepare - whether this stream can still have 4414d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // prepareNextBuffer called on it. 4424d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala bool mStreamUnpreparable; 4434d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 444fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala private: 44502bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala uint32_t mOldUsage; 44602bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala uint32_t mOldMaxBuffers; 4476adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He Condition mOutputBufferReturnedSignal; 4486adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He Condition mInputBufferReturnedSignal; 4496adc9ccb2948d9421a0ed4b74f52b909bcec2037Zhijun He static const nsecs_t kWaitForBufferDuration = 3000000000LL; // 3000 ms 450fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 451fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala // Gets all buffers from endpoint and registers them with the HAL. 452fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t registerBuffersLocked(camera3_device *hal3Device); 453fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 4542fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin void fireBufferListenersLocked(const camera3_stream_buffer& buffer, 4552fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin bool acquired, bool output); 4562fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin List<wp<Camera3StreamBufferListener> > mBufferListenerList; 4572fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin 4584d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala status_t cancelPrepareLocked(); 4594d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 460e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen // Return whether the buffer is in the list of outstanding buffers. 461e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen bool isOutstandingBuffer(const camera3_stream_buffer& buffer); 462e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen 463e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen // Remove the buffer from the list of outstanding buffers. 464e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen void removeOutstandingBuffer(const camera3_stream_buffer& buffer); 465e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen 4664d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // Tracking for PREPARING state 4674d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 4684d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // State of buffer preallocation. Only true if either prepareNextBuffer 4694d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // has been called sufficient number of times, or stream configuration 4704d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala // had to register buffers with the HAL 4714d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala bool mPrepared; 4724d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 4734d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala Vector<camera3_stream_buffer_t> mPreparedBuffers; 4744d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala size_t mPreparedBufferIdx; 4754d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala 476c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk // Number of buffers allocated on last prepare call. 47702bf03287652923b5bb5316667b065423565d6b4Eino-Ville Talvala size_t mLastMaxCount; 478c78ac26e3a65328fc0118f16ee76a800d0687eb7Ruben Brunk 479e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen // Outstanding buffers dequeued from the stream's buffer queue. 480e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen List<buffer_handle_t> mOutstandingBuffers; 481e02e932d2210bd513bb8283840bbe24b58d28620Chien-Yu Chen 482fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // class Camera3Stream 483fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 484fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // namespace camera3 485fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 486fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // namespace android 487fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 488fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#endif 489