OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/platform_thread.h" | 7 #include "base/platform_thread.h" |
8 #include "base/time.h" | 8 #include "base/time.h" |
9 #include "base/waitable_event.h" | 9 #include "base/waitable_event.h" |
10 #include "media/base/pipeline_impl.h" | 10 #include "media/base/pipeline_impl.h" |
11 #include "media/base/media_format.h" | 11 #include "media/base/media_format.h" |
12 #include "media/base/filters.h" | 12 #include "media/base/filters.h" |
13 #include "media/base/factory.h" | 13 #include "media/base/factory.h" |
14 #include "media/base/filter_host.h" | 14 #include "media/base/filter_host.h" |
15 #include "media/base/mock_media_filters.h" | 15 #include "media/base/mock_media_filters.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 | 17 |
18 using media::FilterFactory; | 18 using media::FilterFactory; |
19 using media::FilterFactoryCollection; | 19 using media::FilterFactoryCollection; |
20 using media::FilterHost; | 20 using media::FilterHost; |
21 using media::InitializationHelper; | 21 using media::InitializationHelper; |
22 using media::MediaFormat; | 22 using media::MediaFormat; |
23 using media::MockAudioDecoder; | 23 using media::MockAudioDecoder; |
24 using media::MockAudioRenderer; | 24 using media::MockAudioRenderer; |
25 using media::MockDataSource; | 25 using media::MockDataSource; |
26 using media::MockDemuxer; | 26 using media::MockDemuxer; |
| 27 using media::MockFilterConfig; |
| 28 using media::MockVideoDecoder; |
| 29 using media::MockVideoRenderer; |
27 using media::PipelineImpl; | 30 using media::PipelineImpl; |
28 | 31 |
| 32 namespace { |
| 33 |
| 34 void AddAllMockFilters(FilterFactoryCollection* factories, |
| 35 const MockFilterConfig* config) { |
| 36 factories->AddFactory(MockDataSource::CreateFactory(config)); |
| 37 factories->AddFactory(MockDemuxer::CreateFactory(config)); |
| 38 factories->AddFactory(MockAudioDecoder::CreateFactory(config)); |
| 39 factories->AddFactory(MockAudioRenderer::CreateFactory(config)); |
| 40 factories->AddFactory(MockVideoDecoder::CreateFactory(config)); |
| 41 factories->AddFactory(MockVideoRenderer::CreateFactory(config)); |
| 42 } |
| 43 |
| 44 } // namespace |
| 45 |
| 46 // TODO(ralphl): Get rid of single character variable names in these tests. |
29 TEST(PipelineImplTest, Initialization) { | 47 TEST(PipelineImplTest, Initialization) { |
30 std::string u(""); | 48 std::string u(""); |
31 PipelineImpl p; | 49 PipelineImpl p; |
32 InitializationHelper h; | 50 InitializationHelper h; |
33 h.Start(&p, MockDataSource::CreateFactory(media::MOCK_FILTER_NEVER_INIT), u); | 51 MockFilterConfig config; |
| 52 config.data_source_behavior = media::MOCK_DATA_SOURCE_NEVER_INIT; |
| 53 h.Start(&p, MockDataSource::CreateFactory(&config), u); |
34 h.TimedWait(base::TimeDelta::FromMilliseconds(300)); | 54 h.TimedWait(base::TimeDelta::FromMilliseconds(300)); |
35 EXPECT_TRUE(h.waiting_for_callback()); | 55 EXPECT_TRUE(h.waiting_for_callback()); |
36 EXPECT_FALSE(p.IsInitialized()); | 56 EXPECT_FALSE(p.IsInitialized()); |
37 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); | 57 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); |
38 p.Stop(); | 58 p.Stop(); |
39 EXPECT_FALSE(h.waiting_for_callback()); | 59 EXPECT_FALSE(h.waiting_for_callback()); |
40 EXPECT_FALSE(h.callback_success_status()); | 60 EXPECT_FALSE(h.callback_success_status()); |
41 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); | 61 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); |
42 | 62 |
43 h.Start(&p, MockDataSource::CreateFactory(media::MOCK_FILTER_TASK_INIT), u); | 63 config.data_source_behavior = media::MOCK_DATA_SOURCE_TASK_INIT; |
| 64 h.Start(&p, MockDataSource::CreateFactory(&config), u); |
| 65 h.TimedWait(base::TimeDelta::FromSeconds(5)); |
| 66 EXPECT_FALSE(h.waiting_for_callback()); |
| 67 EXPECT_FALSE(h.callback_success_status()); |
| 68 EXPECT_FALSE(p.IsInitialized()); |
| 69 EXPECT_FALSE(media::PIPELINE_OK == p.GetError()); |
| 70 p.Stop(); |
| 71 |
| 72 config.data_source_behavior = media::MOCK_DATA_SOURCE_ERROR_IN_INIT; |
| 73 h.Start(&p, MockDataSource::CreateFactory(&config), u); |
44 h.TimedWait(base::TimeDelta::FromSeconds(5)); | 74 h.TimedWait(base::TimeDelta::FromSeconds(5)); |
45 EXPECT_FALSE(h.waiting_for_callback()); | 75 EXPECT_FALSE(h.waiting_for_callback()); |
46 EXPECT_FALSE(h.callback_success_status()); | 76 EXPECT_FALSE(h.callback_success_status()); |
47 EXPECT_FALSE(p.IsInitialized()); | 77 EXPECT_FALSE(p.IsInitialized()); |
48 EXPECT_FALSE(media::PIPELINE_OK == p.GetError()); | 78 EXPECT_FALSE(media::PIPELINE_OK == p.GetError()); |
49 p.Stop(); | 79 p.Stop(); |
50 } | 80 } |
51 | 81 |
52 TEST(PipelineImplTest, FullMockPipeline) { | 82 TEST(PipelineImplTest, MockAudioPipeline) { |
53 std::string url(""); | 83 std::string url(""); |
54 PipelineImpl p; | 84 PipelineImpl p; |
| 85 MockFilterConfig config; |
| 86 config.set_no_video(); |
55 scoped_refptr<FilterFactoryCollection> c = new FilterFactoryCollection(); | 87 scoped_refptr<FilterFactoryCollection> c = new FilterFactoryCollection(); |
56 c->AddFactory(MockDataSource::CreateFactory(media::MOCK_FILTER_NORMAL_INIT)); | 88 AddAllMockFilters(c, &config); |
57 c->AddFactory(MockDemuxer::CreateFactory()); | |
58 c->AddFactory(MockAudioDecoder::CreateFactory()); | |
59 c->AddFactory(MockAudioRenderer::CreateFactory()); | |
60 InitializationHelper h; | 89 InitializationHelper h; |
61 h.Start(&p, c, url); | 90 h.Start(&p, c, url); |
62 h.TimedWait(base::TimeDelta::FromSeconds(5)); | 91 h.TimedWait(base::TimeDelta::FromSeconds(5)); |
63 EXPECT_FALSE(h.waiting_for_callback()); | 92 EXPECT_FALSE(h.waiting_for_callback()); |
64 EXPECT_TRUE(h.callback_success_status()); | 93 EXPECT_TRUE(h.callback_success_status()); |
65 EXPECT_TRUE(p.IsInitialized()); | 94 EXPECT_TRUE(p.IsInitialized()); |
66 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); | 95 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); |
| 96 size_t width, height; |
| 97 p.GetVideoSize(&width, &height); |
| 98 EXPECT_EQ(0u, width); |
| 99 EXPECT_EQ(0u, height); |
67 p.SetPlaybackRate(1.0f); | 100 p.SetPlaybackRate(1.0f); |
68 p.SetVolume(0.5f); | 101 p.SetVolume(0.5f); |
69 p.Stop(); | 102 p.Stop(); |
70 EXPECT_FALSE(p.IsInitialized()); | 103 EXPECT_FALSE(p.IsInitialized()); |
71 } | 104 } |
| 105 |
| 106 TEST(PipelineImplTest, MockVideoPipeline) { |
| 107 std::string url(""); |
| 108 PipelineImpl p; |
| 109 scoped_refptr<FilterFactoryCollection> c = new FilterFactoryCollection(); |
| 110 MockFilterConfig config; |
| 111 AddAllMockFilters(c, &config); |
| 112 InitializationHelper h; |
| 113 h.Start(&p, c, url); |
| 114 h.TimedWait(base::TimeDelta::FromSeconds(5)); |
| 115 EXPECT_FALSE(h.waiting_for_callback()); |
| 116 EXPECT_TRUE(h.callback_success_status()); |
| 117 EXPECT_TRUE(p.IsInitialized()); |
| 118 EXPECT_TRUE(media::PIPELINE_OK == p.GetError()); |
| 119 size_t width, height; |
| 120 p.GetVideoSize(&width, &height); |
| 121 EXPECT_EQ(config.video_width, width); |
| 122 EXPECT_EQ(config.video_height, height); |
| 123 p.SetPlaybackRate(1.0f); |
| 124 p.SetVolume(0.5f); |
| 125 p.Stop(); |
| 126 EXPECT_FALSE(p.IsInitialized()); |
| 127 } |
| 128 |
OLD | NEW |