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