diff --git a/QCamera/HAL/core/Android.mk b/QCamera/HAL/core/Android.mk index 27f9ec6..ee7ee92 100755 --- a/QCamera/HAL/core/Android.mk +++ b/QCamera/HAL/core/Android.mk @@ -105,9 +105,9 @@ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/media LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr -LOCAL_C_INCLUDES += hardware/qcom/display/libgralloc \ - hardware/qcom/display/libgenlock \ - hardware/qcom/media/libstagefrighthw +LOCAL_C_INCLUDES += hardware/qcom/display/msm8994/libgralloc \ + hardware/qcom/display/msm8994/libgenlock \ + hardware/qcom/media/msm8974/libstagefrighthw # if debug service layer and up , use stub camera! LOCAL_C_INCLUDES += \ diff --git a/QCamera/HAL/core/src/QCameraHAL.cpp b/QCamera/HAL/core/src/QCameraHAL.cpp index 858385b..baeed4e 100755 --- a/QCamera/HAL/core/src/QCameraHAL.cpp +++ b/QCamera/HAL/core/src/QCameraHAL.cpp @@ -20,7 +20,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraHAL" #include #include diff --git a/QCamera/HAL/core/src/QCameraHWI_Mem.cpp b/QCamera/HAL/core/src/QCameraHWI_Mem.cpp index 37b0e07..3263ae7 100755 --- a/QCamera/HAL/core/src/QCameraHWI_Mem.cpp +++ b/QCamera/HAL/core/src/QCameraHWI_Mem.cpp @@ -20,7 +20,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraHWI_Mem" #include diff --git a/QCamera/HAL/core/src/QCameraHWI_Parm.cpp b/QCamera/HAL/core/src/QCameraHWI_Parm.cpp index c37e341..ffecf78 100755 --- a/QCamera/HAL/core/src/QCameraHWI_Parm.cpp +++ b/QCamera/HAL/core/src/QCameraHWI_Parm.cpp @@ -18,7 +18,7 @@ */ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraHWI_Parm" #include diff --git a/QCamera/HAL/core/src/QCameraHWI_Record.cpp b/QCamera/HAL/core/src/QCameraHWI_Record.cpp index 73d26d1..634c721 100755 --- a/QCamera/HAL/core/src/QCameraHWI_Record.cpp +++ b/QCamera/HAL/core/src/QCameraHWI_Record.cpp @@ -20,7 +20,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraHWI_Record" #include #include diff --git a/QCamera/HAL/core/src/QCameraHWI_Still.cpp b/QCamera/HAL/core/src/QCameraHWI_Still.cpp index 091de43..be83c02 100755 --- a/QCamera/HAL/core/src/QCameraHWI_Still.cpp +++ b/QCamera/HAL/core/src/QCameraHWI_Still.cpp @@ -19,9 +19,9 @@ /*#error uncomment this for compiler test!*/ -#define LOG_NDEBUG 0 -#define LOG_NDDEBUG 0 -#define LOG_NIDEBUG 0 +#define LOG_NDEBUG 1 +#define LOG_NDDEBUG 1 +#define LOG_NIDEBUG 1 #define LOG_TAG "QCameraHWI_Still" #include #include diff --git a/QCamera/HAL/core/src/QCameraStream.cpp b/QCamera/HAL/core/src/QCameraStream.cpp index 297af3a..0886aac 100755 --- a/QCamera/HAL/core/src/QCameraStream.cpp +++ b/QCamera/HAL/core/src/QCameraStream.cpp @@ -19,8 +19,8 @@ /*#error uncomment this for compiler test!*/ -#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NDEBUG 1 +#define ALOG_NIDEBUG 1 #define LOG_TAG __FILE__ #include diff --git a/QCamera/HAL/usbcamcore/src/QCameraMjpegDecode.cpp b/QCamera/HAL/usbcamcore/src/QCameraMjpegDecode.cpp index dcf0aa2..74bc8bf 100755 --- a/QCamera/HAL/usbcamcore/src/QCameraMjpegDecode.cpp +++ b/QCamera/HAL/usbcamcore/src/QCameraMjpegDecode.cpp @@ -27,7 +27,7 @@ */ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraMjpegDecode" #include diff --git a/QCamera/HAL/usbcamcore/src/QCameraUsbParm.cpp b/QCamera/HAL/usbcamcore/src/QCameraUsbParm.cpp index fda6e9d..3a6af96 100755 --- a/QCamera/HAL/usbcamcore/src/QCameraUsbParm.cpp +++ b/QCamera/HAL/usbcamcore/src/QCameraUsbParm.cpp @@ -27,7 +27,7 @@ */ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraUsbParm" #include diff --git a/QCamera/HAL/usbcamcore/src/QualcommUsbCamera.cpp b/QCamera/HAL/usbcamcore/src/QualcommUsbCamera.cpp index 6f3c3cd..9841b26 100755 --- a/QCamera/HAL/usbcamcore/src/QualcommUsbCamera.cpp +++ b/QCamera/HAL/usbcamcore/src/QualcommUsbCamera.cpp @@ -27,7 +27,7 @@ */ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QualcommUsbCamera" #include diff --git a/QCamera/HAL/wrapper/QualcommCamera.cpp b/QCamera/HAL/wrapper/QualcommCamera.cpp index 7a809ea..2fb08d0 100755 --- a/QCamera/HAL/wrapper/QualcommCamera.cpp +++ b/QCamera/HAL/wrapper/QualcommCamera.cpp @@ -29,7 +29,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QualcommCamera" #include #include diff --git a/QCamera/HAL2/core/Android.mk b/QCamera/HAL2/core/Android.mk index 6491691..d4ae019 100644 --- a/QCamera/HAL2/core/Android.mk +++ b/QCamera/HAL2/core/Android.mk @@ -53,9 +53,9 @@ LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/../../stack/mm-jpeg-interface/inc\ $(TARGET_OUT_INTERMEDIATES)/include/mm-camera-interface_badger \ -LOCAL_C_INCLUDES += hardware/qcom/display/libgralloc \ - hardware/qcom/display/libgenlock \ - hardware/qcom/media/libstagefrighthw \ +LOCAL_C_INCLUDES += hardware/qcom/display/msm8994/libgralloc \ + hardware/qcom/display/msm8994/libgenlock \ + hardware/qcom/media/msm8974/libstagefrighthw \ system/media/camera/include # if debug service layer and up , use stub camera! diff --git a/QCamera/HAL2/core/src/QCameraHAL.cpp b/QCamera/HAL2/core/src/QCameraHAL.cpp index 2264bcd..e3a4167 100644 --- a/QCamera/HAL2/core/src/QCameraHAL.cpp +++ b/QCamera/HAL2/core/src/QCameraHAL.cpp @@ -17,7 +17,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QCameraHAL" #include #include diff --git a/QCamera/HAL2/core/src/QCameraHWI.cpp b/QCamera/HAL2/core/src/QCameraHWI.cpp index 8b3114e..6a6272e 100644 --- a/QCamera/HAL2/core/src/QCameraHWI.cpp +++ b/QCamera/HAL2/core/src/QCameraHWI.cpp @@ -16,7 +16,7 @@ /*#error uncomment this for compiler test!*/ -#define LOG_NIDEBUG 0 +#define LOG_NIDEBUG 1 //#define LOG_NDEBUG 0 #define LOG_TAG "QCameraHWI" diff --git a/QCamera/HAL2/core/src/QCameraStream.cpp b/QCamera/HAL2/core/src/QCameraStream.cpp index 73e57ce..e9834f4 100644 --- a/QCamera/HAL2/core/src/QCameraStream.cpp +++ b/QCamera/HAL2/core/src/QCameraStream.cpp @@ -16,8 +16,8 @@ /*#error uncomment this for compiler test!*/ -#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NDEBUG 1 +#define ALOG_NIDEBUG 1 #define LOG_TAG __FILE__ #include #include diff --git a/QCamera/HAL2/wrapper/QualcommCamera.cpp b/QCamera/HAL2/wrapper/QualcommCamera.cpp index c06bf33..cac9735 100644 --- a/QCamera/HAL2/wrapper/QualcommCamera.cpp +++ b/QCamera/HAL2/wrapper/QualcommCamera.cpp @@ -29,7 +29,7 @@ /*#error uncomment this for compiler test!*/ //#define ALOG_NDEBUG 0 -#define ALOG_NIDEBUG 0 +#define ALOG_NIDEBUG 1 #define LOG_TAG "QualcommCamera" #include #include diff --git a/QCamera/stack/mm-camera-interface/Android.mk b/QCamera/stack/mm-camera-interface/Android.mk index 33d0e14..b0d0d8d 100755 --- a/QCamera/stack/mm-camera-interface/Android.mk +++ b/QCamera/stack/mm-camera-interface/Android.mk @@ -42,7 +42,7 @@ LOCAL_C_INCLUDES += \ $(TARGET_OUT_HEADERS)/mm-still/mm-omx # (END) Need to remove later once dependency on jpeg removed -LOCAL_C_INCLUDES+= hardware/qcom/media/mm-core/inc +LOCAL_C_INCLUDES+= hardware/qcom/media/msm8974/mm-core/inc LOCAL_CFLAGS += -include bionic/libc/kernel/common/linux/socket.h LOCAL_CFLAGS += -include bionic/libc/kernel/common/linux/un.h diff --git a/QCamera2/HAL/Android.mk b/QCamera2/HAL/Android.mk index 9d76784..9a9e8eb 100644 --- a/QCamera2/HAL/Android.mk +++ b/QCamera2/HAL/Android.mk @@ -18,6 +18,11 @@ LOCAL_SRC_FILES := \ wrapper/QualcommCamera.cpp LOCAL_CFLAGS = -Wall +LOCAL_CLANG_CFLAGS += \ + -Wno-error=unused-variable \ + -Wno-error=sign-compare \ + -Wno-error=unused-parameter \ + -Wno-error=unused-private-field LOCAL_CFLAGS += -DHAS_MULTIMEDIA_HINTS -DDEFAULT_ZSL_MODE_ON -DDEFAULT_DENOISE_MODE_ON -DCANCRO_CAMERA_HAL @@ -42,9 +47,10 @@ endif LOCAL_C_INCLUDES := \ $(LOCAL_PATH)/../stack/common \ + framework/native/include \ frameworks/native/include/media/openmax \ - hardware/qcom/display/libgralloc \ - hardware/qcom/media/libstagefrighthw \ + hardware/qcom/display/msm8994/libgralloc \ + hardware/qcom/media/msm8974/libstagefrighthw \ $(LOCAL_PATH)/../../mm-image-codec/qexif \ $(LOCAL_PATH)/../../mm-image-codec/qomx_core \ $(LOCAL_PATH)/../util \ @@ -56,20 +62,19 @@ else LOCAL_CFLAGS += -DUSE_KK_CODE endif -ifeq ($(TARGET_USE_VENDOR_CAMERA_EXT),true) -LOCAL_C_INCLUDES += hardware/qcom/display/msm8974/libgralloc -else -LOCAL_C_INCLUDES += hardware/qcom/display/libgralloc -endif +LOCAL_C_INCLUDES += hardware/qcom/display/msm8994/libgralloc LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/media LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr -LOCAL_SHARED_LIBRARIES := libcamera_client liblog libhardware libutils libcutils libdl -LOCAL_SHARED_LIBRARIES += libmmcamera_interface libmmjpeg_interface +LOCAL_SHARED_LIBRARIES := libcamera_client liblog libhardware libutils libcutils libdl libgui +LOCAL_SHARED_LIBRARIES += libmmcamera_interface libmmjpeg_interface libhidltransport libsensor android.hidl.token@1.0-utils +LOCAL_STATIC_LIBRARIES := libarect LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw +LOCAL_PROPRIETARY_MODULE := true LOCAL_MODULE := camera.$(TARGET_BOARD_PLATFORM) +LOCAL_CLANG := false LOCAL_MODULE_TAGS := optional include $(BUILD_SHARED_LIBRARY) diff --git a/QCamera2/HAL/QCamera2Factory.cpp b/QCamera2/HAL/QCamera2Factory.cpp index 0227868..f8707c7 100644 --- a/QCamera2/HAL/QCamera2Factory.cpp +++ b/QCamera2/HAL/QCamera2Factory.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include "QCamera2Factory.h" @@ -140,6 +141,14 @@ int QCamera2Factory::getCameraInfo(int camera_id, struct camera_info *info) return rc; } +bool QCamera2Factory::can_talk_to_sensormanager() +{ + android::SensorManager& sensorManager( + android::SensorManager::getInstanceForPackage(android::String16("camera"))); + android::Sensor const * const * sensorList; + return sensorManager.getSensorList(&sensorList) >= 0; +} + /*=========================================================================== * FUNCTION : cameraDeviceOpen * @@ -157,9 +166,21 @@ int QCamera2Factory::cameraDeviceOpen(int camera_id, struct hw_device_t **hw_device) { int rc = NO_ERROR; + + android::Mutex::Autolock lock(gCameraWrapperLock); + if (camera_id < 0 || camera_id >= mNumOfCameras) return BAD_VALUE; + // mm-qcamera-daemon blocks until initialization of sensorservice + // and might miss V4L events generated by the HAL during that time, + // causing HAL initialization failures. Avoid those failures by waiting + // for sensorservice initialization before opening the HAL. + if (!can_talk_to_sensormanager()) { + ALOGE("Waiting for sensor service failed."); + return android::NO_INIT; + } + QCamera2HardwareInterface *hw = new QCamera2HardwareInterface((uint32_t)camera_id); if (!hw) { ALOGE("Allocation of hardware interface failed"); @@ -202,7 +223,7 @@ int QCamera2Factory::camera_device_open( } struct hw_module_methods_t QCamera2Factory::mModuleMethods = { - open: QCamera2Factory::camera_device_open, + .open = QCamera2Factory::camera_device_open, }; }; // namespace qcamera diff --git a/QCamera2/HAL/QCamera2Factory.h b/QCamera2/HAL/QCamera2Factory.h index 3504bbd..ce5d905 100644 --- a/QCamera2/HAL/QCamera2Factory.h +++ b/QCamera2/HAL/QCamera2Factory.h @@ -53,12 +53,14 @@ class QCamera2Factory int cameraDeviceOpen(int camera_id, struct hw_device_t **hw_device); static int camera_device_open(const struct hw_module_t *module, const char *id, struct hw_device_t **hw_device); + bool can_talk_to_sensormanager(); public: static struct hw_module_methods_t mModuleMethods; private: int mNumOfCameras; + android::Mutex gCameraWrapperLock; }; }; /*namespace qcamera*/ diff --git a/QCamera2/HAL/QCamera2HWI.cpp b/QCamera2/HAL/QCamera2HWI.cpp index 184a08a..41bd3bb 100644 --- a/QCamera2/HAL/QCamera2HWI.cpp +++ b/QCamera2/HAL/QCamera2HWI.cpp @@ -37,7 +37,6 @@ #include #include #include -#include #include "QCamera2HWI.h" #include "QCameraMem.h" @@ -61,35 +60,35 @@ static pthread_mutex_t g_camlock = PTHREAD_MUTEX_INITIALIZER; volatile uint32_t gCamHalLogLevel = 0; camera_device_ops_t QCamera2HardwareInterface::mCameraOps = { - set_preview_window: QCamera2HardwareInterface::set_preview_window, - set_callbacks: QCamera2HardwareInterface::set_CallBacks, - enable_msg_type: QCamera2HardwareInterface::enable_msg_type, - disable_msg_type: QCamera2HardwareInterface::disable_msg_type, - msg_type_enabled: QCamera2HardwareInterface::msg_type_enabled, - - start_preview: QCamera2HardwareInterface::start_preview, - stop_preview: QCamera2HardwareInterface::stop_preview, - preview_enabled: QCamera2HardwareInterface::preview_enabled, - store_meta_data_in_buffers: QCamera2HardwareInterface::store_meta_data_in_buffers, - - start_recording: QCamera2HardwareInterface::start_recording, - stop_recording: QCamera2HardwareInterface::stop_recording, - recording_enabled: QCamera2HardwareInterface::recording_enabled, - release_recording_frame: QCamera2HardwareInterface::release_recording_frame, - - auto_focus: QCamera2HardwareInterface::auto_focus, - cancel_auto_focus: QCamera2HardwareInterface::cancel_auto_focus, - - take_picture: QCamera2HardwareInterface::take_picture, - cancel_picture: QCamera2HardwareInterface::cancel_picture, - - set_parameters: QCamera2HardwareInterface::set_parameters, - get_parameters: QCamera2HardwareInterface::get_parameters, - put_parameters: QCamera2HardwareInterface::put_parameters, - send_command: QCamera2HardwareInterface::send_command, - - release: QCamera2HardwareInterface::release, - dump: QCamera2HardwareInterface::dump, + .set_preview_window = QCamera2HardwareInterface::set_preview_window, + .set_callbacks = QCamera2HardwareInterface::set_CallBacks, + .enable_msg_type = QCamera2HardwareInterface::enable_msg_type, + .disable_msg_type = QCamera2HardwareInterface::disable_msg_type, + .msg_type_enabled = QCamera2HardwareInterface::msg_type_enabled, + + .start_preview = QCamera2HardwareInterface::start_preview, + .stop_preview = QCamera2HardwareInterface::stop_preview, + .preview_enabled = QCamera2HardwareInterface::preview_enabled, + .store_meta_data_in_buffers = QCamera2HardwareInterface::store_meta_data_in_buffers, + + .start_recording = QCamera2HardwareInterface::start_recording, + .stop_recording = QCamera2HardwareInterface::stop_recording, + .recording_enabled = QCamera2HardwareInterface::recording_enabled, + .release_recording_frame = QCamera2HardwareInterface::release_recording_frame, + + .auto_focus = QCamera2HardwareInterface::auto_focus, + .cancel_auto_focus = QCamera2HardwareInterface::cancel_auto_focus, + + .take_picture = QCamera2HardwareInterface::take_picture, + .cancel_picture = QCamera2HardwareInterface::cancel_picture, + + .set_parameters = QCamera2HardwareInterface::set_parameters, + .get_parameters = QCamera2HardwareInterface::get_parameters, + .put_parameters = QCamera2HardwareInterface::put_parameters, + .send_command = QCamera2HardwareInterface::send_command, + + .release = QCamera2HardwareInterface::release, + .dump = QCamera2HardwareInterface::dump, }; /*=========================================================================== @@ -1715,13 +1714,14 @@ QCameraMemory *QCamera2HardwareInterface::allocateStreamBuf( { if (isNoDisplayMode()) { mem = new QCameraStreamMemory(mGetMemory, + mCallbackCookie, bCachedMem, (bPoolMem) ? &m_memoryPool : NULL, stream_type); } else { cam_dimension_t dim; QCameraGrallocMemory *grallocMemory = - new QCameraGrallocMemory(mGetMemory); + new QCameraGrallocMemory(mGetMemory, mCallbackCookie); mParameters.getStreamDimension(stream_type, dim); if (grallocMemory) @@ -1735,11 +1735,11 @@ QCameraMemory *QCamera2HardwareInterface::allocateStreamBuf( case CAM_STREAM_TYPE_POSTVIEW: { if (isPreviewRestartEnabled() || isNoDisplayMode()) { - mem = new QCameraStreamMemory(mGetMemory, bCachedMem); + mem = new QCameraStreamMemory(mGetMemory, mCallbackCookie, bCachedMem); } else { cam_dimension_t dim; QCameraGrallocMemory *grallocMemory = - new QCameraGrallocMemory(mGetMemory); + new QCameraGrallocMemory(mGetMemory, mCallbackCookie); mParameters.getStreamDimension(stream_type, dim); if (grallocMemory) { @@ -1759,6 +1759,7 @@ QCameraMemory *QCamera2HardwareInterface::allocateStreamBuf( case CAM_STREAM_TYPE_METADATA: case CAM_STREAM_TYPE_OFFLINE_PROC: mem = new QCameraStreamMemory(mGetMemory, + mCallbackCookie, bCachedMem, (bPoolMem) ? &m_memoryPool : NULL, stream_type); @@ -1774,7 +1775,7 @@ QCameraMemory *QCamera2HardwareInterface::allocateStreamBuf( bCachedMem = QCAMERA_ION_USE_CACHE; } ALOGD("%s: vidoe buf using cached memory = %d", __func__, bCachedMem); - QCameraVideoMemory *videoMemory = new QCameraVideoMemory(mGetMemory, bCachedMem); + QCameraVideoMemory *videoMemory = new QCameraVideoMemory(mGetMemory, mCallbackCookie, bCachedMem); mem = videoMemory; mVideoMem = videoMemory; } diff --git a/QCamera2/HAL/QCamera2Hal.cpp b/QCamera2/HAL/QCamera2Hal.cpp index 2d094f2..86e5f40 100644 --- a/QCamera2/HAL/QCamera2Hal.cpp +++ b/QCamera2/HAL/QCamera2Hal.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2015, The Linux Foundataion. All rights reserved. +/* Copyright (c) 2012, The Linux Foundataion. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -30,31 +30,31 @@ #include "QCamera2Factory.h" static hw_module_t camera_common = { - tag: HARDWARE_MODULE_TAG, - module_api_version: CAMERA_MODULE_API_VERSION_1_0, - hal_api_version: HARDWARE_HAL_API_VERSION, - id: CAMERA_HARDWARE_MODULE_ID, - name: "Xiaomi Cancro OSS camera HAL", - author: "Qualcomm Innovation Center Inc, Vasishath and Shahan_mik3", - methods: &qcamera::QCamera2Factory::mModuleMethods, - dso: NULL, - reserved: {0}, + .tag = HARDWARE_MODULE_TAG, + .module_api_version = CAMERA_MODULE_API_VERSION_1_0, + .hal_api_version = HARDWARE_HAL_API_VERSION, + .id = CAMERA_HARDWARE_MODULE_ID, + .name = "QCamera Module", + .author = "Qualcomm Innovation Center Inc", + .methods = &qcamera::QCamera2Factory::mModuleMethods, + .dso = NULL, + .reserved = {0}, }; camera_module_t HAL_MODULE_INFO_SYM = { - common: camera_common, - get_number_of_cameras: qcamera::QCamera2Factory::get_number_of_cameras, - get_camera_info: qcamera::QCamera2Factory::get_camera_info, + .common = camera_common, + .get_number_of_cameras = qcamera::QCamera2Factory::get_number_of_cameras, + .get_camera_info = qcamera::QCamera2Factory::get_camera_info, #ifndef USE_JB_MR1 - set_callbacks: NULL, + .set_callbacks = NULL, #endif #ifdef USE_VENDOR_CAMERA_EXT - get_vendor_tag_ops: NULL, + .get_vendor_tag_ops = NULL, #ifndef USE_KK_CODE - open_legacy: NULL, - set_torch_mode: NULL, - init: NULL, + .open_legacy = NULL, + .set_torch_mode = NULL, + .init = NULL, #endif - reserved: {0} + .reserved = {0} #endif }; diff --git a/QCamera2/HAL/QCameraMem.cpp b/QCamera2/HAL/QCameraMem.cpp index 40c0282..bbd4366 100644 --- a/QCamera2/HAL/QCameraMem.cpp +++ b/QCamera2/HAL/QCameraMem.cpp @@ -879,11 +879,13 @@ int QCameraHeapMemory::getMatchBufIndex(const void *opaque, * RETURN : none *==========================================================================*/ QCameraStreamMemory::QCameraStreamMemory(camera_request_memory getMemory, + void *user, bool cached, QCameraMemoryPool *pool, cam_stream_type_t streamType) :QCameraMemory(cached, pool, streamType), - mGetMemory(getMemory) + mGetMemory(getMemory), + mCallbackCookie(user) { for (int i = 0; i < MM_CAMERA_MAX_NUM_FRAMES; i ++) mCameraMemory[i] = NULL; @@ -924,7 +926,7 @@ int QCameraStreamMemory::allocate(uint8_t count, size_t size) return rc; for (int i = 0; i < count; i ++) { - mCameraMemory[i] = mGetMemory(mMemInfo[i].fd, mMemInfo[i].size, 1, this); + mCameraMemory[i] = mGetMemory(mMemInfo[i].fd, mMemInfo[i].size, 1, mCallbackCookie); } mBufferCount = count; traceLogAllocEnd((size * count)); @@ -953,7 +955,7 @@ int QCameraStreamMemory::allocateMore(uint8_t count, size_t size) return rc; for (int i = mBufferCount; i < mBufferCount + count; i++) { - mCameraMemory[i] = mGetMemory(mMemInfo[i].fd, mMemInfo[i].size, 1, this); + mCameraMemory[i] = mGetMemory(mMemInfo[i].fd, mMemInfo[i].size, 1, mCallbackCookie); } mBufferCount = (uint8_t)(mBufferCount + count); traceLogAllocEnd((size * count)); @@ -1052,7 +1054,7 @@ camera_memory_t *QCameraStreamMemory::getMemory(uint32_t index, *==========================================================================*/ native_handle_t *QCameraVideoMemory::updateNativeHandle(uint32_t index, bool metadata) { - if (index >= mMetaBufCount || (!metadata && index >= mBufferCount)) { + if (index >= mMetaBufCount || (!metadata && index >= (uint32_t)mBufferCount)) { return NULL; } @@ -1207,8 +1209,8 @@ void *QCameraStreamMemory::getPtr(uint32_t index) const * RETURN : none *==========================================================================*/ QCameraVideoMemory::QCameraVideoMemory(camera_request_memory getMemory, - bool cached) - : QCameraStreamMemory(getMemory, cached) + void *user, bool cached) + : QCameraStreamMemory(getMemory, user, cached) { memset(mMetadata, 0, sizeof(mMetadata)); memset(mNativeHandle, 0, sizeof(mNativeHandle)); @@ -1250,7 +1252,7 @@ int QCameraVideoMemory::allocate(uint8_t count, size_t size) for (int i = 0; i < count; i ++) { mMetadata[i] = mGetMemory(-1, - sizeof(media_metadata_buffer), 1, this); + sizeof(media_metadata_buffer), 1, mCallbackCookie); if (!mMetadata[i]) { ALOGE("allocation of video metadata failed."); for (int j = 0; j <= i-1; j ++) @@ -1322,7 +1324,7 @@ int QCameraVideoMemory::allocateMore(uint8_t count, size_t size) for (int i = mBufferCount; i < count + mBufferCount; i ++) { mMetadata[i] = mGetMemory(-1, - sizeof(media_metadata_buffer), 1, this); + sizeof(media_metadata_buffer), 1, mCallbackCookie); if (!mMetadata[i]) { ALOGE("allocation of video metadata failed."); for (int j = mBufferCount; j <= i-1; j ++) { @@ -1462,7 +1464,7 @@ int QCameraVideoMemory::getMatchBufIndex(const void *opaque, * * RETURN : none *==========================================================================*/ -QCameraGrallocMemory::QCameraGrallocMemory(camera_request_memory getMemory) +QCameraGrallocMemory::QCameraGrallocMemory(camera_request_memory getMemory, void *user) : QCameraMemory(true) { mMinUndequeuedBuffers = 0; @@ -1470,6 +1472,7 @@ QCameraGrallocMemory::QCameraGrallocMemory(camera_request_memory getMemory) mWidth = mHeight = mStride = mScanline = 0; mFormat = HAL_PIXEL_FORMAT_YCrCb_420_SP; mGetMemory = getMemory; + mCallbackCookie = user; for (int i = 0; i < MM_CAMERA_MAX_NUM_FRAMES; i ++) { mBufferHandle[i] = NULL; mLocalFlag[i] = BUFFER_NOT_OWNED; @@ -1730,7 +1733,7 @@ int QCameraGrallocMemory::allocate(uint8_t count, size_t /*size*/) mGetMemory(mPrivateHandle[cnt]->fd, (size_t)mPrivateHandle[cnt]->size, 1, - (void *)this); + mCallbackCookie); CDBG("%s: idx = %d, fd = %d, size = %d, offset = %d", __func__, cnt, mPrivateHandle[cnt]->fd, mPrivateHandle[cnt]->size, diff --git a/QCamera2/HAL/QCameraMem.h b/QCamera2/HAL/QCameraMem.h index f895c5e..ea809ca 100644 --- a/QCamera2/HAL/QCameraMem.h +++ b/QCamera2/HAL/QCameraMem.h @@ -43,6 +43,10 @@ extern "C" { //OFFSET, SIZE, USAGE, TIMESTAMP, FORMAT #define VIDEO_METADATA_NUM_INTS 5 +#ifndef VIDEO_METADATA_NUM_COMMON_INTS +#define VIDEO_METADATA_NUM_COMMON_INTS 1 +#endif + namespace qcamera { class QCameraMemoryPool; @@ -164,6 +168,7 @@ class QCameraHeapMemory : public QCameraMemory { class QCameraStreamMemory : public QCameraMemory { public: QCameraStreamMemory(camera_request_memory getMemory, + void *user, bool cached, QCameraMemoryPool *pool = NULL, cam_stream_type_t streamType = CAM_STREAM_TYPE_DEFAULT); @@ -180,6 +185,7 @@ class QCameraStreamMemory : public QCameraMemory { protected: camera_request_memory mGetMemory; + void *mCallbackCookie; camera_memory_t *mCameraMemory[MM_CAMERA_MAX_NUM_FRAMES]; }; @@ -187,7 +193,7 @@ class QCameraStreamMemory : public QCameraMemory { // framework. They are allocated from /dev/ion or gralloc. class QCameraVideoMemory : public QCameraStreamMemory { public: - QCameraVideoMemory(camera_request_memory getMemory, bool cached); + QCameraVideoMemory(camera_request_memory getMemory, void *user, bool cached); virtual ~QCameraVideoMemory(); virtual int allocate(uint8_t count, size_t size); @@ -212,7 +218,7 @@ class QCameraGrallocMemory : public QCameraMemory { BUFFER_OWNED, }; public: - QCameraGrallocMemory(camera_request_memory getMemory); + QCameraGrallocMemory(camera_request_memory getMemory, void *user); void setNativeWindow(preview_stream_ops_t *anw); virtual ~QCameraGrallocMemory(); @@ -239,6 +245,7 @@ class QCameraGrallocMemory : public QCameraMemory { preview_stream_ops_t *mWindow; int mWidth, mHeight, mFormat, mStride, mScanline; camera_request_memory mGetMemory; + void *mCallbackCookie; camera_memory_t *mCameraMemory[MM_CAMERA_MAX_NUM_FRAMES]; int mMinUndequeuedBuffers; }; diff --git a/QCamera2/HAL/QCameraParameters.cpp b/QCamera2/HAL/QCameraParameters.cpp index 47df034..30fb5a2 100644 --- a/QCamera2/HAL/QCameraParameters.cpp +++ b/QCamera2/HAL/QCameraParameters.cpp @@ -45,6 +45,8 @@ namespace qcamera { // Parameter keys to communicate between camera application and driver. +const char QCameraParameters::FOCUS_MODE_MANUAL_POSITION[] = "manual"; +const char QCameraParameters::WHITE_BALANCE_MANUAL_CCT[] = "manual-cct"; const char QCameraParameters::KEY_QC_SUPPORTED_HFR_SIZES[] = "hfr-size-values"; const char QCameraParameters::KEY_QC_PREVIEW_FRAME_RATE_MODE[] = "preview-frame-rate-mode"; const char QCameraParameters::KEY_QC_SUPPORTED_PREVIEW_FRAME_RATE_MODES[] = "preview-frame-rate-modes"; @@ -127,6 +129,8 @@ const char QCameraParameters::KEY_QC_CDS_MODE[] = "cds-mode"; const char QCameraParameters::KEY_QC_VIDEO_ROTATION[] = "video-rotation"; const char QCameraParameters::KEY_QC_AF_BRACKET[] = "af-bracket"; const char QCameraParameters::KEY_QC_SUPPORTED_AF_BRACKET_MODES[] = "af-bracket-values"; +const char QCameraParameters::KEY_QC_MORPHO_HDR[] = "morpho-hdr"; +const char QCameraParameters::KEY_QC_SUPPORTED_MORPHO_HDR_MODES[] = "morpho-hdr-values"; const char QCameraParameters::KEY_QC_CHROMA_FLASH[] = "chroma-flash"; const char QCameraParameters::KEY_QC_SUPPORTED_CHROMA_FLASH_MODES[] = "chroma-flash-values"; const char QCameraParameters::KEY_QC_OPTI_ZOOM[] = "opti-zoom"; @@ -148,8 +152,8 @@ const char QCameraParameters::KEY_QC_LONG_SHOT[] = "long-shot"; const char QCameraParameters::KEY_QC_LONGSHOT_SUPPORTED[] = "longshot-supported"; const char QCameraParameters::KEY_QC_ZSL_HDR_SUPPORTED[] = "zsl-hdr-supported"; const char QCameraParameters::KEY_QC_AUTO_HDR_SUPPORTED[] = "auto-hdr-supported"; -const char QCameraParameters::WHITE_BALANCE_MANUAL_CCT[] = "manual-cct"; -const char QCameraParameters::FOCUS_MODE_MANUAL_POSITION[] = "manual"; +//const char QCameraParameters::WHITE_BALANCE_MANUAL_CCT[] = "manual-cct"; +//const char QCameraParameters::FOCUS_MODE_MANUAL_POSITION[] = "manual"; // Values for effect settings. const char QCameraParameters::EFFECT_EMBOSS[] = "emboss"; @@ -2841,7 +2845,7 @@ int32_t QCameraParameters::setMCEValue(const QCameraParameters& params) * NO_ERROR -- success * none-zero failure code *==========================================================================*/ -int32_t QCameraParameters::setDISValue(const QCameraParameters& params) +int32_t QCameraParameters::setDISValue(__unused const QCameraParameters& params) { const char *str = params.get(KEY_QC_DIS); const char *prev_str = get(KEY_QC_DIS); @@ -9358,7 +9362,6 @@ QCameraReprocScaleParam::QCameraReprocScaleParam(QCameraParameters *parent) : mParent(parent), mScaleEnabled(false), mIsUnderScaling(false), - mScaleDirection(0), mNeedScaleCnt(0), mSensorSizeTblCnt(0), mSensorSizeTbl(NULL), diff --git a/QCamera2/HAL/QCameraParameters.h b/QCamera2/HAL/QCameraParameters.h index e66fedf..9a95665 100644 --- a/QCamera2/HAL/QCameraParameters.h +++ b/QCamera2/HAL/QCameraParameters.h @@ -91,10 +91,9 @@ class QCameraReprocScaleParam{ size_t checkScaleSizeTable(size_t scale_cnt, cam_dimension_t *scale_tbl, size_t org_cnt, cam_dimension_t *org_tbl); - QCameraParameters *mParent; + QCameraParameters (*mParent); bool mScaleEnabled; bool mIsUnderScaling; //if in scale status - bool mScaleDirection; // 0: Upscaling; 1: Downscaling // picture size cnt that need scale operation size_t mNeedScaleCnt; @@ -117,6 +116,8 @@ class QCameraParameters: public CameraParameters public: QCameraParameters(); QCameraParameters(const String8 ¶ms); + static const char CameraParameters::FOCUS_MODE_MANUAL_POSITION[]; + static const char CameraParameters::WHITE_BALANCE_MANUAL_CCT[]; ~QCameraParameters(); // Supported PREVIEW/RECORDING SIZES IN HIGH FRAME RATE recording, sizes in pixels. @@ -201,8 +202,8 @@ class QCameraParameters: public CameraParameters static const char KEY_QC_MIN_WB_CCT[]; static const char KEY_QC_MAX_WB_CCT[]; static const char KEY_QC_LONG_SHOT[]; - static const char WHITE_BALANCE_MANUAL_CCT[]; - static const char FOCUS_MODE_MANUAL_POSITION[]; +// static const char WHITE_BALANCE_MANUAL_CCT[]; +// static const char FOCUS_MODE_MANUAL_POSITION[]; static const char KEY_QC_MANUAL_FOCUS_POSITION[]; static const char KEY_QC_MANUAL_FOCUS_POS_TYPE[]; @@ -268,6 +269,10 @@ class QCameraParameters: public CameraParameters static const char KEY_QC_AF_BRACKET[]; static const char KEY_QC_SUPPORTED_AF_BRACKET_MODES[]; + //Morpho HDR + static const char KEY_QC_MORPHO_HDR[]; + static const char KEY_QC_SUPPORTED_MORPHO_HDR_MODES[]; + //Chroma Flash static const char KEY_QC_CHROMA_FLASH[]; static const char KEY_QC_SUPPORTED_CHROMA_FLASH_MODES[]; diff --git a/QCamera2/HAL/test/Android.mk b/QCamera2/HAL/test/Android.mk index d850489..9b1d644 100644 --- a/QCamera2/HAL/test/Android.mk +++ b/QCamera2/HAL/test/Android.mk @@ -39,7 +39,7 @@ LOCAL_C_INCLUDES += \ frameworks/base/include/media \ external/skia/include/core \ external/skia/include/images \ - hardware/qcom/display/libgralloc \ + hardware/qcom/display/msm8994/libgralloc \ frameworks/av/include/media/stagefright \ frameworks/native/include/media/openmax \ diff --git a/QCamera2/HAL/wrapper/QualcommCamera.cpp b/QCamera2/HAL/wrapper/QualcommCamera.cpp index a2a02bc..1ab43ef 100644 --- a/QCamera2/HAL/wrapper/QualcommCamera.cpp +++ b/QCamera2/HAL/wrapper/QualcommCamera.cpp @@ -58,19 +58,19 @@ extern "C" { static hw_module_methods_t camera_module_methods = { - open: camera_device_open, + .open = camera_device_open, }; static hw_module_t camera_common = { - tag: HARDWARE_MODULE_TAG, - module_api_version: CAMERA_MODULE_API_VERSION_1_0, - hal_api_version: HARDWARE_HAL_API_VERSION, - id: CAMERA_HARDWARE_MODULE_ID, - name: "QCamera Module", - author: "Quic on behalf of CAF", - methods: &camera_module_methods, - dso: NULL, - reserved: {0}, + .tag = HARDWARE_MODULE_TAG, + .module_api_version = CAMERA_MODULE_API_VERSION_1_0, + .hal_api_version = HARDWARE_HAL_API_VERSION, + .id = CAMERA_HARDWARE_MODULE_ID, + .name = "QCamera Module", + .author = "Quic on behalf of CAF", + .methods = &camera_module_methods, + .dso = NULL, + .reserved = {0}, }; using namespace qcamera; diff --git a/QCamera2/stack/mm-camera-interface/Android.mk b/QCamera2/stack/mm-camera-interface/Android.mk index a744faf..378552b 100755 --- a/QCamera2/stack/mm-camera-interface/Android.mk +++ b/QCamera2/stack/mm-camera-interface/Android.mk @@ -4,6 +4,10 @@ LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +LOCAL_CLANG_CFLAGS += \ + -Wno-error=memsize-comparison \ + -Wno-error=missing-field-initializers + MM_CAM_FILES := \ src/mm_camera_interface.c \ src/mm_camera.c \ @@ -38,7 +42,7 @@ LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include/media LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr -LOCAL_C_INCLUDES += hardware/qcom/media/mm-core/inc +LOCAL_C_INCLUDES += hardware/qcom/media/msm8974/mm-core/inc ifeq ($(call is-platform-sdk-version-at-least,20),true) LOCAL_C_INCLUDES += system/media/camera/include endif @@ -53,6 +57,7 @@ LOCAL_SRC_FILES := $(MM_CAM_FILES) LOCAL_MODULE := libmmcamera_interface LOCAL_PRELINK_MODULE := false +LOCAL_CLANG := false LOCAL_SHARED_LIBRARIES := libdl libcutils liblog LOCAL_MODULE_TAGS := optional diff --git a/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c b/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c index 5f01626..e289c0e 100644 --- a/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c +++ b/QCamera2/stack/mm-camera-interface/src/mm_camera_interface.c @@ -47,7 +47,7 @@ static pthread_mutex_t g_intf_lock = PTHREAD_MUTEX_INITIALIZER; -static mm_camera_ctrl_t g_cam_ctrl = {0, {{0}}, {0}, {{0}}}; +static mm_camera_ctrl_t g_cam_ctrl; static pthread_mutex_t g_handler_lock = PTHREAD_MUTEX_INITIALIZER; static uint16_t g_handler_history_count = 0; /* history count for handler */ @@ -1333,6 +1333,7 @@ void get_sensor_info() { int rc = 0; int dev_fd = 0; + int i = 0; struct media_device_info mdev_info; int num_media_devices = 0; size_t num_cameras = 0; @@ -1553,7 +1554,15 @@ uint8_t get_num_of_cameras() cfg.cfgtype = CFG_SINIT_PROBE_WAIT_DONE; cfg.cfg.setting = NULL; if (ioctl(sd_fd, VIDIOC_MSM_SENSOR_INIT_CFG, &cfg) < 0) { - CDBG_ERROR("failed"); + CDBG("failed...Camera Daemon may not up so try again"); + for(int i = 0; i < MM_CAMERA_EVT_ENTRY_MAX; i++) { + if (ioctl(sd_fd, VIDIOC_MSM_SENSOR_INIT_CFG, &cfg) < 0) { + CDBG("failed...Camera Daemon may not up so try again"); + continue; + } + else + break; + } } close(sd_fd); dev_fd = 0; diff --git a/QCamera2/stack/mm-jpeg-interface/Android.mk b/QCamera2/stack/mm-jpeg-interface/Android.mk index 247647d..13ad56e 100644 --- a/QCamera2/stack/mm-jpeg-interface/Android.mk +++ b/QCamera2/stack/mm-jpeg-interface/Android.mk @@ -2,6 +2,9 @@ OLD_LOCAL_PATH := $(LOCAL_PATH) LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) +LOCAL_CLANG_CFLAGS += \ + -Wno-error=unused-variable + LOCAL_CFLAGS+= -D_ANDROID_ LOCAL_CFLAGS += -Wall -Wextra -Werror -Wno-unused-parameter @@ -47,6 +50,7 @@ LOCAL_SRC_FILES := \ LOCAL_MODULE := libmmjpeg_interface LOCAL_PRELINK_MODULE := false +LOCAL_CLANG := false LOCAL_SHARED_LIBRARIES := libdl libcutils liblog libqomx_core LOCAL_MODULE_TAGS := optional diff --git a/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_ionbuf.c b/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_ionbuf.c index b1f4a93..b518b0e 100644 --- a/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_ionbuf.c +++ b/QCamera2/stack/mm-jpeg-interface/src/mm_jpeg_ionbuf.c @@ -29,6 +29,7 @@ #include "mm_jpeg_ionbuf.h" #include +#include /** buffer_allocate: * diff --git a/mm-image-codec/qomx_core/Android.mk b/mm-image-codec/qomx_core/Android.mk index ad414c9..5a16793 100644 --- a/mm-image-codec/qomx_core/Android.mk +++ b/mm-image-codec/qomx_core/Android.mk @@ -22,6 +22,6 @@ LOCAL_SRC_FILES := qomx_core.c LOCAL_MODULE := libqomx_core LOCAL_PRELINK_MODULE := false -LOCAL_SHARED_LIBRARIES := libcutils libdl +LOCAL_SHARED_LIBRARIES := libcutils libdl liblog include $(BUILD_SHARED_LIBRARY) diff --git a/mm-image-codec/qomx_core/qomx_core.c b/mm-image-codec/qomx_core/qomx_core.c index 8735f4d..856efa8 100644 --- a/mm-image-codec/qomx_core/qomx_core.c +++ b/mm-image-codec/qomx_core/qomx_core.c @@ -25,8 +25,8 @@ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/ -#define LOG_NDEBUG 0 -#define LOG_NIDEBUG 0 +#define LOG_NDEBUG 1 +#define LOG_NIDEBUG 1 #define LOG_TAG "qomx_image_core" #include