diff options
author | wjia@google.com <wjia@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-12 01:36:25 +0000 |
---|---|---|
committer | wjia@google.com <wjia@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-04-12 01:36:25 +0000 |
commit | e1a59a2a4c7588b825e1f9355caf4805bcd5e402 (patch) | |
tree | e45b3beccf22edebee0dd9e967493850bbc571fc /media | |
parent | fab0ab8e10370b6ba3d7edf57934aced69f84db4 (diff) | |
download | chromium_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.h | 3 | ||||
-rw-r--r-- | media/media.gyp | 1 | ||||
-rw-r--r-- | media/video/capture/video_capture.h | 118 |
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_ |