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

Unified Diff: content/browser/renderer_host/video_capture_memory.h

Issue 7002027: VideoCaptureHost (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 years, 7 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
Index: content/browser/renderer_host/video_capture_memory.h
===================================================================
--- content/browser/renderer_host/video_capture_memory.h (revision 0)
+++ content/browser/renderer_host/video_capture_memory.h (revision 0)
@@ -0,0 +1,102 @@
+// 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.
+
+// VideoCaptureMemory is the glue between VideoCaptureHost, VideoCaptureManager
+// and VideoCaptrurDevice.
+// It provides functions for VideoCaptureHost to start a VideoCaptureDevice and
+// is responsible for keeping track of TransportDIBs and filling them with I420
+// video frames for IPC communication between VideoCaptureHost and
+// VideoCaptureMessageFilter.
+// It implements media::VideoCaptureDevice::EventHandler to get video frames
+// from a VideoCaptureDevice object and do color conversion straight into the
+// TransportDIBs to avoid a memory copy.
+
+#ifndef CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_MEMORY_H_
+#define CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_MEMORY_H_
+
+#include <list>
+#include <map>
+
+#include "base/memory/ref_counted.h"
+#include "base/synchronization/lock.h"
+#include "base/task.h"
+#include "media/video/capture/video_capture_device.h"
+#include "media/video/capture/video_capture_types.h"
+#include "ui/gfx/surface/transport_dib.h"
+
+class VideoCaptureMemory
+ : public base::RefCountedThreadSafe<VideoCaptureMemory>,
+ public media::VideoCaptureDevice::EventHandler {
+ public:
+ // Id used for identifying an object of VideoCaptureMemory
+ typedef std::pair<int32, int> VideoCaptureMemoryId;
+ class EventHandler {
+ public:
+ // An Error have occurred in the VideoCaptureDevice.
+ virtual void OnError(VideoCaptureMemoryId id) = 0;
+ // An TransportDIB have been filled with I420 video.
+ virtual void OnBufferReady(VideoCaptureMemoryId id,
+ TransportDIB::Handle handle,
+ base::Time timestamp) = 0;
+ // The frame resolution the VideoCaptureDevice capture video in.
+ virtual void OnFrameInfo(VideoCaptureMemoryId id,
+ int width,
+ int height,
+ int frame_rate) = 0;
+ // Report that this object can be deleted.
+ virtual void OnReadyToDelete(VideoCaptureMemoryId id) = 0;
+
+ protected:
+ virtual ~EventHandler() {}
+ };
+
+ VideoCaptureMemory(VideoCaptureMemoryId id,
+ VideoCaptureMemory::EventHandler* event_handler);
+ ~VideoCaptureMemory();
+
+ // Starts video capturing and tries to use the resolution specified in
+ // params.
+ // When capturing has started EventHandler::OnFrameInfo is called with
+ // resolution that best matches the requested that the video capture device
+ // support.
+ void StartCapture(const media::VideoCaptureParams& params);
+ // Stop video capture.
+ // When the capture is stopped and all TransportDIBS have been returned
+ // EventHandler::OnReadyToDelete will be called.
+ // stopped_task may be null but it can be used to get a notification when the
+ // device is stopped.
+ void StopCapture(Task* stopped_task);
+ // Return a DIB previously given in EventHandler::OnBufferReady.
+ void ReturnTransportDIB(TransportDIB::Handle handle);
+
+ // Implement media::VideoCaptureDevice::EventHandler
+ virtual void OnIncomingCapturedFrame(const uint8* data,
+ int length,
+ base::Time timestamp);
+ virtual void OnError();
+ virtual void OnFrameInfo(const media::VideoCaptureDevice::Capability& info);
+
+ private:
+ typedef std::list<TransportDIB::Handle> DIBHANDLEList;
wjia(left Chromium) 2011/05/19 04:24:37 typedef precedes where it's used.
Per K 2011/05/19 08:55:31 Done.
+ typedef std::map<TransportDIB::Handle, TransportDIB*> DIBMap;
+
+ // Called by VideoCaptureManager when a device have been stopped.
+ void OnDeviceStopped(Task* stopped_task);
+
+ // Lock to protect free_dibs_.
+ base::Lock lock_;
+ bool report_ready_to_delete_;
+ // Free DIBS that can be filled with video frames.
+ DIBHANDLEList free_dibs_;
+ // All DIBS created by this object.
+ DIBMap owned_dibs_;
+ EventHandler& event_handler_;
+ // The parameter that was requested when starting the capture device.
+ media::VideoCaptureParams params_;
+ // Id used for identifying this object.
+ VideoCaptureMemoryId id_;
+ media::VideoCaptureDevice::Capability frame_info_;
+};
+
+#endif // CONTENT_BROWSER_RENDERER_HOST_VIDEO_CAPTURE_MEMORY_H_

Powered by Google App Engine
This is Rietveld 408576698