# gphoto
The `gphoto` crate provides a safe wrapper around the native `libgphoto2` library.
## Dependencies
In order to use the `gphoto` crate, you must have a Unix system with the `libgphoto2` library
installed where it can be found by `pkg-config`.
On Debian-based Linux distributions, install the `libgphoto2-dev` package:
```
sudo apt-get install libgphoto2-dev
```
On OS X, install `libgphoto2` with Homebrew:
```
brew install libgphoto2
```
## Usage
Add `gphoto` as a dependency in `Cargo.toml`:
```toml
[dependencies]
gphoto = "0.1.2"
```
Import the `gphoto` crate. The starting point for nearly all `gphoto` functionality is to create a
context object. You can then autodetect a camera using the `Camera::autodetect()` function:
```rust
extern crate gphoto;
use std::path::Path;
fn main() {
let mut context = gphoto::Context::new().unwrap();
let mut camera = gphoto::Camera::autodetect(&mut context).unwrap();
let capture = camera.capture_image(&mut context).unwrap();
let mut file = gphoto::FileMedia::create(Path::new(&*capture.basename())).unwrap();
camera.download(&mut context, &capture, &mut file).unwrap();
}
```
### OS X Usage
OS X opens cameras automatically when connected, which prevents other applications from opening the
camera device. When attempting to open a camera that is already opened by the operating system, you
will get an error message like the following:
```
Could not claim the USB device
```
To fix this, you have to kill the `PTPCamera` process after connecting a camera to your system:
```
killall PTPCamera
```
Each camera is opened with a separate instance of the `PTPCamera` application. If you have several
cameras connected, you may want to kill individual `PTPCamera` processes instead of using `killall`.
## License
Copyright © 2015 David Cuddeback
Distributed under the [MIT License](LICENSE).
*Note:* By using this crate, your executable will link to the `libgphoto2` C library, which is
licensed under the [LGPL version 2.1](https://github.com/gphoto/libgphoto2/blob/master/COPYING).