summaryrefslogtreecommitdiffstats
path: root/content/browser/renderer_host/video_capture_host.h
diff options
context:
space:
mode:
Diffstat (limited to 'content/browser/renderer_host/video_capture_host.h')
-rw-r--r--content/browser/renderer_host/video_capture_host.h127
1 files changed, 127 insertions, 0 deletions
diff --git a/content/browser/renderer_host/video_capture_host.h b/content/browser/renderer_host/video_capture_host.h
new file mode 100644
index 0000000..3ee7717
--- /dev/null
+++ b/content/browser/renderer_host/video_capture_host.h
@@ -0,0 +1,127 @@
+// Copyright (c) 2011 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.
+//
+// VideoCaptureHost serves video capture related messages from
+// VideCaptureMessageFilter which lives inside the render process.
+//
+// This class is owned by BrowserRenderProcessHost, and instantiated on UI
+// thread, but all other operations and method calls happen on IO thread.
+//
+// Here's an example of a typical IPC dialog for video capture:
+//
+// Renderer VideoCaptureHost
+// | |
+// | VideoCaptureHostMsg_Start > |
+// | < VideoCaptureMsg_DeviceInfo |
+// | |
+// | < VideoCaptureMsg_StateChanged |
+// | (kStarted) |
+// | < VideoCaptureMsg_BufferReady |
+// | ... |
+// | < VideoCaptureMsg_BufferReady |
+// | ... |
+// | VideoCaptureHostMsg_BufferReady > |
+// | VideoCaptureHostMsg_BufferReady > |
+// | |
+// | ... |
+// | |
+// | < VideoCaptureMsg_BufferReady |
+// | VideoCaptureHostMsg_Stop > |
+// | VideoCaptureHostMsg_BufferReady > |
+// | < VideoCaptureMsg_StateChanged |
+// | (kStopped) |
+// v v
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_HOST_H_
+#define CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_HOST_H_
+
+#include <map>
+
+#include "base/memory/ref_counted.h"
+#include "content/browser/browser_message_filter.h"
+#include "content/browser/renderer_host/video_capture_controller.h"
+#include "ipc/ipc_message.h"
+
+class VideoCaptureHost : public BrowserMessageFilter,
+ public VideoCaptureController::EventHandler {
+ public:
+ VideoCaptureHost();
+
+ // BrowserMessageFilter implementation.
+ virtual void OnChannelClosing();
+ virtual void OnDestruct() const;
+ virtual bool OnMessageReceived(const IPC::Message& message,
+ bool* message_was_ok);
+
+ // VideoCaptureController::EventHandler implementation.
+ virtual void OnError(VideoCaptureController::ControllerId id);
+ virtual void OnBufferReady(VideoCaptureController::ControllerId id,
+ TransportDIB::Handle handle,
+ base::Time timestamp);
+ virtual void OnFrameInfo(VideoCaptureController::ControllerId id,
+ int width,
+ int height,
+ int frame_per_second);
+ virtual void OnReadyToDelete(VideoCaptureController::ControllerId id);
+
+ private:
+ friend class BrowserThread;
+ friend class DeleteTask<VideoCaptureHost>;
+ friend class MockVideoCaptureHost;
+ friend class VideoCaptureHostTest;
+
+ virtual ~VideoCaptureHost();
+
+ // IPC message: Start capture on the VideoCaptureDevice referenced by
+ // VideoCaptureParams::session_id. device_id is an id created by
+ // VideCaptureMessageFilter to identify a session
+ // between a VideCaptureMessageFilter and a VideoCaptureHost.
+ void OnStartCapture(const IPC::Message& msg, int device_id,
+ const media::VideoCaptureParams& params);
+
+ // IPC message: Stop capture on device referenced by device_id.
+ void OnStopCapture(const IPC::Message& msg, int device_id);
+
+ // IPC message: Pause capture on device referenced by device_id.
+ void OnPauseCapture(const IPC::Message& msg, int device_id);
+
+ // IPC message: Receive an empty buffer from renderer. Send it to device
+ // referenced by |device_id|.
+ void OnReceiveEmptyBuffer(const IPC::Message& msg,
+ int device_id,
+ TransportDIB::Handle handle);
+
+
+ // Called on the IO thread when VideoCaptureController have
+ // reported that all DIBs have been returned.
+ void DoDeleteVideoCaptureController(VideoCaptureController::ControllerId id);
+
+ // Send a filled buffer to the VideoCaptureMessageFilter.
+ void DoSendFilledBuffer(int32 routing_id,
+ int device_id,
+ TransportDIB::Handle handle,
+ base::Time timestamp);
+
+ // Send a information about frame resolution and frame rate
+ // to the VideoCaptureMessageFilter.
+ void DoSendFrameInfo(int32 routing_id,
+ int device_id,
+ int width,
+ int height,
+ int frame_per_second);
+
+ // Handle error coming from VideoCaptureDevice.
+ void DoHandleError(int32 routing_id, int device_id);
+
+ typedef std::map<VideoCaptureController::ControllerId,
+ scoped_refptr<VideoCaptureController> >EntryMap;
+
+ // A map of VideoCaptureController::ControllerId to VideoCaptureController
+ // objects that is currently active.
+ EntryMap entries_;
+
+ DISALLOW_COPY_AND_ASSIGN(VideoCaptureHost);
+};
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_HOST_H_