The motivation is an API change: FloatMath is going to be
deprecated and/or removed. Performance is not the goal of
this change.
That said...
Math is faster than FloatMath with AOT compilation.
While making the change, occurances of:
{Float}Math.sqrt(x * x + y * y) and
{Float}Math.sqrt({Float}Math.pow(x, 2) + {Float}Math.pow(y, 2))
have been replaced with:
{(float)} Math.hypot(x, y)
Right now there is no runtime intrinsic for hypot so is not faster
in all cases for AOT compilation:
Math.sqrt(x * x + y * y) is faster than Math.hypot(x, y) with
AOT, but all other combinations of FloatMath, use of pow() etc.
are slower than hypot().
hypot() has the advantage of being self documenting and
could be optimized in future. None of the behavior differences
around NaN and rounding appear to be important for the cases
looked at: they all assume results and arguments are in range
and usually the results are cast to float.
Different implementations measured on hammerhead / L:
AOT compiled:
[FloatMath.hypot(x, y)]
benchmark=Hypot_FloatMathHypot} 633.85 ns; σ=0.32 ns @ 3 trials
[FloatMath.sqrt(x*x + y*y)]
benchmark=Hypot_FloatMathSqrtMult} 684.17 ns; σ=4.83 ns @ 3 trials
[FloatMath.sqrt(FloatMath.pow(x, 2) + FloatMath.pow(y, 2))]
benchmark=Hypot_FloatMathSqrtPow} 1270.65 ns; σ=12.20 ns @ 6 trials
[(float) Math.hypot(x, y)]
benchmark=Hypot_MathHypot} 96.80 ns; σ=0.05 ns @ 3 trials
[(float) Math.sqrt(x*x + y*y)]
benchmark=Hypot_MathSqrtMult} 23.97 ns; σ=0.01 ns @ 3 trials
[(float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))]
benchmark=Hypot_MathSqrtPow} 156.19 ns; σ=0.12 ns @ 3 trials
Interpreter:
benchmark=Hypot_FloatMathHypot} 1180.54 ns; σ=5.13 ns @ 3 trials
benchmark=Hypot_FloatMathSqrtMult} 1121.05 ns; σ=3.80 ns @ 3 trials
benchmark=Hypot_FloatMathSqrtPow} 3327.14 ns; σ=7.33 ns @ 3 trials
benchmark=Hypot_MathHypot} 856.57 ns; σ=1.41 ns @ 3 trials
benchmark=Hypot_MathSqrtMult} 1028.92 ns; σ=9.11 ns @ 3 trials
benchmark=Hypot_MathSqrtPow} 2539.47 ns; σ=24.44 ns @ 3 trials
Bug: https://code.google.com/p/android/issues/detail?id=36199
Change-Id: I06c91f682095e627cb547d60d936ef87941be692
- Report capture failures from service to application
- Only go to error state for device-level errors
- Adjust binder interface method names to match the service side names
- Reduce failed session creation logging
- Don't fire CaptureSession.onActive for CameraDevice.onBusy
- Check with session to determine capture failure reason
Bug: 17160301
Bug: 15524101
Bug: 14448494
Bug: 11272459
Change-Id: I9dd606004fd7845910dc865738fbe17f1640f07d
- Add wrapper class for highSpeedVideoConfiguration.
- Add APIs to query high speed video recording configurations in
StreamConfigurationMap
- Fix ColorSpaceTransform unit test in CameraMetadataTest
- Fix a bug in HashCodeHelper
Change-Id: I192e57f6ab5dfbba6d958571352f067a9eaec7b2
A higher hal version device like HAL3.2 can be opened as HAL1.0 device
if HAL supports it. This only applies to camera API1.
Change-Id: I4ae9f59f4317158cc1bd7ed7726e4032cdd1fa07
* Also changes Rational to reduce the numerator/denominator by
its greatest common divisor at construction time (e.g. (2/4 -> 1/2)).
Bug: 15432042
Change-Id: Ib827abccf44a040667e5931cf9442afc86b57e2d
Since the focus range is defined in diopters (1/distance), it just so
happens that in a range [near, far] near >= far which is against the
android.util.Range contract.
Change it to pair instead.
Also adds a marshaler for Pairs since they didn't have one before
(and aren't parcelable).
Bug: 15335269
Change-Id: If2f3259aeec072438a1c18c1b9728a4c81e92a40
Add a test to verify we return null TonemapCurve when at least one
channel of tonemap curve is absent.
Bug: 14628001
Change-Id: I3e89dbcf00e5f21b01fc78fe43fe5c4200690357
Before:
* CameraMetadata.Key<T>
After:
* CameraCharacteristics.Key<T>
* CaptureResult.Key<T>
* CaptureRequest.Key<T>
CameraMetadata#get has been removed (each metadata subclass has
its own #get now) due to java generic limitations (in particular
a type bound <T1<T2> extends Key<T2>> is an illegal bound).
CameraMetadataNative gets a new #dumpToLog function to dump the native
metadata to logcat.
Bug: 15091017
Change-Id: Ic56c54c0d184e209e20de374dc8a6d79527c209f
* Also @hide/@deprecate a bunch of other keys
* Move some classes into android.hardware.camera2.params
Bug: 14628001
Change-Id: I2db490a0849680a133a901403477a147b004fb28
* Improve existing marshalers:
- each managed/native type combination can be queried marshal support
- marshalers can recursively call other marshalers for nested types
- support marshaling/unmarshaling generic classes by using super type tokens
* Add new marshalers for:
- ColorSpaceTransform
- MeteringRectangle
- Parcelable
- Range<T>
- ReprocessFormatsMap
- RggbChannelVector
- SizeF
- StreamConfiguration
- StreamConfigurationDuration
Batteries included; so are unit tests.
Bug: 14628001
Change-Id: I38d3e646ccfb3953898cd6f750c33e4097328482
* The tag android.sensor.calibrationTransform1 was renamed
to android.sensor.calibrationTransform (1 removed)
Bug: 12002757
Change-Id: Ida0e37a30222f08d0d9bb3871717c74c21e428ac
- pass time between capture as us, in high fps case ms could
be inaccurate
- add test cases in MediaRecorderTest for time lapse/slow motion
Bug: 13032650
Change-Id: I34ecc3b39e0519753f74ae42afcaeeddfff1666a
There are interface difference between managed and native side for some
metadata, like Face and JPEG format. we need override them when they are set/get
between native and managed sides.
Also fix some issues in the CameraMetadataTest.
Bug: 10406212
Change-Id: Ibd8be0415968445e711b3ea89f45e1edfa193ee2
- Rework camera callback binder interface
- Connect up idle, disconnect callbacks
- A few unit tests for shutter firing and idle use
Bug: 10549462
Change-Id: I8455a8a0561e366b7edeef6b101682be2ec44d79
The problem was: when SurfaceTexture is used, test didn't acquire/release
images when they are produced, then it starves the producer and
cause deadlock. This change replaces SurfaceTexture with ImageReader, release
every image produced immediately.
Bug: 10360518
Change-Id: I9aabaee23013277c2da6f5825ac931bc10511fbc
Make all camera metadata immutable once created; requests are
created using CameraRequest.Builder.
- Separate CameraMetadata implementation from interface
- Implement deep copying of metadata
- Requests/results/properties have-a native implementation
Bug: 10360518
Change-Id: Ia6300c237219d39f70c63156fa9ca666d951a36e
Handle NaN and INF using the same semantics as Java floats. No longer
throw an exception if a rational is constructed with a zero-denominator.
This commit is required for the ITS pdk app, since without it, the app
fails when it tries to deserialize rational values that are
(incorrectly) set to 0/0.
Bug: 10337323
Change-Id: I890ec2092f2945abc0f531fc46f9a7f5c71d2dbf
Not all the devie have camera. Only run the
recording test when the camcorder profile is
not null.
Change-Id: Ib38df363fe5e6049b72e97ae229964fb65882269