13d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Copyright (c) 2012, The Linux Foundation. All rights reserved. 23d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 33d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Redistribution and use in source and binary forms, with or without 43d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * modification, are permitted provided that the following conditions are 53d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * met: 63d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions of source code must retain the above copyright 73d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * notice, this list of conditions and the following disclaimer. 83d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Redistributions in binary form must reproduce the above 93d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * copyright notice, this list of conditions and the following 103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * disclaimer in the documentation and/or other materials provided 113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * with the distribution. 123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * * Neither the name of The Linux Foundation nor the names of its 133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * contributors may be used to endorse or promote products derived 143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * from this software without specific prior written permission. 153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel */ 283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel//#define ALOG_NDEBUG 0 303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define ALOG_NIDEBUG 0 313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#define LOG_TAG "QCameraUsbParm" 323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/Log.h> 333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/Errors.h> 353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/threads.h> 363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <utils/String16.h> 373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/types.h> 383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/stat.h> 393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <unistd.h> 403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <fcntl.h> 413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <cutils/properties.h> 423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <math.h> 433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#if HAVE_ANDROID_OS 443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <linux/android_pmem.h> 453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#endif 463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <linux/ioctl.h> 473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <camera/QCameraParameters.h> 483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <media/mediarecorder.h> 493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <gralloc_priv.h> 503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "linux/msm_mdp.h" 523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <linux/fb.h> 533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <limits.h> 543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelextern "C" { 573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <fcntl.h> 583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <time.h> 593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <pthread.h> 603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdio.h> 613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <string.h> 623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <unistd.h> 633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <termios.h> 643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <assert.h> 653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdlib.h> 663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <ctype.h> 673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <signal.h> 683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <errno.h> 693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/mman.h> 703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/system_properties.h> 713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <sys/time.h> 723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <stdlib.h> 733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <linux/msm_ion.h> 743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <camera.h> 753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <cam_fifo.h> 763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include <jpege.h> 773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} // extern "C" 793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCameraHWI.h" 813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QualcommUsbCamera.h" 823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCameraUsbPriv.h" 833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel#include "QCameraUsbParm.h" 843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelnamespace android { 863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/********************************************************************/ 883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic const str_map preview_formats[] = { 893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {QCameraParameters::PIXEL_FORMAT_YUV420SP, HAL_PIXEL_FORMAT_YCrCb_420_SP}, 903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic const preview_format_info_t preview_format_info_list[] = { 933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {HAL_PIXEL_FORMAT_YV12, CAMERA_YUV_420_YV12, CAMERA_PAD_TO_WORD, 3} 943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic struct camera_size_type previewSizes[] = { 973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 1920, 1088}, //1080p 983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 1280, 720}, // 720P, 993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 640, 480}, // VGA 1003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 512, 384}, 1013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 480, 320}, 1023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 320, 240}, // QVGA 1033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// All fps ranges which can be supported. This list will be filtered according 1063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// to the min and max fps supported by hardware 1073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// this list must be sorted first by max_fps and then min_fps 1083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel// fps values are multiplied by 1000 1093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic android::FPSRange prevFpsRanges[] = { 1103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel android::FPSRange(5000, 121000), 1113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* TBR: Is frame rate mode mandatory */ 1143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic const str_map frame_rate_modes[] = { 1153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_AUTO_MODE, FPS_MODE_AUTO}, 1163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_FIXED_MODE, FPS_MODE_FIXED} 1173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic const str_map picture_formats[] = { 1203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {QCameraParameters::PIXEL_FORMAT_JPEG, PICTURE_FORMAT_JPEG}, 1213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //{QCameraParameters::PIXEL_FORMAT_RAW, PICTURE_FORMAT_RAW} 1223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic camera_size_type picture_sizes[] = { 1253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 1920, 1088}, //HD1080 1263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 1280, 720}, //HD720 1273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 640, 480}, // VGA 1283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 320, 240}, // QVGA 1293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* aspect ratio removed */ 1323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic camera_size_type thumbnail_sizes[] = { 1333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 512, 288 }, //1.777778 1343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 480, 288 }, //1.666667 1353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 256, 154 }, //1.66233 1363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 432, 288 }, //1.5 1373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 512, 384 }, //1.333333 1383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 352, 288 }, //1.222222 1393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 320, 240 }, //1.33333 1403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel { 176, 144 }, //1.222222 1413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic const str_map recording_Hints[] = { 1443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"false", FALSE}, 1453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel {"true", TRUE} 1463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; 1473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/* Static functions list */ 1493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_sizes_str(const camera_size_type *sizes, int len); 1503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_values_str(const str_map *values, int len); 1513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_fps_str(const android:: FPSRange* fps, int len); 1523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_values_range_str(int min, int max); 1533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetPrvwSize( camera_hardware_t *camHal, 1543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params); 1553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetPictSize( camera_hardware_t *camHal, 1563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params); 1573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetThumbnailSize( camera_hardware_t *camHal, 1583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params); 1593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetJpegQlty( camera_hardware_t *camHal, 1603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params); 1613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 1633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamInitDefaultParameters 1643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function sets default parameters to camera HAL context 1653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 1673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 1683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 1703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * None 1713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 1723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 1733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 1743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint usbCamInitDefaultParameters(camera_hardware_t *camHal) 1753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 1763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 1773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0; 1783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char tempStr[FILENAME_LENGTH]; 1793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* Default initializations */ 1813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevFormat = DEFAULT_USBCAM_PRVW_FMT; 1823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevWidth = DEFAULT_USBCAM_PRVW_WD; 1833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevHeight = DEFAULT_USBCAM_PRVW_HT; 1843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->dispFormat = camHal->prevFormat; 1853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->dispWidth = camHal->prevWidth; 1863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->dispHeight = camHal->prevHeight; 1873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictFormat = DEFAULT_USBCAM_PICT_FMT; 1883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictWidth = DEFAULT_USBCAM_PICT_WD; 1893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictHeight = DEFAULT_USBCAM_PICT_HT; 1903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictJpegQlty = DEFAULT_USBCAM_PICT_QLTY; 1913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailWidth = DEFAULT_USBCAM_THUMBNAIL_WD; 1923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailHeight = DEFAULT_USBCAM_THUMBNAIL_HT; 1933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailJpegQlty = DEFAULT_USBCAM_THUMBNAIL_QLTY; 1943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->previewEnabledFlag = 0; 1953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prvwStoppedForPicture = 0; 1963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prvwCmdPending = 0; 1973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->takePictInProgress = 0; 1983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 1993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set picture size values 2003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictSizeValues = create_sizes_str( 2013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel picture_sizes, sizeof(picture_sizes) / sizeof(camera_size_type)); 2023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PICTURE_SIZES, 2033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictSizeValues.string()); 2043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPictureSize(camHal->pictWidth, camHal->pictHeight); 2053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set picture format 2073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictFormatValues = create_values_str( 2083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel picture_formats, sizeof(picture_formats) / sizeof(str_map)); 2093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PICTURE_FORMATS, 2103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictFormatValues.string()); 2113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(PICTURE_FORMAT_JPEG == camHal->pictFormat) 2123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPictureFormat(QCameraParameters::PIXEL_FORMAT_JPEG); 2133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set picture quality 2153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->pictJpegQlty); 2163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_QUALITY, tempStr); 2173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set Thumbnail size 2193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailSizeValues = create_sizes_str( 2203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel thumbnail_sizes, sizeof(thumbnail_sizes) /sizeof(camera_size_type)); 2213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_JPEG_THUMBNAIL_SIZES, 2223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailSizeValues.string()); 2233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailWidth); 2243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 2253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel tempStr); 2263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailHeight); 2273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 2283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel tempStr); 2293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set Thumbnail quality 2313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailJpegQlty); 2323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 2333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel tempStr); 2343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set Preview Format 2363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevFormatValues = create_values_str( 2373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel preview_formats, sizeof(preview_formats) / sizeof(str_map)); 2383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PREVIEW_FORMATS, 2393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevFormatValues.string()); 2403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(HAL_PIXEL_FORMAT_YCrCb_420_SP == camHal->prevFormat) 2413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPreviewFormat(QCameraParameters::PIXEL_FORMAT_YUV420SP); 2423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set Preview size 2443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevSizeValues = create_sizes_str( 2453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel previewSizes, sizeof(previewSizes) / sizeof(camera_size_type)); 2463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_SUPPORTED_PREVIEW_SIZES, 2473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevSizeValues.string()); 2483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPreviewSize(camHal->prevWidth, camHal->prevHeight); 2493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //Set Preivew fps range 2513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevFpsRangesValues = create_fps_str( 2523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel prevFpsRanges, sizeof(prevFpsRanges) / sizeof(android::FPSRange)); 2533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, 2553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevFpsRangesValues); 2563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPreviewFpsRange(MIN_PREV_FPS, MAX_PREV_FPS); 2573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 2593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 2613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamInitDefaultParameters */ 2623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 2643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamSetParameters 2653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function parses the parameter string and stores the 2663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * parameters in the camera HAL handle 2673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 2693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 2703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * params - pointer to parameter string 2713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 2723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 2733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 Success 2743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 Error 2753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 2763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 2773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelint usbCamSetParameters(camera_hardware_t *camHal, const char *params) 2783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 2793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0; 2803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str = String8(params); 2813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCameraParameters qParam; 2823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 2843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(params) 2863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel PRINT_PARAM_STR(params); 2873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel qParam.unflatten(str); 2893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(usbCamSetPrvwSize(camHal, qParam)) 2913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 2923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(usbCamSetPictSize(camHal, qParam)) 2933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 2943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(usbCamSetThumbnailSize(camHal, qParam)) 2953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 2963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(usbCamSetJpegQlty(camHal, qParam)) 2973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 2983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 2993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 3003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 3013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamSetParameters */ 3023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 3043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamGetParameters 3053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function allocates memory for parameter string, 3063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * composes and returns the parameter string 3073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 3093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 3103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 3123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Address to the parameter string 3133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 3153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 3163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelchar* usbCamGetParameters(camera_hardware_t *camHal) 3173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 3193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char *parms = NULL; 3203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char* rc = NULL; 3213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str; 3223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel QCameraParameters qParam = camHal->qCamParams; 3243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel //qParam.dump(); 3253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str = qParam.flatten( ); 3263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = (char *)malloc(sizeof(char)*(str.length()+1)); 3273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(rc != NULL){ 3283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel memset(rc, 0, sizeof(char)*(str.length()+1)); 3293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel strncpy(rc, str.string(), str.length()); 3303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc[str.length()] = 0; 3313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel parms = rc; 3323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel PRINT_PARAM_STR(parms); 3353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 3373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return (parms); 3383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamGetParameters */ 3393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 3413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamPutParameters 3423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function frees the memory allocated for parameter string 3433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 3453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 3463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * parms - Parameter string 3473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 3493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * None 3503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 3513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 3523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 3533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelvoid usbCamPutParameters(camera_hardware_t *camHal, char *parms) 3543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 3553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 3563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(parms) 3573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel free(parms); 3583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel parms = NULL; 3593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 3603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamPutParameters */ 3613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 3633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: create_sizes_str 3643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function loops through /dev/video entries and probes with 3653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * UVCIOC query. If the device responds to the query, then it is 3663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * detected as UVC webcam 3673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 3683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * devname - String pointer. The function return dev entry 3693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * name in this string 3703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 3713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 Success 3723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 Error 3733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 3743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 3753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_sizes_str(const camera_size_type *sizes, int len) { 3763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str; 3773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char buffer[32]; 3783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (len > 0) { 3803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), "%dx%d", sizes[0].width, sizes[0].height); 3813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 3823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (int i = 1; i < len; i++) { 3843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), ",%dx%d", sizes[i].width, sizes[i].height); 3853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 3863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 3873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return str; 3883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 3893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 3903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 3913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: create_values_str 3923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function loops through /dev/video entries and probes with 3933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * UVCIOC query. If the device responds to the query, then it is 3943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * detected as UVC webcam 3953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 3963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * devname - String pointer. The function return dev entry 3973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * name in this string 3983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 3993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 Success 4003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 Error 4013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 4023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 4033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_values_str(const str_map *values, int len) { 4043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str; 4053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (len > 0) { 4073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(values[0].desc); 4083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (int i = 1; i < len; i++) { 4103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(","); 4113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(values[i].desc); 4123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return str; 4143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 4173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: create_fps_str 4183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function loops through /dev/video entries and probes with 4193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * UVCIOC query. If the device responds to the query, then it is 4203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * detected as UVC webcam 4213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 4223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * devname - String pointer. The function return dev entry 4233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * name in this string 4243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 4253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 Success 4263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 Error 4273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 4283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 4293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_fps_str(const android:: FPSRange* fps, int len) { 4303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str; 4313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char buffer[32]; 4323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (len > 0) { 4343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), "(%d,%d)", fps[0].minFPS, fps[0].maxFPS); 4353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 4363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (int i = 1; i < len; i++) { 4383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), ",(%d,%d)", fps[i].minFPS, fps[i].maxFPS); 4393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 4403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return str; 4423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 4453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: create_values_range_str 4463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function loops through /dev/video entries and probes with 4473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * UVCIOC query. If the device responds to the query, then it is 4483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * detected as UVC webcam 4493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 4503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * devname - String pointer. The function return dev entry 4513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * name in this string 4523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 4533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 Success 4543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 Error 4553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 4563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 4573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic String8 create_values_range_str(int min, int max){ 4583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel String8 str; 4593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char buffer[32]; 4603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(min <= max){ 4623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), "%d", min); 4633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 4643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (int i = min + 1; i <= max; i++) { 4663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel snprintf(buffer, sizeof(buffer), ",%d", i); 4673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel str.append(buffer); 4683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 4703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return str; 4713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 4723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 4743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamSetPrvwSize 4753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function parses preview width and height from the input 4763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * parameters and stores into the context 4773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 4783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 4793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 4803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * params - QCameraParameters reference 4813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 4823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 4833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 If parameters are valid 4843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 If parameters are invalid 4853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 4863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 4873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 4883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetPrvwSize( camera_hardware_t *camHal, 4893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params) 4903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 4913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0, width, height, i, numPrvwSizes, validSize; 4923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 4933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel params.getPreviewSize(&width, &height); 4953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGI("%s: Requested preview size %d x %d", __func__, width, height); 4963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 4973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Validate the preview size 4983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel numPrvwSizes = sizeof(previewSizes) / sizeof(camera_size_type); 4993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (i = 0, validSize = 0; i < numPrvwSizes; i++) { 5003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (width == previewSizes[i].width 5013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel && height == previewSizes[i].height) { 5023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel validSize = 1; 5033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPreviewSize(width, height); 5053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: setPreviewSize: width: %d height: %d", 5063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __func__, width, height); 5073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevWidth = width; 5093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->prevHeight = height; 5103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->dispWidth = width; 5113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->dispHeight = height; 5123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* TBD: restrict pictures size and video to preview size */ 5143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(!validSize) 5173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("%s: Invalid preview size %dx%d requested", __func__, 5183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width, height); 5193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = (validSize == 0)? -1:0; 5213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 5223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 5243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamSetPrvwSize */ 5253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 5273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamSetPictSize 5283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function parses picture width and height from the input 5293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * parameters and stores into the context 5303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 5323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 5333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * params - QCameraParameters reference 5343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 5363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 If parameters are valid 5373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 If parameters are invalid 5383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 5403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 5413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetPictSize( camera_hardware_t *camHal, 5423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params) 5433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 5443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0, width, height, i, numPictSizes, validSize; 5453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 5463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* parse for picture width and height */ 5483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel params.getPictureSize(&width, &height); 5493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGI("%s: Requested picture size %d x %d", __func__, width, height); 5503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Validate the picture size 5523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel numPictSizes = sizeof(picture_sizes) / sizeof(camera_size_type); 5533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (i = 0, validSize = 0; i < numPictSizes; i++) { 5543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (width == picture_sizes[i].width 5553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel && height == picture_sizes[i].height) { 5563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel validSize = 1; 5573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.setPictureSize(width, height); 5593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: setPictureSize: width: %d height: %d", 5603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel __func__, width, height); 5613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* TBD: If new pictSize is different from old size, restart prvw */ 5633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictWidth = width; 5643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictHeight = height; 5653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 5673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(!validSize) 5683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("%s: Invalid picture size %dx%d requested", __func__, 5693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width, height); 5703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = (validSize == 0)? -1:0; 5713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 5723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 5743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamSetPictSize */ 5753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 5773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamSetThumbnailSize 5783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function parses picture width and height from the input 5793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * parameters and stores into the context 5803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 5823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 5833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * params - QCameraParameters reference 5843d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5853d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 5863d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 If parameters are valid 5873d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 If parameters are invalid 5883d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 5893d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 5903d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 5913d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetThumbnailSize( camera_hardware_t *camHal, 5923d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params) 5933d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 5943d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0, width, height, i, numThumbnailSizes, validSize; 5953d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char tempStr[FILENAME_LENGTH]; 5963d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 5973d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 5983d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /* parse for thumbnail width and height */ 5993d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH); 6003d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel height = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT); 6013d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGI("%s: Requested thumbnail size %d x %d", __func__, width, height); 6023d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6033d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel // Validate the thumbnail size 6043d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel numThumbnailSizes = sizeof(thumbnail_sizes) / sizeof(camera_size_type); 6053d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel for (i = 0, validSize = 0; i < numThumbnailSizes; i++) { 6063d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (width == thumbnail_sizes[i].width 6073d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel && height == thumbnail_sizes[i].height) { 6083d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel validSize = 1; 6093d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6103d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailWidth = width; 6113d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailHeight = height; 6123d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailWidth); 6133d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_WIDTH, 6143d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width); 6153d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailHeight); 6163d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_HEIGHT, 6173d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel height); 6183d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6193d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6203d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6213d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if(!validSize) 6223d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("%s: Invalid picture size %dx%d requested", __func__, 6233d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel width, height); 6243d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = (validSize == 0)? -1:0; 6253d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X", __func__); 6263d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6273d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 6283d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} /* usbCamSetThumbnailSize */ 6293d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6303d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel/****************************************************************************** 6313d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Function: usbCamSetJpegQlty 6323d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Description: This function parses picture and thumbnail JPEG quality and 6333d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * validates before storing in the context 6343d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 6353d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Input parameters: 6363d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * camHal - camera HAL handle 6373d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * params - QCameraParameters reference 6383d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 6393d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Return values: 6403d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 0 If parameters are valid 6413d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * -1 If parameters are invalid 6423d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * 6433d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel * Notes: none 6443d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel *****************************************************************************/ 6453d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudelstatic int usbCamSetJpegQlty( camera_hardware_t *camHal, 6463d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel const QCameraParameters& params) 6473d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel{ 6483d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel int rc = 0, quality = 0; 6493d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel char tempStr[FILENAME_LENGTH]; 6503d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: E", __func__); 6513d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6523d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel /**/ 6533d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel quality = params.getInt(QCameraParameters::KEY_JPEG_QUALITY); 6543d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGI("%s: Requested picture qlty %d", __func__, quality); 6553d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6563d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (quality >= 0 && quality <= 100) { 6573d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->pictJpegQlty = quality; 6583d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->pictJpegQlty); 6593d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_QUALITY, quality); 6603d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 6613d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Invalid jpeg quality=%d", quality); 6623d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 6633d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6643d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6653d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel quality = params.getInt(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY); 6663d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGI("%s: Requested thumbnail qlty %d", __func__, quality); 6673d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6683d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel if (quality >= 0 && quality <= 100) { 6693d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->thumbnailJpegQlty = quality; 6703d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel sprintf(tempStr, "%d", camHal->thumbnailJpegQlty); 6713d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel camHal->qCamParams.set(QCameraParameters::KEY_JPEG_THUMBNAIL_QUALITY, 6723d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel tempStr); 6733d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } else { 6743d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGE("Invalid jpeg thumbnail quality=%d", quality); 6753d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel rc = -1; 6763d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel } 6773d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6783d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel ALOGD("%s: X rc:%d", __func__, rc); 6793d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6803d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel return rc; 6813d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel} 6823d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel 6833d63919a23d7e7954e160c48c36713267106c3c2Thierry Strudel}; /*namespace android */ 684