diff --git a/libcamera2/QualcommCameraHardware.cpp b/libcamera2/QualcommCameraHardware.cpp index 9548b94..bd83263 100644 --- a/libcamera2/QualcommCameraHardware.cpp +++ b/libcamera2/QualcommCameraHardware.cpp @@ -123,6 +123,7 @@ static preview_size_type preview_sizes[] = { { 800, 480 }, // WVGA { 640, 480 }, // VGA { 480, 320 }, // HVGA + { 384, 288 }, { 352, 288 }, // CIF { 320, 240 }, // QVGA { 240, 160 }, // SQVGA @@ -677,7 +678,7 @@ void QualcommCameraHardware::runFrameThread(void *data) // lifetime of this object. We do not want to dlclose() libqcamera while // LINK_cam_frame is still running. void *libhandle = ::dlopen("libqcamera.so", RTLD_NOW); - LOGV("loading libqcamera at %p", libhandle); + LOGV("FRAME: loading libqcamera at %p", libhandle); if (!libhandle) { LOGE("FATAL ERROR: could not dlopen libqcamera.so: %s", dlerror()); } @@ -1096,6 +1097,23 @@ void QualcommCameraHardware::runAutoFocus() return; } +#if DLOPEN_LIBMMCAMERA + // We need to maintain a reference to libqcamera.so for the duration of the + // AF thread, because we do not know when it will exit relative to the + // lifetime of this object. We do not want to dlclose() libqcamera while + // LINK_cam_frame is still running. + void *libhandle = ::dlopen("libqcamera.so", RTLD_NOW); + LOGV("AF: loading libqcamera at %p", libhandle); + if (!libhandle) { + LOGE("FATAL ERROR: could not dlopen libqcamera.so: %s", dlerror()); + close(mAutoFocusFd); + mAutoFocusFd = -1; + mAutoFocusThreadRunning = false; + mAutoFocusThreadLock.unlock(); + return; + } +#endif + /* This will block until either AF completes or is cancelled. */ LOGV("af start (fd %d)", mAutoFocusFd); bool status = native_set_afmode(mAutoFocusFd, AF_MODE_AUTO); @@ -1116,6 +1134,13 @@ void QualcommCameraHardware::runAutoFocus() mAutoFocusCallback = NULL; mAutoFocusCallbackCookie = NULL; mCallbackLock.unlock(); + +#if DLOPEN_LIBMMCAMERA + if (libhandle) { + ::dlclose(libhandle); + LOGV("AF: dlclose(libqcamera)"); + } +#endif } void QualcommCameraHardware::cancelAutoFocus() diff --git a/libcopybit/Android.mk b/libcopybit/Android.mk index af65671..48cfd60 100644 --- a/libcopybit/Android.mk +++ b/libcopybit/Android.mk @@ -16,6 +16,8 @@ LOCAL_PATH:= $(call my-dir) # HAL module implemenation, not prelinked and stored in # hw/..so + +ifeq ($(TARGET_BOARD_PLATFORM),msm7k) include $(CLEAR_VARS) LOCAL_PRELINK_MODULE := false LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw @@ -24,3 +26,14 @@ LOCAL_SRC_FILES := copybit.cpp LOCAL_MODULE := copybit.msm7k LOCAL_C_INCLUDES += hardware/libhardware/modules/gralloc include $(BUILD_SHARED_LIBRARY) +endif + +ifeq ($(TARGET_BOARD_PLATFORM),qsd8k) +include $(CLEAR_VARS) +LOCAL_PRELINK_MODULE := false +LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw +LOCAL_SHARED_LIBRARIES := liblog +LOCAL_SRC_FILES := copybit.c +LOCAL_MODULE := copybit.qsd8k +include $(BUILD_SHARED_LIBRARY) +endif