| Index: content/renderer/media/rtc_video_decoder_unittest.cc
|
| 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 042d3901eda7bf578d5569f917f5d629f82dcc93..0000000000000000000000000000000000000000
|
| --- 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
|
|
|