Camera3OutputStream.h revision 727d172137b4f32681c098de8e2623c0b65a6406
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> 21fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include <gui/Surface.h> 22fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 23fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#include "Camera3Stream.h" 24e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin#include "Camera3IOStreamBase.h" 252fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include "Camera3OutputStreamInterface.h" 26fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 27fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace android { 28fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 29fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace camera3 { 30fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 31fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala/** 32fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * A class for managing a single stream of output data from the camera device. 33fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 342fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkinclass Camera3OutputStream : 35e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin public Camera3IOStreamBase, 362fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin public Camera3OutputStreamInterface { 37fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala public: 38fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 39fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Set up a stream for formats that have 2 dimensions, such as RAW and YUV. 40fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 41727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala Camera3OutputStream(int id, sp<Surface> consumer, 423d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t width, uint32_t height, int format, 43b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh android_dataspace dataSpace, camera3_stream_rotation_t rotation); 44fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 45fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 46fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Set up a stream for formats that have a variable buffer size for the same 47fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * dimensions, such as compressed JPEG. 48fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 49727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala Camera3OutputStream(int id, sp<Surface> consumer, 503d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t width, uint32_t height, size_t maxSize, int format, 51b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh android_dataspace dataSpace, camera3_stream_rotation_t rotation); 52fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 53fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual ~Camera3OutputStream(); 54fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 55fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 56fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Camera3Stream interface 57fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 58fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 59fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual void dump(int fd, const Vector<String16> &args) const; 60fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 61fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 62fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Set the transform on the output stream; one of the 63fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * HAL_TRANSFORM_* / NATIVE_WINDOW_TRANSFORM_* constants. 64fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 65fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala status_t setTransform(int transform); 66fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 67e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin protected: 68e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin Camera3OutputStream(int id, camera3_stream_type_t type, 693d82c0d9ed2b3e956ad699a9ca2c8a70c9d24678Eino-Ville Talvala uint32_t width, uint32_t height, int format, 70b97babb8c08969b55af3b6456d15f764c8873d3fYin-Chia Yeh android_dataspace dataSpace, camera3_stream_rotation_t rotation); 71e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin 72124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He /** 73124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He * Note that we release the lock briefly in this function 74124ccf4b5023a40c57b49981123e6c9b61408a5dZhijun He */ 75e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin virtual status_t returnBufferCheckedLocked( 76e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin const camera3_stream_buffer &buffer, 77e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin nsecs_t timestamp, 78e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin bool output, 79e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin /*out*/ 80e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin sp<Fence> *releaseFenceOut); 81e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin 820a21051b91c2e07e49eb6fa568c505aee967ab9dZhijun He virtual status_t disconnectLocked(); 830a21051b91c2e07e49eb6fa568c505aee967ab9dZhijun He 84727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala sp<Surface> mConsumer; 85e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin private: 86fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala int mTransform; 87fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 88e3a9f964d7ebb6f269e6df2ba9c24b7c8b9ccefdIgor Murashkin virtual status_t setTransformLocked(int transform); 89fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 90e0711f2651121754a10c784e3b149024d17fa4d5Ruchit Sharma bool mTraceFirstBuffer; 91e0711f2651121754a10c784e3b149024d17fa4d5Ruchit Sharma 92727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala // Name of Surface consumer 93727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala String8 mConsumerName; 94727d172137b4f32681c098de8e2623c0b65a6406Eino-Ville Talvala 95fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala /** 96fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * Internal Camera3Stream interface 97fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */ 98fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t getBufferLocked(camera3_stream_buffer *buffer); 99fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t returnBufferLocked( 100fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala const camera3_stream_buffer &buffer, 101fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala nsecs_t timestamp); 102fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 103fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala virtual status_t configureQueueLocked(); 104b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala 1054d44cad22ea925a651463f2d51d6586c14d4b787Eino-Ville Talvala virtual status_t getEndpointUsage(uint32_t *usage) const; 106b2f5b19e5b6e1408a259add23dba91037756a943Eino-Ville Talvala 107fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // class Camera3OutputStream 108fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 109fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace camera3 110fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 111fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace android 112fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala 113fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#endif 114