Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(660)

Unified Diff: media/capture/video/chromeos/camera_device_context.h

Issue 2837273004: media: add video capture device for ARC++ camera HAL v3 (Closed)
Patch Set: RELAND: media: add video capture device for ARC++ camera HAL v3 Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/capture/video/chromeos/OWNERS ('k') | media/capture/video/chromeos/camera_device_context.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/capture/video/chromeos/camera_device_context.h
diff --git a/media/capture/video/chromeos/camera_device_context.h b/media/capture/video/chromeos/camera_device_context.h
new file mode 100644
index 0000000000000000000000000000000000000000..bb11a46ea314a142071cbf764268521ac3e1bfa1
--- /dev/null
+++ b/media/capture/video/chromeos/camera_device_context.h
@@ -0,0 +1,135 @@
+// Copyright 2017 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_DEVICE_CONTEXT_H_
+#define MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_DEVICE_CONTEXT_H_
+
+#include <memory>
+#include <string>
+
+#include "base/sequence_checker.h"
+#include "media/capture/video/video_capture_device.h"
+
+namespace media {
+
+// A class storing the context of a running CameraDeviceDelegate.
+class CAPTURE_EXPORT CameraDeviceContext {
+ public:
+ // The internal state of the running CameraDeviceDelegate. The state
+ // transition happens when the corresponding methods are called inside
+ // CameraDeviceDelegate.
+ enum class State {
+ // The camera device is completely stopped. This is the initial state, and
+ // is also set in OnClosed().
+ kStopped,
+
+ // The camera device is starting and waiting to be initialized.
+ //
+ // The kStarting state is set in AllocateAndStart().
+ kStarting,
+
+ // The camera device is initialized and can accept stream configuration
+ // requests.
+ //
+ // The state is transitioned to kInitialized through:
+ //
+ // |hal_delegate_|->GetCameraInfo() -> OnGotCameraInfo() ->
+ // |hal_delegate_|->OpenDevice() -> OnOpenedDevice() ->
+ // Initialize() -> OnInitialized()
+ kInitialized,
+
+ // The various capture streams are configured and the camera device is ready
+ // to process capture requests.
+ //
+ // The state is transitioned to kStreamConfigured through:
+ //
+ // ConfigureStreams() -> OnConfiguredStreams()
+ kStreamConfigured,
+
+ // The camera device is capturing video streams.
+ //
+ // The state is transitioned to kCapturing through:
+ //
+ // ConstructDefaultRequestSettings() ->
+ // OnConstructedDefaultRequestSettings() ->
+ // |stream_buffer_manager_|->StartCapture()
+ //
+ // In the kCapturing state the |stream_buffer_manager_| runs the capture
+ // loop to send capture requests and process capture results.
+ kCapturing,
+
+ // When the camera device is in the kCapturing state, a capture loop is
+ // constantly running in |stream_buffer_manager_|:
+ //
+ // On the StreamBufferManager side, we register and submit a capture
+ // request whenever a free buffer is available:
+ //
+ // RegisterBuffer() -> OnRegisteredBuffer() ->
+ // ProcessCaptureRequest() -> OnProcessedCaptureRequest()
+ //
+ // We get various capture metadata and error notifications from the camera
+ // HAL through the following callbacks:
+ //
+ // ProcessCaptureResult()
+ // Notify()
+
+ // The camera device is going through the shut down process; in order to
+ // avoid race conditions, no new Mojo messages may be sent to camera HAL in
+ // the kStopping state.
+ //
+ // The kStopping state is set in StopAndDeAllocate().
+ kStopping,
+
+ // The camera device encountered an unrecoverable error and needs to be
+ // StopAndDeAllocate()'d.
+ //
+ // The kError state is set in SetErrorState().
+ kError,
+ };
+
+ explicit CameraDeviceContext(
+ std::unique_ptr<VideoCaptureDevice::Client> client);
+
+ ~CameraDeviceContext();
+
+ void SetState(State state);
+
+ State GetState();
+
+ // Sets state to kError and call |client_->OnError| to tear down the
+ // VideoCaptureDevice.
+ void SetErrorState(const tracked_objects::Location& from_here,
+ const std::string& reason);
+
+ // Logs |message| to |client_|.
+ void LogToClient(std::string message);
+
+ // Submits the capture data to |client_->OnIncomingCapturedData|.
+ void SubmitCapturedData(const uint8_t* data,
+ int length,
+ const VideoCaptureFormat& frame_format,
+ base::TimeTicks reference_time,
+ base::TimeDelta timestamp);
+
+ void SetRotation(int rotation);
+
+ private:
+ friend class StreamBufferManagerTest;
+
+ SEQUENCE_CHECKER(sequence_checker_);
+
+ // The state the CameraDeviceDelegate currently is in.
+ State state_;
+
+ // Clockwise rotation in degrees. This value should be 0, 90, 180, or 270.
+ int rotation_;
+
+ std::unique_ptr<VideoCaptureDevice::Client> client_;
+
+ DISALLOW_IMPLICIT_CONSTRUCTORS(CameraDeviceContext);
+};
+
+} // namespace media
+
+#endif // MEDIA_CAPTURE_VIDEO_CHROMEOS_CAMERA_DEVICE_CONTEXT_CHROMEOS_H_
« no previous file with comments | « media/capture/video/chromeos/OWNERS ('k') | media/capture/video/chromeos/camera_device_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698