overhaul usage guide Camera docs for our new app

This commit is contained in:
Daniel Micay 2021-11-07 11:03:59 -05:00
parent 42856dc17b
commit d335e4eaf2

View File

@ -76,7 +76,13 @@
</ul>
</li>
<li><a href="#web-browsing">Web browsing</a></li>
<li><a href="#camera">Camera</a></li>
<li>
<a href="#camera">Camera</a>
<ul>
<li><a href="#grapheneos-camera-app">GrapheneOS Camera app</a></li>
<li><a href="#google-camera">Google Camera</a></li>
</ul>
</li>
<li><a href="#exec-spawning">Exec spawning</a></li>
<li><a href="#bugs-uncovered-by-security-features">Bugs uncovered by security features</a></li>
<li>
@ -492,38 +498,120 @@
<section id="camera">
<h2><a href="#camera">Camera</a></h2>
<p>GrapheneOS itself has the same camera capabilities and quality as the stock OS.
It will match the stock OS when comparing the same app on each OS.</p>
<p>GrapheneOS has the same camera capabilities and quality as the stock OS. It
will match the stock OS when comparing the same app on each OS.</p>
<p>The Camera app included in GrapheneOS is very basic and can't take full advantage
of the hardware. It doesn't offer much in the way of configuration. In the long term,
it's going to be replaced. In the short term, there are other apps available providing
more capabilities and better support for taking advantage of the hardware.</p>
<section id="grapheneos-camera-app">
<h3><a href="#grapheneos-camera-app">GrapheneOS Camera app</a></h3>
<p>Open Camera is somewhat more advanced and much more configurable. You should
make sure to configure it to use the Camera2 API since it uses the legacy camera
APIs by default for broader compatibility with devices. It isn't currently able to
make use of special purpose cameras and doesn't have any advanced image capturing
or processing technology. It has a traditional software-based HDR mode which
captures 3 images and merges them in a way that isn't at all intelligent and
causes a lot of blur and distortion. You probably don't want to use this unless
you have a way to mount the phone in a stable position and aren't taking a picture
of anything that's not almost entirely still.</p>
<p>GrapheneOS includes our own modern Camera app based on the bleeding edge
release channel of Android's CameraX library. It provides modes for QR
scanning, image capture and video recording as tabs at the bottom of the
screen. You can either use the tab interface or swipe left and right anywhere
on the screen above it to switch between them. The arrow button at the top of
the screen opens the settings panel and you can close it by pressing anywhere
outside the settings panel. You can also swipe down to open the settings and
swipe up to close it. Outside of the QR scanning mode, there's a row of large
buttons above the tab bar for switching between the cameras (left), capturing
images and starting/stopping video recording (middle) and opening the gallery
(right). The volume keys can also be used as an equivalent to pressing the
capture button. While recording a video, the gallery button becomes an image
capture button for capturing images.</p>
<p>Google Camera can be used with the <a href="#sandboxed-play-services">sandboxed
Play services compatibility layer</a> and can take full advantage of the available
cameras and image processing hardware as it can on the stock OS. Other camera apps
could provide the same image quality and features but there aren't any comparable
alternatives in practice. HDR+ is enabled by default and is a much more advanced
replacement for HDR taking bursts of pictures and intelligently combining those
which is what makes the image quality so much higher, especially for low light.
The Night Sight feature is essentially the same thing, but with the light of the
picture unnaturally increased through combining the data.</p>
<p>Our Camera app provides the system media intents used by other apps to
capture images / record videos via the OS provided camera implementation.
These intents can only be provided by a system app since Android 11, so the
quality of the system camera is quite important.</p>
<p>Since there isn't a project making a serious, high quality open source camera
app able to even compete with Google Camera without HDR+ and the fancy features,
GrapheneOS is funding the creation of a new app as a replacement for the AOSP
Camera app.</p>
<p>The in-app gallery / video player doesn't yet support zooming and depends
on opening an external image/video editor. This will be improved in the
future. We'll eventually be making our own gallery/editor app sharing a lot of
the code with the in-app gallery in the camera.</p>
<p>Using the default 4:3 aspect ratio for image capture is recommended since
16:9 is simply cropped output on all supported devices. A device oriented
towards video recording might actually have a wider image sensor but that's
not the case for Pixels or nearly any other smartphone.</p>
<p>Image capture uses lightweight HDR+ on all supported Pixels and HDRnet for the
preview on 5th generation Pixels. Using the torch or camera flash will result
in HDR+ being disabled which is why automatic flash isn't enabled by default.
The lightweight HDR+ doesn't use as many frames as the more aggressive Google
Camera HDR+. CameraX extensions will eventually provide support for an HDR
mode with more aggressive HDR+ taking/combining more than only around 3 frames
along with a Night mode providing the Night Sight variant of HDR+ inflating
the light of the scene through combining the frames. Other fancy features like
Portrait mode will also depend on CameraX extensions being provided in the
future. There isn't a timeline for this but an initial implementation will
likely be shipped within the next year for Pixels.</p>
<p>Zooming via pinch to zoom or the zoom slider will automatically make use of
the wide angle and telephoto cameras on Pixels. 4th generation Pixels have a
telephoto camera for 2x zoom and above. 5th generation Pixels have a wide
angle lens for zooming out from 1x to 0.6x. Images taken with the wide angle
lens won't match the quality of the normal camera but it offers a much wider
field of view.</p>
<p>By default, continuous auto focus, auto exposure and auto white balance are
used across the whole scene. Tapping to focus will switch to auto focus, auto
exposure and auto white balance based on that location. The focus timeout
setting determines the timeout before it switches back the default mode. The
exposure compensation slider on the left allows manually tuning exposure and
will automatically adjust shutter speed, aperture and ISO without disrupting
lightweight HDR+ support. Further configuration / tuning over the algorithms
will be provided in the future. Direct manual control doesn't make much sense
with the modern camera stack and isn't planned.</p>
<p>CameraX only recently gained official support for video recording in
October 2021 and there are still some quirks. The preview can sometimes end up
misaligned but the recorded videos won't be impacted. 16:9 is currently the
only supported video aspect ratio. 1080p (FHD) is the default but 2160p (UHD)
is supported. CameraX UHD support may be buggy on some devices.</p>
<p>The QR scanning mode only scans within the scanning square marked on the
screen. The QR code should be aligned with the edges of the square but can
have any 90 degree orientation. Non-standard inverted QR codes are fully
supported. It's a very quick and high quality QR scanner able to easily scan
very high density QR codes from Pixels. Every 2 seconds, it will refresh auto
focus, auto exposure and auto white balance on the scanning square. It has
full support for zooming in and out. Support for other kinds of barcodes will
be added in the future, but adding them transparently would result in getting
false positives and would substantially harm the QR scanning capability. It
will need to be done in a way offering more control without having an overly
complex user interface.</p>
<p>Camera permission is the only one that's required. Images and videos are
stored via the Media Store API so media/storage permissions aren't required.
The Microphone permission is needed for video recording by default but not
when including audio is disabled. Location permission is only needed if you
explicitly enabling location tagging, which is an experimental feature.</p>
<p>Captured images currently include an EXIF timestamp, the phone model and an
abstraction of the exposure configuration. This will become fully optional in
the future and will likely be opt-in rather than opt-out. EXIF orientation
data is crucial for setting the proper orientation of the image. Videos have
their own similar metadata.</p>
</section>
<section id="google-camera">
<h3><a href="#google-camera">Google Camera</a></h3>
<p>Google Camera can be used with the <a href="#sandboxed-play-services">sandboxed
Play services compatibility layer</a> and can take full advantage of the
available cameras and image processing hardware as it can on the stock OS.
Other camera apps could provide the same image quality and features but there
aren't any comparable alternatives in practice. HDR+ is enabled by default and
is a much more advanced replacement for HDR taking bursts of pictures and
intelligently combining those which is what makes the image quality so much
higher, especially for low light. The Night Sight feature is essentially the
same thing, but with the light of the picture unnaturally increased through
combining the data.</p>
<p>Since there isn't a project making a serious, high quality open source
camera app able to even compete with Google Camera without HDR+ and the fancy
features, GrapheneOS is funding the creation of a new app as a replacement for
the AOSP Camera app.</p>
</section>
</section>
<section id="exec-spawning">