summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorwuchengli@chromium.org <wuchengli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-01 04:17:32 +0000
committerwuchengli@chromium.org <wuchengli@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-01 04:17:32 +0000
commitb3d080fcfc874742ab6dd8ca8f7ea8acced4da5b (patch)
tree83b285f36bff466bf5169ad551cc26092ae552bb /content/renderer
parentdcc87fb5d6e2e3758054d8bcf473f3d39daafa87 (diff)
downloadchromium_src-b3d080fcfc874742ab6dd8ca8f7ea8acced4da5b.zip
chromium_src-b3d080fcfc874742ab6dd8ca8f7ea8acced4da5b.tar.gz
chromium_src-b3d080fcfc874742ab6dd8ca8f7ea8acced4da5b.tar.bz2
Delete old RTCVideoDecoder code path.
Remove leftover codepath from the pre-WebMediaPlayerMS days. BUG=chromium:177572 TEST=Try apprtc.appspot.com/?debug=loopback on link. Review URL: https://chromiumcodereview.appspot.com/12320078 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@185460 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r--content/renderer/media/media_stream_impl.cc36
-rw-r--r--content/renderer/media/media_stream_impl.h10
-rw-r--r--content/renderer/media/media_stream_impl_unittest.cc12
-rw-r--r--content/renderer/media/rtc_video_decoder.cc199
-rw-r--r--content/renderer/media/rtc_video_decoder.h98
-rw-r--r--content/renderer/media/rtc_video_decoder_unittest.cc338
-rw-r--r--content/renderer/media/rtc_video_renderer.h3
-rw-r--r--content/renderer/render_view_impl.cc7
8 files changed, 5 insertions, 698 deletions
diff --git a/content/renderer/media/media_stream_impl.cc b/content/renderer/media/media_stream_impl.cc
index 88206a7..df4b10b 100644
--- a/content/renderer/media/media_stream_impl.cc
+++ b/content/renderer/media/media_stream_impl.cc
@@ -14,7 +14,6 @@
#include "content/renderer/media/media_stream_dispatcher.h"
#include "content/renderer/media/media_stream_extra_data.h"
#include "content/renderer/media/media_stream_source_extra_data.h"
-#include "content/renderer/media/rtc_video_decoder.h"
#include "content/renderer/media/rtc_video_renderer.h"
#include "content/renderer/media/video_capture_impl_manager.h"
#include "content/renderer/media/webrtc_audio_capturer.h"
@@ -245,25 +244,6 @@ MediaStreamImpl::GetVideoFrameProvider(
return NULL;
}
-scoped_refptr<media::VideoDecoder> MediaStreamImpl::GetVideoDecoder(
- const GURL& url,
- const scoped_refptr<base::MessageLoopProxy>& message_loop) {
- DCHECK(CalledOnValidThread());
- WebKit::WebMediaStream descriptor(GetMediaStream(url));
-
- if (descriptor.isNull() || !descriptor.extraData())
- return NULL; // This is not a valid stream.
-
- DVLOG(1) << "MediaStreamImpl::GetVideoDecoder stream:"
- << UTF16ToUTF8(descriptor.label());
-
- webrtc::MediaStreamInterface* stream = GetNativeMediaStream(descriptor);
- if (stream)
- return CreateVideoDecoder(stream, message_loop);
- NOTREACHED();
- return NULL;
-}
-
scoped_refptr<webkit_media::MediaStreamAudioRenderer>
MediaStreamImpl::GetAudioRenderer(const GURL& url) {
DCHECK(CalledOnValidThread());
@@ -534,22 +514,6 @@ MediaStreamImpl::CreateVideoFrameProvider(
repaint_cb);
}
-scoped_refptr<media::VideoDecoder> MediaStreamImpl::CreateVideoDecoder(
- webrtc::MediaStreamInterface* stream,
- const scoped_refptr<base::MessageLoopProxy>& message_loop) {
- if (stream->GetVideoTracks().empty())
- return NULL;
-
-
- DVLOG(1) << "MediaStreamImpl::CreateRemoteVideoDecoder label:"
- << stream->label();
-
- return new RTCVideoDecoder(
- message_loop,
- base::MessageLoopProxy::current(),
- stream->GetVideoTracks()[0].get());
-}
-
scoped_refptr<WebRtcAudioRenderer> MediaStreamImpl::CreateRemoteAudioRenderer(
webrtc::MediaStreamInterface* stream) {
if (stream->GetAudioTracks().empty())
diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h
index 667b0b1..1845ca0 100644
--- a/content/renderer/media/media_stream_impl.h
+++ b/content/renderer/media/media_stream_impl.h
@@ -24,10 +24,6 @@
#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
#include "webkit/media/media_stream_client.h"
-namespace base{
-class MessageLoopProxy;
-}
-
namespace webkit_media {
class MediaStreamAudioRenderer;
}
@@ -81,9 +77,6 @@ class CONTENT_EXPORT MediaStreamImpl
const GURL& url,
const base::Closure& error_cb,
const webkit_media::VideoFrameProvider::RepaintCB& repaint_cb) OVERRIDE;
- virtual scoped_refptr<media::VideoDecoder> GetVideoDecoder(
- const GURL& url,
- const scoped_refptr<base::MessageLoopProxy>& message_loop) OVERRIDE;
virtual scoped_refptr<webkit_media::MediaStreamAudioRenderer>
GetAudioRenderer(const GURL& url) OVERRIDE;
@@ -169,9 +162,6 @@ class CONTENT_EXPORT MediaStreamImpl
webrtc::MediaStreamInterface* stream,
const base::Closure& error_cb,
const webkit_media::VideoFrameProvider::RepaintCB& repaint_cb);
- scoped_refptr<media::VideoDecoder> CreateVideoDecoder(
- webrtc::MediaStreamInterface* stream,
- const scoped_refptr<base::MessageLoopProxy>& message_loop);
scoped_refptr<WebRtcAudioRenderer> CreateRemoteAudioRenderer(
webrtc::MediaStreamInterface* stream);
scoped_refptr<WebRtcLocalAudioRenderer> CreateLocalAudioRenderer(
diff --git a/content/renderer/media/media_stream_impl_unittest.cc b/content/renderer/media/media_stream_impl_unittest.cc
index 5fe8650..3cf0cc4 100644
--- a/content/renderer/media/media_stream_impl_unittest.cc
+++ b/content/renderer/media/media_stream_impl_unittest.cc
@@ -3,14 +3,12 @@
// found in the LICENSE file.
#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
#include "base/utf_string_conversions.h"
#include "content/renderer/media/media_stream_extra_data.h"
#include "content/renderer/media/media_stream_impl.h"
#include "content/renderer/media/mock_media_stream_dependency_factory.h"
#include "content/renderer/media/mock_media_stream_dispatcher.h"
#include "content/renderer/media/video_capture_impl_manager.h"
-#include "media/base/video_decoder.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStream.h"
#include "third_party/WebKit/Source/Platform/chromium/public/WebMediaStreamSource.h"
@@ -159,22 +157,12 @@ class MediaStreamImplTest : public ::testing::Test {
TEST_F(MediaStreamImplTest, LocalMediaStream) {
// Test a stream with both audio and video.
WebKit::WebMediaStream mixed_desc = RequestLocalMediaStream(true, true);
- // Create a renderer for the stream.
- scoped_refptr<media::VideoDecoder> mixed_decoder(
- ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current()));
- EXPECT_TRUE(mixed_decoder.get() != NULL);
// Test a stream with audio only.
WebKit::WebMediaStream audio_desc = RequestLocalMediaStream(true, false);
- scoped_refptr<media::VideoDecoder> audio_decoder(
- ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current()));
- EXPECT_TRUE(audio_decoder.get() == NULL);
// Test a stream with video only.
WebKit::WebMediaStream video_desc = RequestLocalMediaStream(false, true);
- scoped_refptr<media::VideoDecoder> video_decoder(
- ms_impl_->GetVideoDecoder(GURL(), base::MessageLoopProxy::current()));
- EXPECT_TRUE(video_decoder.get() != NULL);
// Stop generated local streams.
ms_impl_->OnLocalMediaStreamStop(mixed_desc.label().utf8());
diff --git a/content/renderer/media/rtc_video_decoder.cc b/content/renderer/media/rtc_video_decoder.cc
deleted file mode 100644
index d795daf..0000000
--- a/content/renderer/media/rtc_video_decoder.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "content/renderer/media/rtc_video_decoder.h"
-
-#include <algorithm>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/message_loop.h"
-#include "media/base/demuxer.h"
-#include "media/base/limits.h"
-#include "media/base/video_frame.h"
-#include "media/base/video_util.h"
-#include "third_party/libjingle/source/talk/base/timeutils.h"
-#include "third_party/libjingle/source/talk/media/base/videoframe.h"
-
-using media::CopyUPlane;
-using media::CopyVPlane;
-using media::CopyYPlane;
-using media::DemuxerStream;
-using media::kNoTimestamp;
-using media::PIPELINE_OK;
-using media::PipelineStatusCB;
-using media::StatisticsCB;
-using media::VideoDecoder;
-
-namespace content {
-
-RTCVideoDecoder::RTCVideoDecoder(base::TaskRunner* video_decoder_thread,
- base::TaskRunner* main_thread,
- webrtc::VideoTrackInterface* video_track)
- : video_decoder_thread_(video_decoder_thread),
- main_thread_(main_thread),
- visible_size_(640, 480),
- state_(kUnInitialized),
- got_first_frame_(false),
- video_track_(video_track) {
-}
-
-void RTCVideoDecoder::Initialize(const scoped_refptr<DemuxerStream>& stream,
- const PipelineStatusCB& status_cb,
- const StatisticsCB& statistics_cb) {
- main_thread_->PostTask(
- FROM_HERE,
- base::Bind(&RTCVideoDecoder::RegisterToVideoTrack, this));
- if (!video_decoder_thread_->RunsTasksOnCurrentThread()) {
- video_decoder_thread_->PostTask(
- FROM_HERE,
- base::Bind(&RTCVideoDecoder::Initialize, this,
- stream, status_cb, statistics_cb));
- return;
- }
-
- state_ = kNormal;
- status_cb.Run(PIPELINE_OK);
-
- // TODO(acolwell): Implement stats.
-}
-
-void RTCVideoDecoder::Read(const ReadCB& read_cb) {
- if (!video_decoder_thread_->RunsTasksOnCurrentThread()) {
- video_decoder_thread_->PostTask(
- FROM_HERE,
- base::Bind(&RTCVideoDecoder::Read, this, read_cb));
- return;
- }
-
- base::AutoLock auto_lock(lock_);
- CHECK(read_cb_.is_null());
-
- if (state_ == kStopped) {
- read_cb.Run(kOk, NULL);
- return;
- }
-
- read_cb_ = read_cb;
-}
-
-void RTCVideoDecoder::Reset(const base::Closure& closure) {
- if (!video_decoder_thread_->RunsTasksOnCurrentThread()) {
- video_decoder_thread_->PostTask(
- FROM_HERE,
- base::Bind(&RTCVideoDecoder::Reset, this, closure));
- return;
- }
-
- CancelPendingRead();
- closure.Run();
-}
-
-void RTCVideoDecoder::Stop(const base::Closure& closure) {
- main_thread_->PostTask(
- FROM_HERE,
- base::Bind(&RTCVideoDecoder::DeregisterFromVideoTrack, this));
- if (!video_decoder_thread_->RunsTasksOnCurrentThread()) {
- video_decoder_thread_->PostTask(
- FROM_HERE, base::Bind(&RTCVideoDecoder::Stop, this, closure));
- return;
- }
-
- state_ = kStopped;
- CancelPendingRead();
- closure.Run();
-}
-
-void RTCVideoDecoder::SetSize(int width, int height) {
- visible_size_.SetSize(width, height);
-}
-
-// TODO(wjia): this function can be split into two parts so that the |lock_|
-// can be removed.
-// First creates media::VideoFrame, then post a task onto |message_loop_|
-// to deliver that frame.
-void RTCVideoDecoder::RenderFrame(const cricket::VideoFrame* frame) {
- // Called from libjingle thread.
- DCHECK(frame);
-
- base::TimeDelta timestamp = base::TimeDelta::FromMilliseconds(
- frame->GetTimeStamp() / talk_base::kNumNanosecsPerMillisec);
-
- ReadCB read_cb;
- {
- base::AutoLock auto_lock(lock_);
- if (read_cb_.is_null() || state_ != kNormal) {
- // TODO(ronghuawu): revisit TS adjustment when crbug.com/111672 is
- // resolved.
- if (got_first_frame_) {
- start_time_ += timestamp - last_frame_timestamp_;
- }
- last_frame_timestamp_ = timestamp;
- return;
- }
- std::swap(read_cb, read_cb_);
- }
-
- // Rebase timestamp with zero as starting point.
- if (!got_first_frame_) {
- start_time_ = timestamp;
- got_first_frame_ = true;
- }
-
- // Always allocate a new frame.
- //
- // TODO(scherkus): migrate this to proper buffer recycling.
- scoped_refptr<media::VideoFrame> video_frame =
- media::VideoFrame::CreateFrame(media::VideoFrame::YV12,
- visible_size_,
- gfx::Rect(visible_size_),
- visible_size_,
- timestamp - start_time_);
- last_frame_timestamp_ = timestamp;
-
- // Aspect ratio unsupported; DCHECK when there are non-square pixels.
- DCHECK_EQ(frame->GetPixelWidth(), 1u);
- DCHECK_EQ(frame->GetPixelHeight(), 1u);
-
- int y_rows = frame->GetHeight();
- int uv_rows = frame->GetHeight() / 2; // YV12 format.
- CopyYPlane(frame->GetYPlane(), frame->GetYPitch(), y_rows, video_frame);
- CopyUPlane(frame->GetUPlane(), frame->GetUPitch(), uv_rows, video_frame);
- CopyVPlane(frame->GetVPlane(), frame->GetVPitch(), uv_rows, video_frame);
-
- read_cb.Run(kOk, video_frame);
-}
-
-void RTCVideoDecoder::CancelPendingRead() {
- DCHECK(video_decoder_thread_->RunsTasksOnCurrentThread());
- ReadCB read_cb;
- {
- base::AutoLock auto_lock(lock_);
- std::swap(read_cb, read_cb_);
- }
-
- if (!read_cb.is_null()) {
- read_cb.Run(kOk, NULL);
- }
-}
-
-void RTCVideoDecoder::RegisterToVideoTrack() {
- DCHECK(main_thread_->RunsTasksOnCurrentThread());
- if (video_track_)
- video_track_->AddRenderer(this);
-}
-
-void RTCVideoDecoder::DeregisterFromVideoTrack() {
- DCHECK(main_thread_->RunsTasksOnCurrentThread());
- if (video_track_) {
- video_track_->RemoveRenderer(this);
- video_track_ = NULL;
- }
-}
-
-RTCVideoDecoder::~RTCVideoDecoder() {
- DCHECK_NE(kNormal, state_);
-}
-
-} // namespace content
diff --git a/content/renderer/media/rtc_video_decoder.h b/content/renderer/media/rtc_video_decoder.h
deleted file mode 100644
index 39cfd81..0000000
--- a/content/renderer/media/rtc_video_decoder.h
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2012 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 CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_
-#define CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_
-
-#include <string>
-
-#include "base/compiler_specific.h"
-#include "base/gtest_prod_util.h"
-#include "base/synchronization/lock.h"
-#include "base/task_runner.h"
-#include "base/time.h"
-#include "content/common/content_export.h"
-#include "media/base/video_decoder.h"
-#include "third_party/libjingle/source/talk/app/webrtc/mediastreaminterface.h"
-
-
-namespace cricket {
-class VideoFrame;
-} // namespace cricket
-
-namespace content {
-
-// RTCVideoDecoder is a media::VideoDecoder designed for rendering
-// Video MediaStreamTracks,
-// http://dev.w3.org/2011/webrtc/editor/getusermedia.html#mediastreamtrack
-// RTCVideoDecoder implements webrtc::VideoRendererInterface in order to render
-// video frames provided from a webrtc::VideoTrackInteface.
-// RTCVideoDecoder register itself to the Video Track when the decoder is
-// initialized and deregisters itself when it is stopped.
-// Calls to webrtc::VideoTrackInterface must occur on the main render thread.
-class CONTENT_EXPORT RTCVideoDecoder
- : public media::VideoDecoder,
- NON_EXPORTED_BASE(public webrtc::VideoRendererInterface) {
- public:
- RTCVideoDecoder(base::TaskRunner* video_decoder_thread, // For video decoder
- base::TaskRunner* main_thread, // For accessing VideoTracks.
- webrtc::VideoTrackInterface* video_track);
-
- // media::VideoDecoder implementation.
- virtual void Initialize(const scoped_refptr<media::DemuxerStream>& stream,
- const media::PipelineStatusCB& status_cb,
- const media::StatisticsCB& statistics_cb) OVERRIDE;
- virtual void Read(const ReadCB& read_cb) OVERRIDE;
- virtual void Reset(const base::Closure& closure) OVERRIDE;
- virtual void Stop(const base::Closure& closure) OVERRIDE;
-
- // webrtc::VideoRendererInterface implementation
- virtual void SetSize(int width, int height) OVERRIDE;
- virtual void RenderFrame(const cricket::VideoFrame* frame) OVERRIDE;
-
- protected:
- virtual ~RTCVideoDecoder();
-
- private:
- friend class RTCVideoDecoderTest;
- FRIEND_TEST_ALL_PREFIXES(RTCVideoDecoderTest, Initialize_Successful);
- FRIEND_TEST_ALL_PREFIXES(RTCVideoDecoderTest, DoReset);
- FRIEND_TEST_ALL_PREFIXES(RTCVideoDecoderTest, DoRenderFrame);
- FRIEND_TEST_ALL_PREFIXES(RTCVideoDecoderTest, DoSetSize);
-
- enum DecoderState {
- kUnInitialized,
- kNormal,
- kStopped
- };
-
- void CancelPendingRead();
-
- // Register this RTCVideoDecoder to get VideoFrames from the
- // webrtc::VideoTrack in |video_track_|.
- // This is done on the |main_thread_|.
- void RegisterToVideoTrack();
- void DeregisterFromVideoTrack();
-
- scoped_refptr<base::TaskRunner> video_decoder_thread_;
- scoped_refptr<base::TaskRunner> main_thread_;
- gfx::Size visible_size_;
- std::string url_;
- DecoderState state_;
- ReadCB read_cb_;
- bool got_first_frame_;
- base::TimeDelta last_frame_timestamp_;
- base::TimeDelta start_time_;
- // The video track the renderer is connected to.
- scoped_refptr<webrtc::VideoTrackInterface> video_track_;
-
- // Used for accessing |read_cb_| from another thread.
- base::Lock lock_;
-
- DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoder);
-};
-
-} // namespace content
-
-#endif // CONTENT_RENDERER_MEDIA_RTC_VIDEO_DECODER_H_
diff --git a/content/renderer/media/rtc_video_decoder_unittest.cc b/content/renderer/media/rtc_video_decoder_unittest.cc
deleted file mode 100644
index 042d390..0000000
--- a/content/renderer/media/rtc_video_decoder_unittest.cc
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "content/renderer/media/rtc_video_decoder.h"
-
-#include <deque>
-
-#include "base/bind.h"
-#include "base/memory/singleton.h"
-#include "base/message_loop.h"
-#include "base/string_util.h"
-#include "media/base/data_buffer.h"
-#include "media/base/limits.h"
-#include "media/base/mock_filters.h"
-#include "media/base/test_helpers.h"
-#include "media/base/video_frame.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "third_party/libjingle/source/talk/media/base/videoframe.h"
-
-using ::testing::_;
-using ::testing::AnyNumber;
-using ::testing::DoAll;
-using ::testing::Message;
-using ::testing::Return;
-using ::testing::ReturnNull;
-using ::testing::SetArgumentPointee;
-using ::testing::StrictMock;
-using ::testing::WithArg;
-using ::testing::Invoke;
-using media::MockStatisticsCB;
-using media::MockVideoRenderer;
-using media::NewExpectedClosure;
-using media::NewExpectedStatusCB;
-using media::PipelineStatistics;
-using media::PIPELINE_OK;
-using media::StatisticsCB;
-
-namespace content {
-namespace {
-
-class NullVideoFrame : public cricket::VideoFrame {
- public:
- NullVideoFrame() {}
- virtual ~NullVideoFrame() {}
-
- virtual bool Reset(uint32 fourcc, int w, int h, int dw, int dh,
- uint8 *sample, size_t sample_size,
- size_t pixel_width, size_t pixel_height,
- int64 elapsed_time, int64 time_stamp, int rotation)
- OVERRIDE {
- return true;
- }
-
- virtual size_t GetWidth() const OVERRIDE { return 0; }
- virtual size_t GetHeight() const OVERRIDE { return 0; }
- virtual const uint8 *GetYPlane() const OVERRIDE { return NULL; }
- virtual const uint8 *GetUPlane() const OVERRIDE { return NULL; }
- virtual const uint8 *GetVPlane() const OVERRIDE { return NULL; }
- virtual uint8 *GetYPlane() OVERRIDE { return NULL; }
- virtual uint8 *GetUPlane() OVERRIDE { return NULL; }
- virtual uint8 *GetVPlane() OVERRIDE { return NULL; }
- virtual int32 GetYPitch() const OVERRIDE { return 0; }
- virtual int32 GetUPitch() const OVERRIDE { return 0; }
- virtual int32 GetVPitch() const OVERRIDE { return 0; }
-
- virtual size_t GetPixelWidth() const OVERRIDE { return 1; }
- virtual size_t GetPixelHeight() const OVERRIDE { return 1; }
- virtual int64 GetElapsedTime() const OVERRIDE { return 0; }
- virtual int64 GetTimeStamp() const OVERRIDE { return 0; }
- virtual void SetElapsedTime(int64 elapsed_time) OVERRIDE {}
- virtual void SetTimeStamp(int64 time_stamp) OVERRIDE {}
-
- virtual int GetRotation() const OVERRIDE { return 0; }
-
- virtual VideoFrame *Copy() const OVERRIDE { return NULL; }
-
- virtual bool MakeExclusive() OVERRIDE { return true; }
-
- virtual size_t CopyToBuffer(uint8 *buffer, size_t size) const OVERRIDE {
- return 0;
- }
-
- virtual size_t ConvertToRgbBuffer(uint32 to_fourcc, uint8 *buffer,
- size_t size,
- int stride_rgb) const OVERRIDE {
- return 0;
- }
-
- virtual void StretchToPlanes(uint8 *y, uint8 *u, uint8 *v,
- int32 pitchY, int32 pitchU, int32 pitchV,
- size_t width, size_t height,
- bool interpolate, bool crop) const OVERRIDE {
- }
-
- virtual size_t StretchToBuffer(size_t w, size_t h, uint8 *buffer, size_t size,
- bool interpolate, bool crop) const OVERRIDE {
- return 0;
- }
-
- virtual void StretchToFrame(VideoFrame *target, bool interpolate,
- bool crop) const OVERRIDE {
- }
-
- virtual VideoFrame *Stretch(size_t w, size_t h, bool interpolate,
- bool crop) const OVERRIDE {
- return NULL;
- }
-
- protected:
- virtual VideoFrame* CreateEmptyFrame(int w, int h,
- size_t pixel_width, size_t pixel_height,
- int64 elapsed_time,
- int64 time_stamp) const OVERRIDE {
- return NULL;
- }
-};
-
-class MockVideoTrack : public webrtc::VideoTrackInterface {
- public:
- static MockVideoTrack* Create() {
- return new talk_base::RefCountedObject<MockVideoTrack>();
- }
-
- virtual std::string kind() const OVERRIDE {
- NOTIMPLEMENTED();
- return "";
- }
- virtual std::string id() const OVERRIDE {
- NOTIMPLEMENTED();
- return "";
- }
- virtual bool enabled() const OVERRIDE {
- NOTIMPLEMENTED();
- return false;
- }
- virtual TrackState state() const OVERRIDE {
- NOTIMPLEMENTED();
- return kEnded;
- }
- virtual bool set_enabled(bool enable) OVERRIDE {
- NOTIMPLEMENTED();
- return false;
- }
- virtual bool set_state(TrackState new_state) OVERRIDE {
- NOTIMPLEMENTED();
- return false;
- }
- virtual void RegisterObserver(webrtc::ObserverInterface* observer) OVERRIDE {
- NOTIMPLEMENTED();
- }
- virtual void UnregisterObserver(
- webrtc::ObserverInterface* observer) OVERRIDE {
- NOTIMPLEMENTED();
- }
- virtual webrtc::VideoSourceInterface* GetSource() const OVERRIDE {
- NOTIMPLEMENTED();
- return NULL;
- }
- MOCK_METHOD1(AddRenderer, void(webrtc::VideoRendererInterface* renderer));
- MOCK_METHOD1(RemoveRenderer, void(webrtc::VideoRendererInterface* renderer));
-
- virtual cricket::VideoRenderer* FrameInput() OVERRIDE {
- NOTIMPLEMENTED();
- return NULL;
- }
-
- protected:
- MockVideoTrack() {}
- ~MockVideoTrack() {}
-};
-
-} // namespace
-
-class RTCVideoDecoderTest : public testing::Test {
- protected:
- static const int kWidth;
- static const int kHeight;
- static const PipelineStatistics kStatistics;
-
- RTCVideoDecoderTest() {
- }
-
- virtual ~RTCVideoDecoderTest() {
- }
-
- virtual void SetUp() OVERRIDE {
- video_track_ = MockVideoTrack::Create();
- decoder_ = new RTCVideoDecoder(message_loop_.message_loop_proxy(),
- message_loop_.message_loop_proxy(),
- video_track_);
- read_cb_ = base::Bind(&RTCVideoDecoderTest::FrameReady,
- base::Unretained(this));
-
- DCHECK(decoder_);
-
- EXPECT_CALL(statistics_cb_, OnStatistics(_))
- .Times(AnyNumber());
- }
-
- virtual void TearDown() OVERRIDE {
- if (decoder_->state_ == RTCVideoDecoder::kStopped)
- return;
- Stop();
- }
-
- void InitializeDecoderSuccessfully() {
- EXPECT_CALL(*video_track_, AddRenderer(decoder_.get()));
- // Test successful initialization.
- decoder_->Initialize(
- NULL, NewExpectedStatusCB(PIPELINE_OK), NewStatisticsCB());
- message_loop_.RunUntilIdle();
- }
-
- void Stop() {
- EXPECT_CALL(*video_track_, RemoveRenderer(decoder_.get()));
- decoder_->Stop(media::NewExpectedClosure());
-
- message_loop_.RunUntilIdle();
- EXPECT_EQ(RTCVideoDecoder::kStopped, decoder_->state_);
- }
-
- StatisticsCB NewStatisticsCB() {
- return base::Bind(&MockStatisticsCB::OnStatistics,
- base::Unretained(&statistics_cb_));
- }
-
- void RenderFrame() {
- NullVideoFrame video_frame;
- decoder_->RenderFrame(&video_frame);
- }
-
- MOCK_METHOD2(FrameReady, void(media::VideoDecoder::Status status,
- const scoped_refptr<media::VideoFrame>&));
-
- // Fixture members.
- scoped_refptr<MockVideoTrack> video_track_;
- scoped_refptr<RTCVideoDecoder> decoder_;
- MockStatisticsCB statistics_cb_;
- MessageLoop message_loop_;
- media::VideoDecoder::ReadCB read_cb_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(RTCVideoDecoderTest);
-};
-
-const int RTCVideoDecoderTest::kWidth = 640;
-const int RTCVideoDecoderTest::kHeight = 480;
-const PipelineStatistics RTCVideoDecoderTest::kStatistics;
-
-MATCHER_P2(HasSize, width, height, "") {
- EXPECT_EQ(arg->coded_size().width(), width);
- EXPECT_EQ(arg->coded_size().height(), height);
- EXPECT_EQ(arg->visible_rect().x(), 0);
- EXPECT_EQ(arg->visible_rect().y(), 0);
- EXPECT_EQ(arg->visible_rect().width(), width);
- EXPECT_EQ(arg->visible_rect().height(), height);
- EXPECT_EQ(arg->natural_size().width(), width);
- EXPECT_EQ(arg->natural_size().height(), height);
- return (arg->coded_size().width() == width) &&
- (arg->coded_size().height() == height) &&
- (arg->visible_rect().x() == 0) &&
- (arg->visible_rect().y() == 0) &&
- (arg->visible_rect().width() == width) &&
- (arg->visible_rect().height() == height) &&
- (arg->natural_size().width() == width) &&
- (arg->natural_size().height() == height);
-}
-
-TEST_F(RTCVideoDecoderTest, Initialize_Successful) {
- InitializeDecoderSuccessfully();
-
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- HasSize(kWidth, kHeight)));
- decoder_->Read(read_cb_);
- RenderFrame();
-}
-
-TEST_F(RTCVideoDecoderTest, DoReset) {
- InitializeDecoderSuccessfully();
-
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- scoped_refptr<media::VideoFrame>()));
- decoder_->Read(read_cb_);
- decoder_->Reset(media::NewExpectedClosure());
-
- message_loop_.RunUntilIdle();
- EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_);
-}
-
-TEST_F(RTCVideoDecoderTest, DoRenderFrame) {
- InitializeDecoderSuccessfully();
-
- for (size_t i = 0; i < media::limits::kMaxVideoFrames; ++i)
- RenderFrame();
-
- message_loop_.RunUntilIdle();
- EXPECT_EQ(RTCVideoDecoder::kNormal, decoder_->state_);
-}
-
-TEST_F(RTCVideoDecoderTest, DoSetSize) {
- InitializeDecoderSuccessfully();
-
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- HasSize(kWidth, kHeight)));
- decoder_->Read(read_cb_);
- RenderFrame();
- message_loop_.RunUntilIdle();
-
- int new_width = kWidth * 2;
- int new_height = kHeight * 2;
- decoder_->SetSize(new_width, new_height);
-
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- HasSize(new_width, new_height)));
- decoder_->Read(read_cb_);
- RenderFrame();
- message_loop_.RunUntilIdle();
-}
-
-TEST_F(RTCVideoDecoderTest, ReadAndShutdown) {
- // Test all the Read requests can be fullfilled (which is needed in order to
- // teardown the pipeline) even when there's no input frame.
- InitializeDecoderSuccessfully();
-
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- scoped_refptr<media::VideoFrame>()));
- decoder_->Read(read_cb_);
- Stop();
-
- // Any read after stopping should be immediately satisfied.
- EXPECT_CALL(*this, FrameReady(media::VideoDecoder::kOk,
- scoped_refptr<media::VideoFrame>()));
- decoder_->Read(read_cb_);
- message_loop_.RunUntilIdle();
-}
-
-} // namespace content
diff --git a/content/renderer/media/rtc_video_renderer.h b/content/renderer/media/rtc_video_renderer.h
index ea0ac50..49a3091 100644
--- a/content/renderer/media/rtc_video_renderer.h
+++ b/content/renderer/media/rtc_video_renderer.h
@@ -25,6 +25,9 @@ namespace content {
// RTCVideoRenderer register itself to the Video Track when the
// VideoFrameProvider is started and deregisters itself when it is stopped.
// Calls to webrtc::VideoTrackInterface must occur on the main thread.
+// TODO(wuchengli): Add unit test. See the link below for reference.
+// http://src.chromium.org/viewvc/chrome/trunk/src/content/renderer/media/rtc_vi
+// deo_decoder_unittest.cc?revision=180591&view=markup
class CONTENT_EXPORT RTCVideoRenderer
: NON_EXPORTED_BASE(public webkit_media::VideoFrameProvider),
NON_EXPORTED_BASE(public webrtc::VideoRendererInterface),
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 03c642a..61554f7 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -2703,10 +2703,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
#if defined(ENABLE_WEBRTC)
- // TODO(wjia): when all patches related to WebMediaPlayerMS have been
- // landed, remove the switch. Refer to crbug.com/142988.
- if (!cmd_line->HasSwitch(switches::kDisableWebMediaPlayerMS) &&
- MediaStreamImpl::CheckMediaStream(url)) {
+ if (MediaStreamImpl::CheckMediaStream(url)) {
EnsureMediaStreamImpl();
return new webkit_media::WebMediaPlayerMS(
frame, client, AsWeakPtr(), media_stream_impl_, new RenderMediaLog());
@@ -2789,7 +2786,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer(
}
webkit_media::WebMediaPlayerParams params(
- sink, gpu_factories, media_stream_impl_, new RenderMediaLog());
+ sink, gpu_factories, new RenderMediaLog());
WebMediaPlayer* media_player =
GetContentClient()->renderer()->OverrideCreateWebMediaPlayer(
this, frame, client, AsWeakPtr(), params);