Hello community, here is the log from the commit of package digikam for openSUSE:Factory checked in at 2013-04-18 10:14:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/digikam (Old) and /work/SRC/openSUSE:Factory/.digikam.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "digikam", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/digikam/digikam.changes 2013-03-21 10:38:12.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.digikam.new/digikam.changes 2013-04-18 10:14:06.000000000 +0200 @@ -1,0 +2,6 @@ +Mon Apr 15 14:14:46 UTC 2013 - [email protected] + +- Added patch digikam-patch78541.diff from upstream to fix + detection of certain cameras (bnc#814622, bko#311393) + +------------------------------------------------------------------- New: ---- digikam-patch78541.diff ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ digikam.spec ++++++ --- /var/tmp/diff_new_pack.HwmEoK/_old 2013-04-18 10:14:09.000000000 +0200 +++ /var/tmp/diff_new_pack.HwmEoK/_new 2013-04-18 10:14:09.000000000 +0200 @@ -36,6 +36,8 @@ Patch5: digikam_no_build_vkontakte.diff # PATCH-FIX-UPSTREAM digikam-3.0.0.no-kdcraw.version-check.patch -- version check for libkdcraw currently broken Patch6: digikam-3.0.0.no-kdcraw.version-check.patch +# PATCH-FIX-UPSTREAM digikam-patch78541.diff -- [email protected] find devices by usb vendor and product id +Patch7: digikam-patch78541.diff BuildRequires: ImageMagick BuildRequires: bison BuildRequires: boost-devel @@ -247,6 +249,7 @@ %patch3 %patch5 %patch6 -p1 +%patch7 -p1 # Remove build time references so build-compare can do its work FAKE_BUILDDATE=$(LC_ALL=C date -u -r %{_sourcedir}/%{name}.changes '+%%b %%e %%Y') ++++++ digikam-patch78541.diff ++++++ commit 1f0dbbd3b3a6246e8c66b038a3f1e06af2f5ee11 Author: Gilles Caulier <[email protected]> Date: Mon Apr 1 14:59:20 2013 +0200 Apply patch #78541 from Marcus Meissner about to find devices by usb vendor and product id, also if libgphoto2 just finds them by interface class. BUGS: 311393 FIXED-IN: 3.2.0 diff --git a/utilities/importui/backend/gpcamera.cpp b/utilities/importui/backend/gpcamera.cpp index 708d424..a41dff1 100644 --- a/core/utilities/importui/backend/gpcamera.cpp +++ b/core/utilities/importui/backend/gpcamera.cpp @@ -1295,8 +1295,7 @@ bool GPCamera::uploadItem(const QString& folder, const QString& itemName, const #ifdef HAVE_GPHOTO2 int errorCode; CameraFile* cfile = 0; - - errorCode = gp_file_new(&cfile); + errorCode = gp_file_new(&cfile); if (errorCode != GP_OK) { @@ -1599,11 +1598,10 @@ void GPCamera::getSupportedCameras(int& count, QStringList& clist) clist.clear(); count = 0; - CameraAbilitiesList* abilList = 0; CameraAbilities abil; + CameraAbilitiesList* abilList = 0; GPContext* context = 0; - - context = gp_context_new(); + context = gp_context_new(); gp_abilities_list_new(&abilList); gp_abilities_list_load(abilList, context); @@ -1661,7 +1659,7 @@ void GPCamera::getSupportedPorts(QStringList& plist) { gp_port_info_list_get_info(list, i, &info); #ifdef HAVE_GPHOTO25 - char *xpath; + char* xpath = 0; gp_port_info_get_name (info, &xpath); plist.append(xpath); #else @@ -1685,8 +1683,7 @@ void GPCamera::getCameraSupportedPorts(const QString& model, QStringList& plist) CameraAbilities abilities; CameraAbilitiesList* abilList = 0; GPContext* context = 0; - - context = gp_context_new(); + context = gp_context_new(); gp_abilities_list_new(&abilList); gp_abilities_list_load(abilList, context); @@ -1719,8 +1716,8 @@ int GPCamera::autoDetect(QString& model, QString& port) GPPortInfoList* infoList = 0; const char* camModel_ = 0, *camPort_ = 0; GPContext* context = 0; + context = gp_context_new(); - context = gp_context_new(); gp_list_new(&camList); gp_abilities_list_new(&abilList); @@ -1789,8 +1786,9 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode CameraList* camList = 0; bool success = false; // get name and port of detected camera - const char* model_str = 0, *port_str = 0; - context = gp_context_new(); + const char* model_str = 0; + const char* port_str = 0; + context = gp_context_new(); // get list of all ports gp_port_info_list_new(&list); @@ -1804,30 +1802,71 @@ bool GPCamera::findConnectedUsbCamera(int vendorId, int productId, QString& mode gp_list_new (&camList); gp_abilities_list_detect(abilList, list, camList, context); gp_context_unref(context); - gp_port_info_list_free(list); int count = gp_list_count(camList); - int cnt = 0; + int cnt = 0; for (int i = 0 ; i < count ; i++) { const char* xmodel = 0; gp_list_get_name(camList, i, &xmodel); - int model = gp_abilities_list_lookup_model (abilList, xmodel); + int model = gp_abilities_list_lookup_model (abilList, xmodel); CameraAbilities ab; - gp_abilities_list_get_abilities (abilList, model, &ab); + gp_abilities_list_get_abilities(abilList, model, &ab); + + if (ab.port != GP_PORT_USB) + continue; + + /* KDE provides us USB Vendor and Product, but we might just + * have covered this via a class match. Check class matched + * cameras also for matchingo USB vendor/product id + */ + if (ab.usb_vendor == 0) + { + int ret; + GPPortInfo info; + const char* xport = 0; + GPPort* gpport = 0; + + /* get the port path so we only look at this bus position */ + gp_list_get_value(camList, i, &xport); + ret = gp_port_info_list_lookup_path (list, xport); - if (ab.port != GP_PORT_USB) continue; - if (ab.usb_vendor != vendorId) continue; - if (ab.usb_product != productId)continue; + if (ret < GP_OK) /* should not happen */ + continue; - /* keep it, and continue iterating, in case we find anohter one */ + /* get the lowlevel port info for the path */ + gp_port_info_list_get_info(list, ret, &info); + + /* open lowlevel driver interface briefly to search */ + gp_port_new(&gpport); + gp_port_set_info(gpport, info); + + /* And now call into the lowlevel usb driver to see if the bus position + * has that specific vendor/product id */ + if (gp_port_usb_find_device(gpport, vendorId, productId) == GP_OK) + { + ab.usb_vendor = vendorId; + ab.usb_product = productId; + } + + gp_port_free (gpport); + } + + if (ab.usb_vendor != vendorId) + continue; + + if (ab.usb_product != productId) + continue; + + /* keep it, and continue iterating, in case we find another one */ gp_list_get_name (camList, i, &model_str); gp_list_get_value(camList, i, &port_str); cnt++; } + gp_port_info_list_free(list); gp_abilities_list_free(abilList); if (cnt > 0) -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
