19426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/* 29426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** 39426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** Copyright 2008, The Android Open Source Project 49426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** Copyright 2010, Samsung Electronics Co. LTD 59426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** 69426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** Licensed under the Apache License, Version 2.0 (the "License"); 79426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** you may not use this file except in compliance with the License. 89426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** You may obtain a copy of the License at 99426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** 109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** http://www.apache.org/licenses/LICENSE-2.0 119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** 129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** Unless required by applicable law or agreed to in writing, software 139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** distributed under the License is distributed on an "AS IS" BASIS, 149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** See the License for the specific language governing permissions and 169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin** limitations under the License. 179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin*/ 189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin/*! 209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \file ExynosCameraHWInterface.h 219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \brief hearder file for Android Camera HAL 229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \author thun.hwang(thun.hwang@samsung.com) 239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * \date 2010/06/03 249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * 259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * <b>Revision History: </b> 269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2011/12/31 : thun.hwang(thun.hwang@samsung.com) \n 279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Initial version 289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * 299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * - 2012/03/14 : sangwoo.park(sw5771.park@samsung.com) \n 309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * Change file, class name to ExynosXXX. 319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin * 329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin */ 339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifndef EXYNOS_CAMERA_HW_INTERFACE_H 359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <utils/threads.h> 379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <utils/RefBase.h> 389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <binder/MemoryBase.h> 399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <binder/MemoryHeapBase.h> 409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <hardware/camera.h> 419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <hardware/gralloc.h> 429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <camera/Camera.h> 439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <camera/CameraParameters.h> 44f4979f5067ab25d0e385b791ba3770eb156e0e94Dima Zavin#include <media/hardware/MetadataBufferType.h> 459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "gralloc_priv.h" 479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "exynos_format.h" 499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "csc.h" 509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include "ExynosCamera.h" 519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <fcntl.h> 539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#include <sys/mman.h> 549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define USE_EGL (1) 569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define NUM_OF_PREVIEW_BUF (8) 589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define NUM_OF_VIDEO_BUF (8) 599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define NUM_OF_PICTURE_BUF (6) 609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define NUM_OF_WAITING_PUT_PICTURE_BUF (1) 619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#define NUM_OF_DETECTED_FACES (32) 639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinnamespace android { 659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinclass ExynosCameraHWInterface : public virtual RefBase { 679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinpublic: 689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCameraHWInterface(int cameraId, camera_device_t *dev); 699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual ~ExynosCameraHWInterface(); 709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t setPreviewWindow(preview_stream_ops *w); 729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void setCallbacks(camera_notify_callback notify_cb, 739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_data_callback data_cb, 749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_data_timestamp_callback data_cb_timestamp, 759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_request_memory get_memory, 769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *user); 779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void enableMsgType(int32_t msgType); 799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void disableMsgType(int32_t msgType); 809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool msgTypeEnabled(int32_t msgType); 819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t startPreview(); 839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void stopPreview(); 849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool previewEnabled(); 859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t storeMetaDataInBuffers(bool enable); 879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t startRecording(); 899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void stopRecording(); 909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool recordingEnabled(); 919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void releaseRecordingFrame(const void *opaque); 929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t autoFocus(); 949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t cancelAutoFocus(); 959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t takePicture(); 979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t cancelPicture(); 989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t setParameters(const CameraParameters& params); 1009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual CameraParameters getParameters() const; 1019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t sendCommand(int32_t command, int32_t arg1, int32_t arg2); 1029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void release(); 1049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual status_t dump(int fd) const; 1069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin inline int getCameraId() const; 1089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinprivate: 1109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin class PreviewThread : public Thread { 1119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCameraHWInterface *mHardware; 1129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin public: 1139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin PreviewThread(ExynosCameraHWInterface *hw): 1149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin Thread(false), 1159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware(hw) { } 1169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void onFirstRef() { 1179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin //run("CameraPreviewThread", PRIORITY_URGENT_DISPLAY); 1189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin run("CameraPreviewThread", PRIORITY_DEFAULT); 1199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool threadLoop() { 1219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware->m_previewThreadFuncWrapper(); 1229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 1239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin }; 1259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin class VideoThread : public Thread { 1279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCameraHWInterface *mHardware; 1289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin public: 1299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin VideoThread(ExynosCameraHWInterface *hw): 1309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin Thread(false), 1319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware(hw) { } 1329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void onFirstRef() { 1339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin run("CameraVideoThread", PRIORITY_DEFAULT); 1349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool threadLoop() { 1369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware->m_videoThreadFuncWrapper(); 1379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 1389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin }; 1409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin class PictureThread : public Thread { 1429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCameraHWInterface *mHardware; 1439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin public: 1449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin PictureThread(ExynosCameraHWInterface *hw): 1459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin Thread(false), 1469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware(hw) { } 1479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool threadLoop() { 1489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware->m_pictureThreadFunc(); 1499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return false; 1509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin }; 1529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin class AutoFocusThread : public Thread { 1549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCameraHWInterface *mHardware; 1559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin public: 1569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin AutoFocusThread(ExynosCameraHWInterface *hw): Thread(false), mHardware(hw) { } 1579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual void onFirstRef() { 1589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin run("CameraAutoFocusThread", PRIORITY_DEFAULT); 1599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin virtual bool threadLoop() { 1619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mHardware->m_autoFocusThreadFunc(); 1629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin return true; 1639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin } 1649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin }; 1659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinprivate: 1679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void m_initDefaultParameters(int cameraId); 1689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_startPreviewInternal(void); 1709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void m_stopPreviewInternal(void); 1719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_previewThreadFuncWrapper(void); 1739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_previewThreadFunc(void); 1749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_videoThreadFuncWrapper(void); 1759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_videoThreadFunc(void); 1769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_autoFocusThreadFunc(void); 1779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_startPictureInternal(void); 1799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_stopPictureInternal(void); 1809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_pictureThreadFunc(void); 1819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_saveJpeg(unsigned char *real_jpeg, int jpeg_size); 1839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void m_savePostView(const char *fname, uint8_t *buf, 1849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin uint32_t size); 1859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_decodeInterleaveData(unsigned char *pInterleaveData, 1869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int interleaveDataSize, 1879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int yuvWidth, 1889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int yuvHeight, 1899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int *pJpegSize, 1909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *pJpegData, 1919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *pYuvData); 1929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_YUY2toNV21(void *srcBuf, void *dstBuf, uint32_t srcWidth, uint32_t srcHeight); 1939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_scaleDownYuv422(char *srcBuf, uint32_t srcWidth, 1949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin uint32_t srcHight, char *dstBuf, 1959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin uint32_t dstWidth, uint32_t dstHight); 1969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 1979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_checkVideoStartMarker(unsigned char *pBuf); 1989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_checkEOIMarker(unsigned char *pBuf); 1999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_findEOIMarkerInJPEG(unsigned char *pBuf, 2009426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int dwBufSize, int *pnJPEGsize); 2019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_splitFrame(unsigned char *pFrame, int dwSize, 2029426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int dwJPEGLineLength, int dwVideoLineLength, 2039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int dwVideoHeight, void *pJPEG, 2049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int *pdwJPEGSize, void *pVideo, 2059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int *pdwVideoSize); 2069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void m_setSkipFrame(int frame); 2079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_isSupportedPreviewSize(const int width, const int height) const; 2089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void m_getAlignedYUVSize(int colorFormat, int w, int h, ExynosBuffer *buf); 2109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_getResolutionList(String8 & string8Buf, char * strBuf, int w, int h); 2129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_getZoomRatioList(String8 & string8Buf, char * strBuf, int maxZoom, int start, int end); 2149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_bracketsStr2Ints(char *str, int num, ExynosRect2 *rect2s, int *weights); 2169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_subBracketsStr2Ints(int num, char *str, int *arr); 2179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_getRatioSize(int src_w, int src_h, 2189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int dst_w, int dst_h, 2199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int *crop_x, int *crop_y, 2209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int *crop_w, int *crop_h, 2219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int zoom); 2229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_calibratePosition(int w, int new_w, int x); 2239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#ifdef LOG_NDEBUG 2249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_fileDump(char *filename, void *srcBuf, uint32_t size); 2259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif 2269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shinprivate: 2289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sp<PreviewThread> m_previewThread; 2299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sp<VideoThread> m_videoThread; 2309426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sp<AutoFocusThread> m_autoFocusThread; 2319426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin sp<PictureThread> m_pictureThread; 2329426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2339426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* used by auto focus thread to block until it's told to run */ 2349426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_focusLock; 2359426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_focusCondition; 2369426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_exitAutoFocusThread; 2379426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2389426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* used by preview thread to block until it's told to run */ 2399426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_previewLock; 2409426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_previewCondition; 2419426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_previewStoppedCondition; 2429426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_previewRunning; 2439426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_exitPreviewThread; 2449426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_previewStartDeferred; 2459426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2469426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_videoLock; 2479426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_videoCondition; 2489426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_videoStoppedCondition; 2499426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_videoRunning; 2509426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_videoStart; 2519426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_exitVideoThread; 2529426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_recordingHint; 2539426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2549426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *m_grallocVirtAddr[NUM_OF_PREVIEW_BUF]; 2559426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_matchedGrallocIndex[NUM_OF_PREVIEW_BUF]; 2569426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBuffer m_pictureBuf; 2579426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBuffer copy_previewBuf; 2589426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2599426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin struct ExynosBufferQueue { 2609426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBuffer buf; 2619426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBufferQueue *next; 2629426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin }; 2639426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2649426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBufferQueue *m_oldPictureBufQueueHead; 2659426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosBufferQueue m_oldPictureBufQueue[NUM_OF_PICTURE_BUF]; 2669426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_pictureLock; 2679426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Condition m_pictureCondition; 2689426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_pictureRunning; 2699426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_captureInProgress; 2709426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_numOfAvaliblePictureBuf; 2719426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2729426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosRect m_orgPreviewRect; 2739426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosRect m_orgPictureRect; 2749426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosRect m_orgVideoRect; 2759426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2769426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *m_exynosPreviewCSC; 2779426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *m_exynosPictureCSC; 2789426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *m_exynosVideoCSC; 2799426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2809426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin preview_stream_ops *m_previewWindow; 2819426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2829426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin /* used to guard threading state */ 2839426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_stateLock; 2849426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2859426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin CameraParameters m_params; 2869426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin CameraParameters m_internalParams; 2879426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2889426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_memory_t *m_previewHeap[NUM_OF_PREVIEW_BUF]; 2899426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin buffer_handle_t *m_previewBufHandle[NUM_OF_PREVIEW_BUF]; 2909426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_previewStride[NUM_OF_PREVIEW_BUF]; 2919426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_avaliblePreviewBufHandle[NUM_OF_PREVIEW_BUF]; 2929426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_flagGrallocLocked[NUM_OF_PREVIEW_BUF]; 2939426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_minUndequeuedBufs; 2949426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_numOfAvailableVideoBuf; 2959426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_cntVideoBuf; 2969426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 2979426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_memory_t *m_videoHeap[NUM_OF_VIDEO_BUF]; 2989426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_memory_t *m_resizedVideoHeap[NUM_OF_VIDEO_BUF]; 2999426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_memory_t *m_pictureHeap[NUM_OF_PICTURE_BUF]; 300471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin int m_pictureFds[NUM_OF_PICTURE_BUF][3]; 3019426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_memory_t *m_rawHeap; 302471812b710583ffdb5b4bda6c7c85c893762b0f2Rebecca Schultz Zavin int m_ion_client; 3039426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3049426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_frame_metadata_t m_frameMetadata; 3059426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_face_t m_faces[NUM_OF_DETECTED_FACES]; 3069426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin bool m_faceDetected; 3079426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3089426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin ExynosCamera *m_secCamera; 3099426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3109426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin mutable Mutex m_skipFrameLock; 3119426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int m_skipFrame; 3129426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3139426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_notify_callback m_notifyCb; 3149426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_data_callback m_dataCb; 3159426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_data_timestamp_callback m_dataCbTimestamp; 3169426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_request_memory m_getMemoryCb; 3179426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin void *m_callbackCookie; 3189426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3199426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin int32_t m_msgEnabled; 3209426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3219426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin Vector<Size> m_supportedPreviewSizes; 3229426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3239426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin camera_device_t *m_halDevice; 3249426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin static gralloc_module_t const* m_grallocHal; 3259426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}; 3269426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3279426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin}; // namespace android 3289426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin 3299426c428f0ffede2ee24d397912f7db84c56c3f7Jiyoung Shin#endif 330