If a user of the library called `capture` too early then it tries to get
the device orientation from the RCTCamera instance... which doesn't yet
exist.
Instead of adding anything clever in the library, just call
promise.reject() so that the host application can decide what to do with
this issue (probably wait, retry in a bit).
This mainly effects slower Android devices where the camera can take a
long time to initialize.
* Android tap-to-focus and improved (continuous) auto-focus
Tap-to-focus
- On tap, compute focus area around motion event's location, and pass this to the camera parameters
as the new focus area.
- Adds RCTCameraUtils.java file, so far with only a single function that helps compute the focus area
from a motion event. This file can serve as a location for utility constants and functions for the
rest of the app, where such things can be extracted out.
Improved (continuous) auto-focus
- Use FOCUS_MODE_CONTINUOUS_PICTURE/VIDEO when possible to enable continuous auto-focus; fall back to
FOCUS_MODE_AUTO otherwise, if able.
Other changes
- Update README to specify differences between iOS and Android for focus and zoom functionality.
- Update AndroidManifest with more thorough list of permissions and features.
- Update Example package.json react and react-native dependencies to match root package's package.json.
* Example: default empty onFocusChanged callback
- Enables default tap-to-focus behavior in Example app, facilitating
testing of focus features in the Example app
* Update compileSdkVersion to 25 and buildToolsVersion to 25.0.2
Best to keep these up-to-date. Doesn't affect backwards compatibility.
* Add buildToolsVersion requirement of 25.0.2.
* * removed some of the re-parsing of the output image byte array
* removed re-saving of output file
* moved image processing onto an async task to allow camera to be used while processing is running
* added jpeg compression support for android
* move explanation to correct bit of docs
* writing metadata.location (lat and lon coords only) to the exif data... and returning the internal url for the new image (which can be used in conjunction with the RN CameraRoll)
* just a tidy up to remove some duplication and fix some logging (no functional changes)
* oops, fix typo
* docs
* added mediaUri to ios so its the same as android
* Add video/audio authorization check for Android
This only checks for the permission and no request is made. `PermissionAndroid` in recent React Native or manually asking it from native code can still be used.
* Add checkDeviceAuthorizationStatus
* Add 1080p, 720p, and 480p capture qualities.
* Minor improvements for picture/video sizing.
- Minor refactoring for getting supported sizes (DRY).
- Add explicit pictureSize setting for 480p/720p/1080p in still/picture mode.
* Use util.Size objects for 480p/720p/1080p sizing.
- Note using Camera.Size objects would require a camera instance prior to creating the
size objects, which would be manageable but not too clean.
* Remove 480p for iOS; 16:9/HD aspect ratio for Android 480p
- iOS only has a 640x480 480p-like AVCaptureSessionPreset, which is not the typical 16:9/HD aspect ratio
desired. Removing this option as a result of this.
- Android 480p updated to use 16:9/HD aspect ratio.
* Add notes for (in)exact sizing for 1080p/720p/480p
* Re-add 480p on iOS, more notes on resolutions.
- Add notes on non-HD-aspect-ratio for iOS 480p.
- Add more explanation of variable resolution/sizes, especially for 480p on Android.
* Use custom Resolution class to hold 480p/720p/1080p resolution sizes
- Mistakenly used util.Size class before, which was not added until Android API level 21 (current
min is 16).
Android MediaRecorder:
- Most importantly, call Camera.unlock() before setting the camera on the
MediaRecorder instance, and release() not just reset() when releasing the MediaRecorder
instance!
- Add comments and notes for preparing and releasing MediaRecorder instance.
- Add onError callback for errors during recording session.
RCTCameraViewManager, RCTCamera, RCTCameraViewFinder, RCTCameraView:
- Implement setCaptureMode, preparing camera based on captureMode. Currently, the only step that
needs to be taken here is setting the recording hint for videos.
- Handle setting _captureMode instance variable where applicable.
Sizing
- Determine ViewFinder supported sizes based on actual captureMode (i.e., get supported picture
sizes when in still capture mode, and get supported video sizes when in video capture mode).
Output files:
- Get appropriate external storage public directory based on media type (image or video).
- Minor variable renaming to indicate that both images or videos can be saved.
README:
- Update captureTarget to indicate that cameraRoll is the actual default for both systems.
- Small clarification for output data type for deprecated memory captureTarget output.