KDE Bugtracking System – Attachment 73176 Details for
Bug 303427
failed build against libgphoto2-2.5.0 [patch]
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
updated and tested libgphoto 2.5/2.4 patch
0001-support-both-libgphoto2-2.5.0-and-2.4.0.patch (text/plain), 9.34 KB, created by
Marcus Meissner
on 2012-08-15 09:42:21 UTC
(
hide
)
Description:
updated and tested libgphoto 2.5/2.4 patch
Filename:
MIME Type:
Creator:
Marcus Meissner
Created:
2012-08-15 09:42:21 UTC
Size:
9.34 KB
patch
obsolete
>From dc42797af00d337355ef20c84b17ee52be5f86bc Mon Sep 17 00:00:00 2001 >From: Marcus Meissner <marcus@beiboot.suse.de> >Date: Tue, 24 Jul 2012 17:54:17 +0200 >Subject: [PATCH] support both libgphoto2 2.5.0 and 2.4.0 > >I also rewrote findConnectedUSBCamera to work with both 2.4 and 2.5, >also to be a bit more simple and less quadratic or O(n^3) >--- > CMakeLists.txt | 34 ++++++--- > digikam/utils/config-digikam.h.cmake | 3 + > utilities/cameragui/devices/gpcamera.cpp | 122 +++++++++++++++--------------- > 3 Dateien geändert, 86 Zeilen hinzugefügt(+), 73 Zeilen entfernt(-) > >diff --git a/CMakeLists.txt b/CMakeLists.txt >index be856b2..8516fc6 100644 >--- a/CMakeLists.txt >+++ b/CMakeLists.txt >@@ -329,6 +329,24 @@ IF (NOT WIN32 AND HAVE_GPHOTO2) > MACRO_OPTIONAL_FIND_PACKAGE(USB) > ENDIF (NOT WIN32 AND HAVE_GPHOTO2) > >+IF(GPHOTO2_FOUND) >+ EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) >+ STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") >+ MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) >+ IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) >+ SET(GPHOTO2_FOUND true) >+ ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) >+ SET(GPHOTO2_FOUND false) >+ ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) >+ MACRO_ENSURE_VERSION("2.5.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO25) >+ IF(VERSION_GPHOTO25) >+ SET(HAVE_GPHOTO25 1) >+ ELSE(VERSION_GPHOTO25) >+ SET(HAVE_GPHOTO25 0) >+ ENDIF(VERSION_GPHOTO25) >+ENDIF(GPHOTO2_FOUND) >+ >+ > MACRO_OPTIONAL_FIND_PACKAGE(KdepimLibs) > MACRO_BOOL_TO_01(KDEPIMLIBS_FOUND HAVE_KDEPIMLIBS) > >@@ -378,6 +396,8 @@ MACRO_OPTIONAL_FIND_PACKAGE(Doxygen) > > CONFIGURE_FILE(digikam/utils/config-digikam.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/digikam/utils/config-digikam.h) > >+ >+ > # ================================================================================================== > # Log messages > >@@ -428,18 +448,10 @@ ENDIF(CLAPACK_FOUND) > # ================================================================ > > IF(GPHOTO2_FOUND) >- EXEC_PROGRAM(gphoto2-config ARGS --version RETURN_VALUE _return_VALUE OUTPUT_VARIABLE GPHOTO2_VERSION) >- STRING(REPLACE "libgphoto2" "" GPHOTO2_VERSION "${GPHOTO2_VERSION}") >- MACRO_ENSURE_VERSION("2.4.0" "${GPHOTO2_VERSION}" VERSION_GPHOTO2) >- IF(VERSION_GPHOTO2 AND LIBUSB_FOUND) >- SET(GPHOTO2_FOUND true) >- ELSE(VERSION_GPHOTO2 AND LIBUSB_FOUND) >- SET(GPHOTO2_FOUND false) >- ENDIF(VERSION_GPHOTO2 AND LIBUSB_FOUND) >-ENDIF(GPHOTO2_FOUND) >- >-IF(GPHOTO2_FOUND) > MESSAGE(STATUS " libgphoto2 and libusb libraries found.... YES (optional)") >+ IF(HAVE_GPHOTO25) >+ MESSAGE(STATUS " libgphoto2 2.5 library found............. YES (optional)") >+ endIF(HAVE_GPHOTO25) > ELSE(GPHOTO2_FOUND) > MESSAGE(STATUS " libgphoto2 and libusb libraries found.... NO (optional)") > MESSAGE(STATUS "") >diff --git a/digikam/utils/config-digikam.h.cmake b/digikam/utils/config-digikam.h.cmake >index d886499..4c1c6d3 100644 >--- a/digikam/utils/config-digikam.h.cmake >+++ b/digikam/utils/config-digikam.h.cmake >@@ -45,6 +45,9 @@ > /* Define to 1 if GPhoto2 shared library is installed */ > #cmakedefine HAVE_GPHOTO2 1 > >+/* Define to 1 if libgphoto2 2.5 shared library is installed */ >+#cmakedefine HAVE_GPHOTO25 1 >+ > /* Define to 1 if thumbnails database is used */ > #cmakedefine USE_THUMBS_DB 1 > >diff --git a/utilities/cameragui/devices/gpcamera.cpp b/utilities/cameragui/devices/gpcamera.cpp >index 22e873a..baf7b23 100644 >--- a/utilities/cameragui/devices/gpcamera.cpp >+++ b/utilities/cameragui/devices/gpcamera.cpp >@@ -1329,10 +1329,19 @@ bool GPCamera::uploadItem(const QString& folder, const QString& itemName, const > d->status = 0; > d->status = new GPStatus; > >+#ifdef HAVE_GPHOTO25 > errorCode = gp_camera_folder_put_file(d->camera, > QFile::encodeName(folder).constData(), >+ QFile::encodeName(itemName), >+ GP_FILE_TYPE_NORMAL, > cfile, > d->status->context); >+#else >+ errorCode = gp_camera_folder_put_file(d->camera, >+ QFile::encodeName(folder).constData(), >+ cfile, >+ d->status->context); >+#endif > > if (errorCode != GP_OK) > { >@@ -1651,7 +1660,13 @@ void GPCamera::getSupportedPorts(QStringList& plist) > for (int i = 0 ; i < numPorts ; ++i) > { > gp_port_info_list_get_info(list, i, &info); >+#ifdef HAVE_GPHOTO25 >+ char *xpath; >+ gp_port_info_get_name (info, &xpath); >+ plist.append(xpath); >+#else > plist.append(info.path); >+#endif > } > } > >@@ -1770,9 +1785,11 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode > #ifdef HAVE_GPHOTO2 > CameraAbilitiesList* abilList = 0; > GPPortInfoList* list = 0; >- GPPortInfo info; > GPContext* context = 0; >+ CameraList *camList; > bool success; >+ // get name and port of detected camera >+ const char* model_str = 0, *port_str = 0; > > success = false; > >@@ -1782,76 +1799,57 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode > gp_port_info_list_new(&list); > gp_port_info_list_load(list); > >- int numPorts = gp_port_info_list_count(list); >- >- for (int i = 0 ; i < numPorts ; ++i) >- { >- // create a port object from info >- gp_port_info_list_get_info(list, i, &info); >- GPPort* gpport = 0; >- gp_port_new(&gpport); >- gp_port_set_info(gpport, info); >+ gp_abilities_list_new(&abilList); >+ // get list of all supported cameras >+ gp_abilities_list_load(abilList, context); > >- // check if device is connected to port >- if (gp_port_usb_find_device(gpport, vendorId, productId) == GP_OK) >- { >- CameraList* camList = 0; >- GPPortInfoList* portinfo = 0; >- >- // create three lists >- gp_list_new(&camList); >- gp_port_info_list_new(&portinfo); >- gp_abilities_list_new(&abilList); >- >- // append one port info to >- gp_port_info_list_append(portinfo, info); >- // get list of all supported cameras >- gp_abilities_list_load(abilList, context); >- // search for all supported cameras on one port >- gp_abilities_list_detect(abilList, portinfo, camList, context); >- int count = gp_list_count(camList); >- // get name and port of detected camera >- const char* model_str = 0, *port_str = 0; >- >- if (count > 0) >- { >- if (count > 1) >- { >- kWarning() << "More than one camera detected on port " << port >- << ". Due to restrictions in the GPhoto2 API, " >- << "only the first camera is used."; >- } >+ // autodetect all cameras, then match the list to the passed in USB ids >+ gp_list_new (&camList); >+ gp_abilities_list_detect(abilList, list, camList, context); >+ gp_context_unref(context); >+ gp_port_info_list_free(list); > >- if (gp_list_get_name(camList, 0, &model_str) == GP_OK && >- gp_list_get_value(camList, 0, &port_str) == GP_OK) >- { >- model = QString::fromLatin1(model_str); >- port = QString::fromLatin1(port_str); >+ int count = gp_list_count(camList); >+ int cnt = 0; > >- success = true; >- } >- else >- { >- kError() << "Failed to get information for the listed camera"; >- } >- } >+ for (int i = 0 ; i < count ; ++i) >+ { >+ const char *xmodel; >+ gp_list_get_name(camList, i, &xmodel); >+ int model = gp_abilities_list_lookup_model (abilList, xmodel); >+ CameraAbilities ab; >+ gp_abilities_list_get_abilities (abilList, model, &ab); > >- gp_abilities_list_free(abilList); >- gp_port_info_list_free(portinfo); >- gp_list_free(camList); >- } >+ if (ab.port != GP_PORT_USB) continue; >+ if (ab.usb_vendor != vendorId) continue; >+ if (ab.usb_product != productId)continue; > >- gp_port_free(gpport); >+ /* keep it, and continue iterating, in case we find anohter one */ >+ gp_list_get_name (camList, i, &model_str); >+ gp_list_get_value(camList, i, &port_str); > >- if (success) >- { >- break; >- } >+ cnt++; > } >+ gp_abilities_list_free(abilList); >+ if (cnt > 0) >+ { >+ if (cnt > 1) >+ { >+ kWarning() << "More than one camera detected on port " << port >+ << ". Due to restrictions in the GPhoto2 API, " >+ << "only the first camera is used."; >+ } >+ model = QString::fromLatin1(model_str); >+ port = QString::fromLatin1(port_str); > >- gp_port_info_list_free(list); >- gp_context_unref(context); >+ success = true; >+ } >+ else >+ { >+ kError() << "Failed to get information for the listed camera"; >+ } > >+ gp_list_free(camList); > return success; > #else > Q_UNUSED(vendorId); >-- >1.7.10.4 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 303427
:
72725
| 73176