QCamera3Channel.h revision f2139106633e7f52d1f47f3ef8397925673dc69d
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;
73f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang    virtual int32_t request(buffer_handle_t * /*buffer*/,
74f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang                uint32_t /*frameNumber*/){ return 0;};
75f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang    virtual int32_t request(buffer_handle_t * /*buffer*/,
76f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang                uint32_t /*frameNumber*/,
77f2139106633e7f52d1f47f3ef8397925673dc69dShuzhen Wang                jpeg_settings_t* /*mJpegSettings*/){ return 0;};
78340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
79340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                            QCamera3Stream *stream) = 0;
80340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
8165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t len) = 0;
8265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs() = 0;
8365717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
84340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *getStreamByHandle(uint32_t streamHandle);
85340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t getMyHandle() const {return m_handle;};
86340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint8_t getNumOfStreams() const {return m_numStreams;};
87340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *getStreamByIndex(uint8_t index);
88340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
89340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static void streamCbRoutine(mm_camera_super_buf_t *super_frame,
90340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                QCamera3Stream *stream, void *userdata);
91340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprotected:
92340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
933ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru   virtual int32_t init(mm_camera_channel_attr_t *attr,
94dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                         mm_camera_buf_notify_t dataCB);
95340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    int32_t allocateStreamInfoBuf(camera3_stream_t *stream);
96340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
97340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t m_camHandle;
98340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    mm_camera_ops_t *m_camOps;
99340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    bool m_bIsActive;
100340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
101340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t m_handle;
102340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint8_t m_numStreams;
103340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3Stream *mStreams[MAX_STREAM_NUM_IN_BUNDLE];
104340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    mm_camera_buf_notify_t mDataCB;
105340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    void *mUserData;
106340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
107340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mStreamInfoBuf;
108340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    channel_cb_routine mChannelCB;
109340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    cam_padding_info_t *mPaddingInfo;
110340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
111340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
112340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3RegularChannel is used to handle all streams that are directly
113340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * generated by hardware and given to frameworks without any postprocessing at HAL.
114340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * Examples are: all IMPLEMENTATION_DEFINED streams, CPU_READ streams. */
115340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3RegularChannel : public QCamera3Channel
116340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
117340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
118340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3RegularChannel(uint32_t cam_handle,
119340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    mm_camera_ops_t *cam_ops,
120340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    channel_cb_routine cb_routine,
121dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    cam_padding_info_t *paddingInfo,
122dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    void *userData,
123340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    camera3_stream_t *stream);
124340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual ~QCamera3RegularChannel();
125340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1263ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
127dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber);
12865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
12965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang                                buffer_handle_t **buffers);
13065717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
13165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang                                            QCamera3Stream *stream);
13265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
13365717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
13465717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
135340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
136340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
137340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static int kMaxBuffers;
138340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
139340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    camera3_stream_t *mCamera3Stream;
140340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t mNumBufs;
14165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    buffer_handle_t **mCamera3Buffers;
142340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
143340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3GrallocMemory *mMemory;
144340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
145340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
146340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3MetadataChannel is for metadata stream generated by camera daemon. */
147340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3MetadataChannel : public QCamera3Channel
148340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
149340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
150340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3MetadataChannel(uint32_t cam_handle,
151340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                    mm_camera_ops_t *cam_ops,
152dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    channel_cb_routine cb_routine,
153dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    cam_padding_info_t *paddingInfo,
154dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang                    void *userData);
155340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual ~QCamera3MetadataChannel();
156340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1573ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
158340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
159dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    virtual int32_t request(buffer_handle_t *buffer, uint32_t frameNumber);
160340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
161340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                buffer_handle_t **buffers);
162340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
163340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang                            QCamera3Stream *stream);
164340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
16565717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
16665717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
16769c21b5cfa0d1ecd34c7e52f124346649c97303aTanmaya Godbole
168dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#ifdef FAKE_FRAME_NUMBERS
169dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang    uint32_t startingFrameNumber;
170dfc11f0de9ece725b93b36073f1c8bcae59a162eShuzhen Wang#endif
17165717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
172340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
173340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mMemory;
174340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
175340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
176340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang/* QCamera3PicChannel is for JPEG stream, which contains a YUV stream generated
177340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang * by the hardware, and encoded to a JPEG stream */
178340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangclass QCamera3PicChannel : public QCamera3Channel
179340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang{
180340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
181340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3PicChannel(uint32_t cam_handle,
1823ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            mm_camera_ops_t *cam_ops,
1833ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            channel_cb_routine cb_routine,
1843ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            cam_padding_info_t *paddingInfo,
1853ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            void *userData,
1863ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            camera3_stream_t *stream);
187340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    ~QCamera3PicChannel();
188340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
1893ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t initialize();
1903ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru
1913ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    virtual int32_t request(buffer_handle_t *buffer,
1923ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t frameNumber, jpeg_settings_t* mJpegSettings);
193340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual int32_t registerBuffers(uint32_t num_buffers,
1943ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            buffer_handle_t **buffers);
195340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    virtual void streamCbRoutine(mm_camera_super_buf_t *super_frame,
1963ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            QCamera3Stream *stream);
19765717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
19865717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual QCamera3Memory *getStreamBufs(uint32_t le);
19965717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang    virtual void putStreamBufs();
2003ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    bool needOnlineRotation();
2013ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    void getThumbnailSize(cam_dimension_t &dim);
2023ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    int getJpegQuality();
2033ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    int getJpegRotation();
2043ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3Exif *getExifData();
2053ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    static void jpegEvtHandle(jpeg_job_status_t status,
2063ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t /*client_hdl*/,
2073ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            uint32_t jobId,
2083ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            mm_jpeg_output_t *p_output,
2093ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru            void *userdata);
210e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab    static void dataNotifyCB(mm_camera_super_buf_t *recvd_frame,
211e803115f5c8573703e3b00a3f8741bf3816b8f23Mansoor Aftab            void *userdata);
21265717e762ce17a3531e47732dd133ba6fa290474Shuzhen Wang
213340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangpublic:
214340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    static int kMaxBuffers;
215340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wangprivate:
216340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    camera3_stream_t *mCamera3Stream;
217340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    uint32_t mNumBufs;
2183ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    buffer_handle_t **mCamera3Buffers;
2193ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    jpeg_settings_t* mJpegSettings;
220b6424056f1221af718daa26e0dc441b8d3cd15e5Apurva Rajguru    int32_t mCurrentBufIndex;
221340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
2223ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru
2233ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3GrallocMemory *mMemory;
224340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang    QCamera3HeapMemory *mYuvMemory;
2253ab16af7eb740d44ac36d570aab1e9a56b800313Apurva Rajguru    QCamera3PostProcessor m_postprocessor; // post processor
226340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang};
227340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
228340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang}; // namespace qcamera
229340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang
230340e0caad7fc85ee8387229e2ad1463bfe12df4eShuzhen Wang#endif /* __QCAMERA_CHANNEL_H__ */
231