QCamera3Channel.h revision e803115f5c8573703e3b00a3f8741bf3816b8f23
1340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* Copyright (c) 2012-2013, The Linux Foundataion. All rights reserved.
2340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *
3340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * Redistribution and use in source and binary forms, with or without
4340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * modification, are permitted provided that the following conditions are
5340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * met:
6340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *     * Redistributions of source code must retain the above copyright
7340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       notice, this list of conditions and the following disclaimer.
8340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *     * Redistributions in binary form must reproduce the above
9340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       copyright notice, this list of conditions and the following
10340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       disclaimer in the documentation and/or other materials provided
11340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       with the distribution.
12340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *     * Neither the name of The Linux Foundation nor the names of its
13340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       contributors may be used to endorse or promote products derived
14340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *       from this software without specific prior written permission.
15340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *
16340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang *
28340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang */
29340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
30340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#ifndef __QCAMERA3_CHANNEL_H__
31340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#define __QCAMERA3_CHANNEL_H__
32340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
33340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include <hardware/camera3.h>
34340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include "QCamera3Stream.h"
35340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include "QCamera3Mem.h"
363ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru#include "QCamera3PostProc.h"
373ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru#include "QCamera3HALHeader.h"
38340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
39340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangextern "C" {
40340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#include <mm_camera_interface.h>
41340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}
42340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
43340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangusing namespace android;
44340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
45340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangnamespace qcamera {
46340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
4769c21b5cfa0d1ecd34c7e52f124346649c97303aTanmaya Godboletypedef void (*channel_cb_routine)(mm_camera_super_buf_t *metadata,
48dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                                camera3_stream_buffer_t *buffer,
49dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                                uint32_t frame_number, void *userdata);
50340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
51340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3Channel
52340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
53340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
54340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Channel(uint32_t cam_handle,
55340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                   mm_camera_ops_t *cam_ops,
56dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                   channel_cb_routine cb_routine,
57dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                   cam_padding_info_t *paddingInfo,
58dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                   void *userData);
59340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Channel();
60340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual ~QCamera3Channel();
6165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
6265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    int32_t addStream(cam_stream_type_t streamType,
63340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                              cam_format_t streamFormat,
64340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                              cam_dimension_t streamDim,
65dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                              uint8_t minStreamBufnum);
6665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    int32_t start();
6765717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    int32_t stop();
6865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    int32_t bufDone(mm_camera_super_buf_t *recvd_frame);
6965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
70340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
71340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                        buffer_handle_t **buffers) = 0;
723ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize() = 0;
733ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber){ return 0;};
743ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber, jpeg_settings_t* mJpegSettings){ return 0;};
75340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
76340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                            QCamera3Stream *stream) = 0;
77340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
7865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t len) = 0;
7965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs() = 0;
8065717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
81340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *getStreamByHandle(uint32_t streamHandle);
82340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t getMyHandle() const {return m_handle;};
83340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint8_t getNumOfStreams() const {return m_numStreams;};
84340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *getStreamByIndex(uint8_t index);
85340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
86340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static void streamCbRoutine(mm_camera_super_buf_t *super_frame,
87340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                QCamera3Stream *stream, void *userdata);
88340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprotected:
89340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
903ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru   virtual int32_t init(mm_camera_channel_attr_t *attr,
91dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                         mm_camera_buf_notify_t dataCB);
92340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    int32_t allocateStreamInfoBuf(camera3_stream_t *stream);
93340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
94340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t m_camHandle;
95340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    mm_camera_ops_t *m_camOps;
96340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    bool m_bIsActive;
97340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
98340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t m_handle;
99340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint8_t m_numStreams;
100340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *mStreams[MAX_STREAM_NUM_IN_BUNDLE];
101340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    mm_camera_buf_notify_t mDataCB;
102340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    void *mUserData;
103340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
104340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mStreamInfoBuf;
105340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    channel_cb_routine mChannelCB;
106340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    cam_padding_info_t *mPaddingInfo;
107340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
108340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
109340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3RegularChannel is used to handle all streams that are directly
110340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * generated by hardware and given to frameworks without any postprocessing at HAL.
111340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * Examples are: all IMPLEMENTATION_DEFINED streams, CPU_READ streams. */
112340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3RegularChannel : public QCamera3Channel
113340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
114340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
115340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3RegularChannel(uint32_t cam_handle,
116340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    mm_camera_ops_t *cam_ops,
117340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    channel_cb_routine cb_routine,
118dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    cam_padding_info_t *paddingInfo,
119dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    void *userData,
120340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    camera3_stream_t *stream);
121340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual ~QCamera3RegularChannel();
122340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1233ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
124dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber);
12565717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
12665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang                                buffer_handle_t **buffers);
12765717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
12865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang                                            QCamera3Stream *stream);
12965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
13065717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
13165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
132340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
133340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
134340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static int kMaxBuffers;
135340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
136340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    camera3_stream_t *mCamera3Stream;
137340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t mNumBufs;
13865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    buffer_handle_t **mCamera3Buffers;
139340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
140340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3GrallocMemory *mMemory;
141340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
142340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
143340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3MetadataChannel is for metadata stream generated by camera daemon. */
144340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3MetadataChannel : public QCamera3Channel
145340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
146340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
147340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3MetadataChannel(uint32_t cam_handle,
148340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    mm_camera_ops_t *cam_ops,
149dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    channel_cb_routine cb_routine,
150dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    cam_padding_info_t *paddingInfo,
151dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    void *userData);
152340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual ~QCamera3MetadataChannel();
153340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1543ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
155340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
156dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber);
157340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
158340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                buffer_handle_t **buffers);
159340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
160340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                            QCamera3Stream *stream);
161340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
16265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
16365717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
16469c21b5cfa0d1ecd34c7e52f124346649c97303aTanmaya Godbole
165dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#ifdef FAKE_FRAME_NUMBERS
166dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    uint32_t startingFrameNumber;
167dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#endif
16865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
169340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
170340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mMemory;
171340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
172340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
173340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3PicChannel is for JPEG stream, which contains a YUV stream generated
174340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * by the hardware, and encoded to a JPEG stream */
175340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3PicChannel : public QCamera3Channel
176340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
177340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
178340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3PicChannel(uint32_t cam_handle,
1793ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            mm_camera_ops_t *cam_ops,
1803ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            channel_cb_routine cb_routine,
1813ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            cam_padding_info_t *paddingInfo,
1823ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            void *userData,
1833ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            camera3_stream_t *stream);
184340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    ~QCamera3PicChannel();
185340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1863ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
1873ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru
1883ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t request(buffer_handle_t *buffer,
1893ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t frameNumber, jpeg_settings_t* mJpegSettings);
190340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
1913ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            buffer_handle_t **buffers);
192340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
1933ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            QCamera3Stream *stream);
19465717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
19565717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
19665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
1973ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    bool needOnlineRotation();
1983ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    void getThumbnailSize(cam_dimension_t &dim);
1993ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    int getJpegQuality();
2003ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    int getJpegRotation();
2013ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3Exif *getExifData();
2023ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    static void jpegEvtHandle(jpeg_job_status_t status,
2033ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t /*client_hdl*/,
2043ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t jobId,
2053ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            mm_jpeg_output_t *p_output,
2063ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            void *userdata);
207e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab    static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame,
208e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab            void *userdata);
20965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
210340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
211340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static int kMaxBuffers;
212340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
213340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    camera3_stream_t *mCamera3Stream;
214340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t mNumBufs;
2153ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    buffer_handle_t **mCamera3Buffers;
2163ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    jpeg_settings_t* mJpegSettings;
217340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
2183ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru
2193ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3GrallocMemory *mMemory;
220340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mYuvMemory;
2213ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3PostProcessor m_postprocessor; // post processor
222340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
223340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
224340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; // namespace qcamera
225340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
226340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#endif /* __QCAMERA_CHANNEL_H__ */
227