Correctly process streams
The reference implementation stream validation/setting
was all out of whack, particularly the handling of "reuse"
streams. This CL does away with that, and plugs in the
static_properties/request_tracker validation/tracking of
configured streams.
Implementation specific features, such as gralloc flags,
are moved down into the V4L2Camera class out of the Camera class.
BUG: https://b/33057320, https://b/31044638
TEST: unit tests pass, some previously failing CTS tests are passing
(and no regressions), simple test camera preview app runs.
Change-Id: Ie8568239a1348dac45bf829ef928e500e01fdcda
diff --git a/modules/camera/3_4/camera.h b/modules/camera/3_4/camera.h
index 2685fd1..687c733 100644
--- a/modules/camera/3_4/camera.h
+++ b/modules/camera/3_4/camera.h
@@ -28,7 +28,6 @@
#include "metadata/metadata.h"
#include "request_tracker.h"
#include "static_properties.h"
-#include "stream.h"
namespace default_camera_hal {
// Camera represents a physical camera on a device.
@@ -70,16 +69,17 @@
// Initialize device info: resource cost and conflicting devices
// (/conflicting devices length)
virtual void initDeviceInfo(struct camera_info *info) = 0;
- // Verify stream configuration is device-compatible
- virtual bool isSupportedStreamSet(Stream** streams, int count,
- uint32_t mode) = 0;
- // Set up the device for a stream, and get the maximum number of
- // buffers that stream can handle (max_buffers is an output parameter)
- virtual int setupStream(Stream* stream, uint32_t* max_buffers) = 0;
- // Verify settings are valid for a capture or reprocessing
- virtual bool isValidRequest(const CaptureRequest& request) = 0;
// Separate initialization method for individual devices when opened
virtual int initDevice() = 0;
+ // Verify stream configuration dataspaces and rotation values
+ virtual bool validateDataspacesAndRotations(
+ const camera3_stream_configuration_t* stream_config) = 0;
+ // Set up the streams, including seting usage & max_buffers
+ virtual int setupStreams(
+ camera3_stream_configuration_t* stream_config) = 0;
+ // Verify settings are valid for a capture or reprocessing
+ virtual bool isValidRequestSettings(
+ const android::CameraMetadata& settings) = 0;
// Enqueue a request to receive data from the camera
virtual int enqueueRequest(
std::shared_ptr<CaptureRequest> request) = 0;
@@ -100,14 +100,9 @@
camera3_device_t mDevice;
// Get static info from the device and store it in mStaticInfo.
int loadStaticInfo();
- // Reuse a stream already created by this device
- Stream *reuseStream(camera3_stream_t *astream);
- // Destroy all streams in a stream array, and the array itself
- void destroyStreams(Stream **array, int count);
- // Verify a set of streams is valid in aggregate
- bool isValidStreamSet(Stream **array, int count, uint32_t mode);
- // Calculate usage and max_bufs of each stream
- int setupStreams(Stream **array, int count);
+ // Confirm that a stream configuration is valid.
+ int validateStreamConfiguration(
+ const camera3_stream_configuration_t* stream_config);
// Verify settings are valid for reprocessing an input buffer
bool isValidReprocessSettings(const camera_metadata_t *settings);
// Pre-process an output buffer
@@ -140,10 +135,6 @@
// be accessed without the camera device open
android::Mutex mStaticInfoLock;
android::Mutex mFlushLock;
- // Array of handles to streams currently in use by the device
- Stream **mStreams;
- // Number of streams in mStreams
- int mNumStreams;
// Standard camera settings templates
std::unique_ptr<const android::CameraMetadata> mTemplates[CAMERA3_TEMPLATE_COUNT];
// Track in flight requests.