| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <cstdlib> | 5 #include <cstdlib> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/synchronization/condition_variable.h" | 9 #include "base/synchronization/condition_variable.h" |
| 10 #include "base/synchronization/lock.h" | 10 #include "base/synchronization/lock.h" |
| 11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "media/cast/cast_config.h" | 12 #include "media/cast/cast_config.h" |
| 13 #include "media/cast/receiver/video_decoder.h" | 13 #include "media/cast/receiver/video_decoder.h" |
| 14 #include "media/cast/sender/vp8_encoder.h" |
| 14 #include "media/cast/test/utility/standalone_cast_environment.h" | 15 #include "media/cast/test/utility/standalone_cast_environment.h" |
| 15 #include "media/cast/test/utility/video_utility.h" | 16 #include "media/cast/test/utility/video_utility.h" |
| 16 #include "media/cast/video_sender/codecs/vp8/vp8_encoder.h" | |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 18 |
| 19 namespace media { | 19 namespace media { |
| 20 namespace cast { | 20 namespace cast { |
| 21 | 21 |
| 22 namespace { | 22 namespace { |
| 23 | 23 |
| 24 const int kWidth = 360; | 24 const int kWidth = 360; |
| 25 const int kHeight = 240; | 25 const int kHeight = 240; |
| 26 const int kFrameRate = 10; | 26 const int kFrameRate = 10; |
| 27 | 27 |
| 28 VideoSenderConfig GetVideoSenderConfigForTest() { | 28 VideoSenderConfig GetVideoSenderConfigForTest() { |
| 29 VideoSenderConfig config; | 29 VideoSenderConfig config; |
| 30 config.width = kWidth; | 30 config.width = kWidth; |
| 31 config.height = kHeight; | 31 config.height = kHeight; |
| 32 config.max_frame_rate = kFrameRate; | 32 config.max_frame_rate = kFrameRate; |
| 33 return config; | 33 return config; |
| 34 } | 34 } |
| 35 | 35 |
| 36 } // namespace | 36 } // namespace |
| 37 | 37 |
| 38 class VideoDecoderTest : public ::testing::TestWithParam<transport::Codec> { | 38 class VideoDecoderTest : public ::testing::TestWithParam<Codec> { |
| 39 public: | 39 public: |
| 40 VideoDecoderTest() | 40 VideoDecoderTest() |
| 41 : cast_environment_(new StandaloneCastEnvironment()), | 41 : cast_environment_(new StandaloneCastEnvironment()), |
| 42 vp8_encoder_(GetVideoSenderConfigForTest(), 0), | 42 vp8_encoder_(GetVideoSenderConfigForTest(), 0), |
| 43 cond_(&lock_) { | 43 cond_(&lock_) { |
| 44 vp8_encoder_.Initialize(); | 44 vp8_encoder_.Initialize(); |
| 45 } | 45 } |
| 46 | 46 |
| 47 protected: | 47 protected: |
| 48 virtual void SetUp() OVERRIDE { | 48 virtual void SetUp() OVERRIDE { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 66 const scoped_refptr<VideoFrame> video_frame = | 66 const scoped_refptr<VideoFrame> video_frame = |
| 67 VideoFrame::CreateFrame(VideoFrame::YV12, | 67 VideoFrame::CreateFrame(VideoFrame::YV12, |
| 68 frame_size, | 68 frame_size, |
| 69 gfx::Rect(frame_size), | 69 gfx::Rect(frame_size), |
| 70 frame_size, | 70 frame_size, |
| 71 next_frame_timestamp_); | 71 next_frame_timestamp_); |
| 72 next_frame_timestamp_ += base::TimeDelta::FromSeconds(1) / kFrameRate; | 72 next_frame_timestamp_ += base::TimeDelta::FromSeconds(1) / kFrameRate; |
| 73 PopulateVideoFrame(video_frame, 0); | 73 PopulateVideoFrame(video_frame, 0); |
| 74 | 74 |
| 75 // Encode |frame| into |encoded_frame->data|. | 75 // Encode |frame| into |encoded_frame->data|. |
| 76 scoped_ptr<transport::EncodedFrame> encoded_frame( | 76 scoped_ptr<EncodedFrame> encoded_frame( |
| 77 new transport::EncodedFrame()); | 77 new EncodedFrame()); |
| 78 // Test only supports VP8, currently. | 78 // Test only supports VP8, currently. |
| 79 CHECK_EQ(transport::CODEC_VIDEO_VP8, GetParam()); | 79 CHECK_EQ(CODEC_VIDEO_VP8, GetParam()); |
| 80 vp8_encoder_.Encode(video_frame, encoded_frame.get()); | 80 vp8_encoder_.Encode(video_frame, encoded_frame.get()); |
| 81 encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames; | 81 encoded_frame->frame_id = last_frame_id_ + 1 + num_dropped_frames; |
| 82 last_frame_id_ = encoded_frame->frame_id; | 82 last_frame_id_ = encoded_frame->frame_id; |
| 83 | 83 |
| 84 { | 84 { |
| 85 base::AutoLock auto_lock(lock_); | 85 base::AutoLock auto_lock(lock_); |
| 86 ++total_video_frames_feed_in_; | 86 ++total_video_frames_feed_in_; |
| 87 } | 87 } |
| 88 | 88 |
| 89 cast_environment_->PostTask( | 89 cast_environment_->PostTask( |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 FeedMoreVideo(num_dropped); | 170 FeedMoreVideo(num_dropped); |
| 171 } else { | 171 } else { |
| 172 FeedMoreVideo(0); | 172 FeedMoreVideo(0); |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 WaitForAllVideoToBeDecoded(); | 175 WaitForAllVideoToBeDecoded(); |
| 176 } | 176 } |
| 177 | 177 |
| 178 INSTANTIATE_TEST_CASE_P(VideoDecoderTestScenarios, | 178 INSTANTIATE_TEST_CASE_P(VideoDecoderTestScenarios, |
| 179 VideoDecoderTest, | 179 VideoDecoderTest, |
| 180 ::testing::Values(transport::CODEC_VIDEO_VP8)); | 180 ::testing::Values(CODEC_VIDEO_VP8)); |
| 181 | 181 |
| 182 } // namespace cast | 182 } // namespace cast |
| 183 } // namespace media | 183 } // namespace media |
| OLD | NEW |