summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorwjia@google.com <wjia@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-12 01:36:25 +0000
committerwjia@google.com <wjia@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-04-12 01:36:25 +0000
commite1a59a2a4c7588b825e1f9355caf4805bcd5e402 (patch)
treee45b3beccf22edebee0dd9e967493850bbc571fc /media
parentfab0ab8e10370b6ba3d7edf57934aced69f84db4 (diff)
downloadchromium_src-e1a59a2a4c7588b825e1f9355caf4805bcd5e402.zip
chromium_src-e1a59a2a4c7588b825e1f9355caf4805bcd5e402.tar.gz
chromium_src-e1a59a2a4c7588b825e1f9355caf4805bcd5e402.tar.bz2
Add IPC messages and renderer process side API for video capture.
BUG=none TEST=try bots Review URL: http://codereview.chromium.org/6815011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@81199 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/base/video_frame.h3
-rw-r--r--media/media.gyp1
-rw-r--r--media/video/capture/video_capture.h118
3 files changed, 121 insertions, 1 deletions
diff --git a/media/base/video_frame.h b/media/base/video_frame.h
index b1be562..ab552895 100644
--- a/media/base/video_frame.h
+++ b/media/base/video_frame.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// 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.
@@ -37,6 +37,7 @@ class VideoFrame : public StreamSample {
NV12, // 12bpp YVU planar 1x1 Y, 2x2 UV interleaving samples
EMPTY, // An empty frame.
ASCII, // A frame with ASCII content. For testing only.
+ I420, // 12bpp YVU planar 1x1 Y, 2x2 UV samples.
};
enum SurfaceType {
diff --git a/media/media.gyp b/media/media.gyp
index 4f36789..23e1956 100644
--- a/media/media.gyp
+++ b/media/media.gyp
@@ -167,6 +167,7 @@
'filters/rtc_video_decoder.h',
'filters/video_renderer_base.cc',
'filters/video_renderer_base.h',
+ 'video/capture/video_capture.h',
'video/ffmpeg_video_allocator.cc',
'video/ffmpeg_video_allocator.h',
'video/ffmpeg_video_decode_engine.cc',
diff --git a/media/video/capture/video_capture.h b/media/video/capture/video_capture.h
new file mode 100644
index 0000000..f885614
--- /dev/null
+++ b/media/video/capture/video_capture.h
@@ -0,0 +1,118 @@
+// 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.
+//
+// This file contains abstract classes used for media filter to handle video
+// capture devices.
+
+#ifndef MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_H_
+#define MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_H_
+
+#include "base/memory/ref_counted.h"
+#include "base/time.h"
+#include "media/base/video_frame.h"
+
+namespace media {
+
+class VideoCapture {
+ public:
+ // TODO(wjia): this type should be defined in a common place and
+ // shared with device manager.
+ typedef uint64 VideoCaptureId;
+
+ // Current status of the video capture device in the browser process. Browser
+ // process sends information about the current capture state and error to the
+ // renderer process using this type.
+ enum State {
+ kStarted,
+ kPaused,
+ kStopped,
+ kError,
+ };
+
+ // Parameters for starting video capture and device information.
+ struct CaptureParams {
+ CaptureParams() {}
+ ~CaptureParams() {}
+
+ uint32 width;
+ uint32 height;
+ uint32 frame_rate;
+ VideoCaptureId session_id;
+ };
+
+ // TODO(wjia): consider merging with media::VideoFrame if possible.
+ class VideoFrameBuffer : public base::RefCountedThreadSafe<VideoFrameBuffer> {
+ public:
+ VideoFrameBuffer() {}
+ ~VideoFrameBuffer() {}
+
+ uint32 width;
+ uint32 height;
+ int stride;
+ size_t buffer_size;
+ void* memory_pointer;
+ base::Time timestamp;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(VideoFrameBuffer);
+ };
+
+ // TODO(wjia): add error codes.
+ // Callbacks provided by client for notification of events.
+ class EventHandler {
+ public:
+ // Notify client that video capture has been started.
+ virtual void OnStarted(VideoCapture* capture) = 0;
+
+ // Notify client that video capture has been stopped.
+ virtual void OnStopped(VideoCapture* capture) = 0;
+
+ // Notify client that video capture has been paused.
+ virtual void OnPaused(VideoCapture* capture) = 0;
+
+ // Notify client that video capture has hit some error |error_code|.
+ virtual void OnError(VideoCapture* capture, int error_code) = 0;
+
+ // Notify client that a buffer is available.
+ virtual void OnBufferReady(VideoCapture* capture,
+ scoped_refptr<VideoFrameBuffer> buffer) = 0;
+ };
+
+ struct VideoCaptureCapability {
+ uint32 width; // desired width.
+ uint32 height; // desired height.
+ uint32 max_fps; // desired maximum frame rate.
+ uint32 expected_capture_delay; // expected delay in millisecond.
+ media::VideoFrame::Format raw_type; // desired video type.
+ bool interlaced; // need interlace format.
+ bool resolution_fixed; // indicate requested resolution can't be altered.
+ };
+
+ VideoCapture() {}
+ virtual ~VideoCapture() {}
+
+ // Request video capture to start capturing with |capability|.
+ // Also register |handler| with video capture for event handling.
+ virtual void StartCapture(EventHandler* handler,
+ const VideoCaptureCapability& capability) = 0;
+
+ // Request video capture to stop capturing for client |handler|.
+ virtual void StopCapture(EventHandler* handler) = 0;
+
+ // TODO(wjia): Add FeedBuffer when buffer sharing is needed between video
+ // capture and downstream module.
+ // virtual void FeedBuffer(scoped_refptr<VideoFrameBuffer> buffer) = 0;
+
+ virtual bool CaptureStarted() = 0;
+ virtual uint32 CaptureWidth() = 0;
+ virtual uint32 CaptureHeight() = 0;
+ virtual uint32 CaptureFrameRate() = 0;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(VideoCapture);
+};
+
+} // namespace media
+
+#endif // MEDIA_VIDEO_CAPTURE_VIDEO_CAPTURE_H_