Add new comment

LibRaw threading requirements.

I'm attempting to use the LibRaw C++ API in a macOS Objective-C application. The LibRaw calls are being made inside an Objective-C++ file (.mm). However, I'm running into consistent crashes when attempting to use LibRaw on a background (non main) thread.

Simply declare a new LibRaw variable is enough to cause a crash:

LibRaw processor;

However, if I first switch over to the main thread using GCD, then it doesn't crash.

dispatch_sync(dispatch_get_main_queue(), ^{
  LibRaw processor;

I'm a bit confused what LibRaw's requirements are with regards to threading. I can understand that a single LibRaw instance should not be shared across threads, but what are the requirements with regards to using a LibRaw instance on a single thread that happens to be a background thread?

In my use-case, I'm attempting to decode RAW files on a background thread before displaying them to the user on the main thread.

(I am using libraw.a 0.18.2 from the download page.)

Thank you.