Skip to content

Releases: Cascable/cascablecore-distribution

15.0.1

20 Dec 15:50
Compare
Choose a tag to compare

Bug Fixes

  • Fixed a bug that'd cause camera-initated transfers to incorrectly have their isOnlyDestinationForImage property set to NO on older USB-connected Sony cameras. [CORE-959]

15.0

26 Nov 12:17
Compare
Choose a tag to compare

Support for "True Tethering" for Canon and Nikon Cameras

CascableCore 15 adds support for "true tethering" for Canon and Nikon cameras — that is, being able to transfer images from the camera without involving the camera's storage at all. When the camera is set to this mode, this behaviour matches that of newer Sony cameras. [CORE-374]

This is done with the addition of the CBLPropertyIdentifierImageDestination property to Canon and Nikon cameras that support this mode. Typically, you'll see values like:

  • "Camera" (CBLPropertyCommonValueImageDestinationCamera)
  • "Host + Camera" (CBLPropertyCommonValueImageDestinationCameraAndHost)
  • "Host" (CBLPropertyCommonValueImageDestinationConnectedHost)

When set to "Host + Camera" or "Host", you'll get camera-initiated transfer requests from the camera to transfer these images. Important: These requests will have their executionRequiredToClearBuffer property set to true, and you must handle them - even if you discard the result - to keep the requests flowing. If you don't, the camera will get stuck waiting for the images to be transferred and will eventually refuse to shoot images.

When deciding how to handle a camera-initiated transfer request, you can inspect the request object:

  • Requests with both isOnlyDestinationForImage and executionRequiredToClearBuffer set to false are images saved to the camera's storage card(s) and the camera isn't particularly fussed if you transfer them over or not. You can ignore these entirely if you wish.

  • Requests with isOnlyDestinationForImage set to false and executionRequiredToClearBuffer set to true are images saved to the camera's storage card(s) but the camera is waiting for you to transfer them as well. You must handle these requests, but the image data isn't critical (since it's also stored on the camera).

  • Requests with both isOnlyDestinationForImage and executionRequiredToClearBuffer set to true are images that're only being transferred to the connected host (i.e., you) and won't be saved to the camera's storage card(s). You must handle these requests, and if you don't store the result you will be losing image data. You'll get two separate transfer requests in this case - one for the image on the storage card(s), and another for the one being transferred directly to the host.

Note: Cameras often have no opinion on the file name of images transferred directly to the host, even if that image also gets saved to the storage card(s). Such requests will have a nil value for the fileNameHint property.

Other Camera-Initiated Transfer Behaviour Changes

  • When possible, camera-initiated transfers from Canon and Nikon cameras will offer an original representation of the image whether "true tethering" or not. Previously, they'd only offer preview representations.

  • Canon and Nikon cameras will no longer filter out camera-initiated transfer requests that come in very close to one other (such as a RAW+JPEG pair). It's up to clients to handle such filtering if it's desired.

Camera-Initiated Transfer API Changes

  • Added -predictedFileSizeForRepresentation: to id <CBLCameraInitiatedTransferRequest>.

  • Added -predictedUTIForRepresentation: to id <CBLCameraInitiatedTransferRequest>.

  • Added -fileSizeForRepresentation: to id <CBLCameraInitiatedTransferResult>.

  • Added -dateProduced to both id <CBLCameraInitiatedTransferRequest> and id <CBLCameraInitiatedTransferResult>.

  • Added variants of the -writeRepresentation:… and -generateDataForRepresentation:… APIs on id <CBLCameraInitiatedTransferResult> that take a completionQueue: parameter.

New API

  • Added -fetchVideoMetadata… methods to id <CBLFileSystemItem>, which can be used to load video-specific metadata. [CORE-919]

  • Added additional property identifiers and support for cameras (notably Nikon cameras) that have separate exposure properties for video recording vs. stills shooting. For other cameras that support video recording, CascableCore will mirror the "standard" properties to the video variants, meaning you can always use the video variants when a camera is in video mode. These new properties are CBLPropertyIdentifierVideoISOSpeed, CBLPropertyIdentifierVideoShutterSpeed, CBLPropertyIdentifierVideoAperture, and CBLPropertyIdentifierVideoExposureCompensation. [CORE-921]

14.1.2

25 Nov 10:05
Compare
Choose a tag to compare

Bug Fixes

  • Fixed a bug where attempting to put a Canon camera that supports simultaneous filesystem and shooting command categories into the filesystem category would (erroneously) fail with a CBLErrorCodeRequiresPhysicalInteraction error.

  • Fixed a bug where USB cameras could fail to be discovered if the device has no active network interfaces and the camera was connected after camera discovery starts. [CORE-926]

  • Worked around a bug introduced in iOS 18.1 and macOS 15.1 that'd cause thumbnails for JPEG images from Canon cameras to be rendered incorrectly. [CORE-918]

  • Thumbnails are now loaded for video files from Canon cameras.

  • Fixed duplicate events being delivered via the filesystem observer APIs from some cameras.

14.1.1

31 Oct 09:09
Compare
Choose a tag to compare

Bug Fixes

  • Worked around a crash, introduced in iOS 18, that would happen when attempting to preview HIF images on certain Canon cameras. Previews for such images will now fail to load with the error CBLErrorCodeNoThumbnail rather than crashing.

14.1

29 Oct 09:42
Compare
Choose a tag to compare

Camera Compatibility

  • Added initial support for the Canon EOS R5 Mark II.

Note: The EOS R5 Mark II has a number of... eccentricities that make it behave a little bit differently to prior Canon cameras. We've done our best to shield clients of CascableCore from these, but a couple of exceptions remain:

  • The fetchThumbnail… and fetchEXIFMetadata… methods will always fail with the error CBLErrorCodeNotAvailable.

  • The fetchPreview… methods may take longer to execute than is expected.

  • When streaming files from the camera with the streamItem… methods, cancelling the transfer midway through may have a longer period than expected between cancelling the transfer and the transfer's completion handler being called.

We're continuing to investigate these issues.

14.0.2

29 Jul 11:19
Compare
Choose a tag to compare
  • Fixed a bug that would cause the available command categories to be incorrectly reported for some Nikon cameras, including the Zf.

14.0.1

19 Jul 08:33
Compare
Choose a tag to compare
  • Fixed a configuration error that caused CascableCore 14.0.0 to be built with an incorrect deployment target.

14.0.0

18 Jul 10:17
Compare
Choose a tag to compare

Support for visionOS

CascableCore now supports the visionOS platform. Unfortunately, visionOS doesn't currently support USB connections to cameras.

Support for Applying Ratings to Files

CascableCore now allows you to apply ratings to images and videos on camera storage cards. Currently, this is only supported by Canon EOS cameras. [CORE-332]

The API for this is mainly in id <CBLFileSystemItem>. The -ratingMutationType property tells you the type of rating the particular file supports, and -updateRatingTo:completionHandler: can be called to apply a new rating to the file.

Additionally, the CBLCameraSupportedFunctionalityMutableRatings functionality flag can be used to see if a camera generally supports applying ratings to files.

Camera Compatibility

  • Added support for newer Canon PowerShot cameras via USB. This includes the G7X II and newer, SX70 HS and newer, SX730 HS and newer, and the V10. Do note that PowerShot models tend to have quite a restricted set of property options compared to EOS models. [CORE-744]

API Changes

  • Renamed the -operatingSystemIsNewEnoughForWiredCameras property on CBLCameraDiscovery to -platformSupportsWiredCameras.

Bug Fixes

  • Fixed a bug that'd cause thumbnails of JPEG images to load incorrectly from Canon and Nikon cameras. [CORE-718]

  • Fixed a bug that'd cause discovery of all camera types (including via USB and the simulated camera plugin) to take several minutes if the client device happened to be connected to a WiFi network with certain traffic limitations in place (such as a strict firewall). Network-connected cameras may still not be detected if traffic to them is blocked, but discovery of other cameras will no longer be affected. [CORE-725]

Misc.

  • Numeric CBLErrorCode values are now explicitly declared in the NSError+CBLExtensions.h header to aid debugging. The values themselves are unchanged.

13.2.0

19 Apr 14:03
Compare
Choose a tag to compare

API Changes

  • Added the naturalImageSize and requiresImageResizeToAvoidDistortion properties to id <CBLCameraLiveViewFrame> to aid with situations where cameras deliver distorted live view images. See the documentation for these properties for a detailed discussion.

13.1.0

04 Apr 11:06
Compare
Choose a tag to compare

Camera Compatibility

  • Added support for non-JPEG live view streams from the Canon EOS 1300D. [CORE-694]

Important: If you're working with live view pixel buffers directly, it's important to handle the case where the pixel buffer format changes mid-stream. The EOS 1300D switches from JPEG to RGB24 for live view during video recording, for instance. If you're using CascableCore's own image rendering via the image property on live view frames, no code changes should be necessary.