Camera3OutputStream.h revision 2fba584544e8687b526e3388bf7160b696da1dba
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"
242fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin#include "Camera3OutputStreamInterface.h"
25fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
26fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace android {
27fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
28fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvalanamespace camera3 {
29fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
30fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala/**
31fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala * A class for managing a single stream of output data from the camera device.
32fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala */
332fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkinclass Camera3OutputStream :
342fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin        public Camera3Stream,
352fba584544e8687b526e3388bf7160b696da1dbaIgor Murashkin        public Camera3OutputStreamInterface {
36fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala  public:
37fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
38fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set up a stream for formats that have 2 dimensions, such as RAW and YUV.
39fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
40fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    Camera3OutputStream(int id, sp<ANativeWindow> consumer,
41fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            uint32_t width, uint32_t height, int format);
42fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
43fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
44fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set up a stream for formats that have a variable buffer size for the same
45fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * dimensions, such as compressed JPEG.
46fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
47fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    Camera3OutputStream(int id, sp<ANativeWindow> consumer,
48fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            uint32_t width, uint32_t height, size_t maxSize, int format);
49fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
50fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual ~Camera3OutputStream();
51fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
52fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
53fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Camera3Stream interface
54fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
55fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
56fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t waitUntilIdle(nsecs_t timeout);
57fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual void     dump(int fd, const Vector<String16> &args) const;
58fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
59fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
60fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Set the transform on the output stream; one of the
61fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * HAL_TRANSFORM_* / NATIVE_WINDOW_TRANSFORM_* constants.
62fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
63fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    status_t         setTransform(int transform);
64fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
65fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala  private:
66fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    sp<ANativeWindow> mConsumer;
67fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    int               mTransform;
68fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    size_t            mTotalBufferCount;
69fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    size_t            mDequeuedBufferCount;
70fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    Condition         mBufferReturnedSignal;
71fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    uint32_t          mFrameCount;
72fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    nsecs_t           mLastTimestamp;
73fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
74fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    // The merged release fence for all returned buffers
75fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    sp<Fence>         mCombinedFence;
76fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
77fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    status_t         setTransformLocked(int transform);
78fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
79fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    /**
80fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     * Internal Camera3Stream interface
81fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala     */
82fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t getBufferLocked(camera3_stream_buffer *buffer);
83fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t returnBufferLocked(
84fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            const camera3_stream_buffer &buffer,
85fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala            nsecs_t timestamp);
86fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual bool     hasOutstandingBuffersLocked() const;
87fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
88fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t configureQueueLocked();
89fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual size_t   getBufferCountLocked();
90fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala    virtual status_t disconnectLocked();
91fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
92fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala}; // class Camera3OutputStream
93fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
94fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace camera3
95fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
96fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala} // namespace android
97fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala
98fd58f1a10a749ca72fec1012920d6e94a664cd70Eino-Ville Talvala#endif
99