Cameras should report their available capture modes
The following on from a discussion in !251. We are introducing more complex capturing modes, including ones that downsample. What modes are available will depend on the camera.
> A first pass through. I think we need to fix some of this then really think about both the z-stack logic but also the camera logic, even if we don't implement it right now.
>
> I think probably we want a camera to have `capture_modes`.
>
> `cam.get_available_capture_modes()`
>
> For the PiCamera V2 board it should probably return something like:
>
> ```
> {
> "rapid": {
> "name": "Rapid (0.5MP)",
> "description": "The fastest capture, but only 0.5MP",
> "capture_resolution": (820, 616),
> "stream_resolution": (820, 616)
> },
> "fast": {
> "name": "Fast (2MP)",
> "description": "A fast way to capture a 2MP image, quality is diminished",
> "capture_resolution": (1640, 1232),
> "stream_resolution": (1640, 1232)
> },
> "standard": {
> "name": "Standard (2MP)",
> "description": "Recommended. The most robust way to capture high quality a 2MP image.",
> "capture_resolution": (1640, 1232),
> "stream_resolution": (3280, 2464)
> },
> full: {
> "name": "Full (8MP)",
> "description": "Full 8MP capture, this is slowest and may not have any more useful data than Standard.",
> "capture_resolution": (3280, 2464),
> "stream_resolution": (3280, 2464)
> }
> }
> ```
> This way we use have a list names to expose to the GUI. We can tell the camera simply to enter that capture mode, this way the camera can correctly set up its streams at a lower level depending on how the camera works internally.
issue