1cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
2cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
3cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Redistribution and use in source and binary forms, with or without
4cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * modification, are permitted provided that the following conditions are
5cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * met:
6cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *     * Redistributions of source code must retain the above copyright
7cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       notice, this list of conditions and the following disclaimer.
8cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *     * Redistributions in binary form must reproduce the above
9cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       copyright notice, this list of conditions and the following
10cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       disclaimer in the documentation and/or other materials provided
11cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       with the distribution.
12cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *     * Neither the name of The Linux Foundation nor the names of its
13cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       contributors may be used to endorse or promote products derived
14cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *       from this software without specific prior written permission.
15cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
16cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda */
28cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
29cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#ifndef ANDROID_HARDWARE_QCAMERA_USB_PARM_H
30cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define ANDROID_HARDWARE_QCAMERA_USB_PARM_H
31cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
32cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
33cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <utils/threads.h>
34cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <hardware/camera.h>
35cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <binder/MemoryBase.h>
36cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <binder/MemoryHeapBase.h>
37cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <utils/threads.h>
38cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <cutils/properties.h>
39cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <camera/Camera.h>
40cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <camera/QCameraParameters.h>
41cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <system/window.h>
42cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <system/camera.h>
43cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <hardware/camera.h>
44cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <gralloc_priv.h>
45cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <hardware/power.h>
46cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
47cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandaextern "C" {
48cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <linux/android_pmem.h>
49cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <linux/msm_ion.h>
50cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <camera.h>
51cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#include <camera_defs_i.h>
52cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda} //extern C
53cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
54cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda//Error codes
55cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define NOT_FOUND       -1
56cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
57cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
58cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda* Macro definitions
59cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda******************************************************************************/
60cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* enum definitions for picture formats */
61cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandastatic const int PICTURE_FORMAT_JPEG = 1;
62cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandastatic const int PICTURE_FORMAT_RAW = 2;
63cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
64cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default preview width in pixels */
65cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PRVW_WD  1280//640
66cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
67cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default preview height in pixels */
68cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PRVW_HT  720//480
69cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
70cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default picture format */
71cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PICT_FMT     PICTURE_FORMAT_JPEG
72cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
73cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default picture width in pixels */
74cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PICT_WD  640
75cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
76cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default picture height in pixels */
77cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PICT_HT  480
78cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
79cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default picture JPEG quality 0-100 */
80cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PICT_QLTY  85
81cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
82cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default thumbnail width in pixels */
83cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_THUMBNAIL_WD    432
84cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
85cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default thumbnail height in pixels */
86cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_THUMBNAIL_HT    288
87cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
88cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default thumbnail JPEG quality 0-100 */
89cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_THUMBNAIL_QLTY  85
90cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
91cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* Default preview format */
92cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define DEFAULT_USBCAM_PRVW_FMT HAL_PIXEL_FORMAT_YCrCb_420_SP
93cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
94cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* minimum of the default preview fps range in milli-Hz */
95cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define MIN_PREV_FPS            5000
96cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
97cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/* maximum of the default preview fps range in milli-Hz */
98cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define MAX_PREV_FPS            121000
99cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
100cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda//for histogram stats
101cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define HISTOGRAM_STATS_SIZE 257
102cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#define NUM_HISTOGRAM_BUFFERS 3
103cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
104cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandanamespace android {
105cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
106cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
107cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda* Structure definitions
108cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda******************************************************************************/
109cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandatypedef struct {
110cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda    uint32_t aspect_ratio;
111cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda    uint32_t width;
112cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda    uint32_t height;
113cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda} thumbnail_size_type;
114cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
115cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
116cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Function: usbCamInitDefaultParameters
117cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Description: This function sets default parameters to camera HAL context
118cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
119cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Input parameters:
120cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *   camHal              - camera HAL handle
121cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
122cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Return values:
123cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      0   No error
124cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      -1  Error
125cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
126cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Notes: none
127cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *****************************************************************************/
128cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandaint usbCamInitDefaultParameters(camera_hardware_t *camHal);
129cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
130cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
131cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Function: usbCamSetParameters
132cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Description: This function parses the parameter string and stores the
133cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *              parameters in the camera HAL handle
134cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
135cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Input parameters:
136cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *  camHal              - camera HAL handle
137cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *  params              - pointer to parameter string
138cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
139cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Return values:
140cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      0   Success
141cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      -1  Error
142cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Notes: none
143cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *****************************************************************************/
144cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandaint usbCamSetParameters(camera_hardware_t *camHal, const char *params);
145cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
146cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
147cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Function: usbCamGetParameters
148cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Description: This function allocates memory for parameter string,
149cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *              composes and returns the parameter string
150cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
151cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Input parameters:
152cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *   camHal             - camera HAL handle
153cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
154cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Return values:
155cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      Address to the parameter string
156cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
157cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Notes: none
158cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *****************************************************************************/
159cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandachar* usbCamGetParameters(camera_hardware_t *camHal);
160cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
161cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda/******************************************************************************
162cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Function: usbCamPutParameters
163cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Description: This function frees the memory allocated for parameter string
164cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
165cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Input parameters:
166cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *  camHal              - camera HAL handle
167cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *  parms               - Parameter string
168cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *
169cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Return values:
170cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      0   Success
171cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *      -1  Error
172cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda * Notes: none
173cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda *****************************************************************************/
174cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Anandavoid usbCamPutParameters(camera_hardware_t *camHal, char *parms);
175cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
176cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda}; // namespace android
177cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda
178cd17d732f6e501f13579729a8cf1200750c77e66Ranjith Kagathi Ananda#endif /* ANDROID_HARDWARE_QCAMERA_USB_PARM_H */
179