OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. Use of this |
2 // source code is governed by a BSD-style license that can be found in the | 2 // source code is governed by a BSD-style license that can be found in the |
3 // LICENSE file. | 3 // LICENSE file. |
4 | 4 |
5 #ifndef MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 5 #ifndef MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
6 #define MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 6 #define MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 | 9 |
10 #include "base/waitable_event.h" | 10 #include "base/waitable_event.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 }; | 30 }; |
31 | 31 |
32 | 32 |
33 // This class is used by all of the mock filters to change the configuration | 33 // This class is used by all of the mock filters to change the configuration |
34 // of the desired pipeline. The test using this must ensure that the lifetime | 34 // of the desired pipeline. The test using this must ensure that the lifetime |
35 // of the object is at least as long as the lifetime of the filters, as this | 35 // of the object is at least as long as the lifetime of the filters, as this |
36 // is typically allocated on the stack. | 36 // is typically allocated on the stack. |
37 struct MockFilterConfig { | 37 struct MockFilterConfig { |
38 MockFilterConfig() | 38 MockFilterConfig() |
39 : data_source_behavior(MOCK_DATA_SOURCE_NORMAL_INIT), | 39 : data_source_behavior(MOCK_DATA_SOURCE_NORMAL_INIT), |
| 40 data_source_value('!'), |
40 has_video(true), | 41 has_video(true), |
41 video_width(1280u), | 42 video_width(1280u), |
42 video_height(720u), | 43 video_height(720u), |
43 video_surface_format(VideoSurface::YV12), | 44 video_surface_format(VideoSurface::YV12), |
44 has_audio(true), | 45 has_audio(true), |
45 compressed_audio_mime_type(mime_type::kAACAudio), | 46 compressed_audio_mime_type(mime_type::kAACAudio), |
46 uncompressed_audio_mime_type(mime_type::kUncompressedAudio), | 47 uncompressed_audio_mime_type(mime_type::kUncompressedAudio), |
47 compressed_video_mime_type(mime_type::kH264AnnexB), | 48 compressed_video_mime_type(mime_type::kH264AnnexB), |
48 uncompressed_video_mime_type(mime_type::kUncompressedVideo), | 49 uncompressed_video_mime_type(mime_type::kUncompressedVideo), |
49 frame_duration(base::TimeDelta::FromMicroseconds(33333)), | 50 frame_duration(base::TimeDelta::FromMicroseconds(33333)), |
50 media_duration(base::TimeDelta::FromSeconds(5)), | 51 media_duration(base::TimeDelta::FromSeconds(5)), |
51 media_total_bytes(media_duration.InMilliseconds() * 250) { | 52 media_total_bytes(media_duration.InMilliseconds() * 250) { |
52 } | 53 } |
53 | 54 |
54 MockDataSourceBehavior data_source_behavior; | 55 MockDataSourceBehavior data_source_behavior; |
| 56 char data_source_value; |
55 bool has_video; | 57 bool has_video; |
56 size_t video_width; | 58 size_t video_width; |
57 size_t video_height; | 59 size_t video_height; |
58 VideoSurface::Format video_surface_format; | 60 VideoSurface::Format video_surface_format; |
59 bool has_audio; | 61 bool has_audio; |
60 std::string compressed_audio_mime_type; | 62 std::string compressed_audio_mime_type; |
61 std::string uncompressed_audio_mime_type; | 63 std::string uncompressed_audio_mime_type; |
62 std::string compressed_video_mime_type; | 64 std::string compressed_video_mime_type; |
63 std::string uncompressed_video_mime_type; | 65 std::string uncompressed_video_mime_type; |
64 base::TimeDelta frame_duration; | 66 base::TimeDelta frame_duration; |
65 base::TimeDelta media_duration; | 67 base::TimeDelta media_duration; |
66 int64 media_total_bytes; | 68 int64 media_total_bytes; |
67 }; | 69 }; |
68 | 70 |
69 | 71 |
70 class MockDataSource : public DataSource { | 72 class MockDataSource : public DataSource { |
71 public: | 73 public: |
72 static FilterFactory* CreateFactory(const MockFilterConfig* config) { | 74 static FilterFactory* CreateFactory(const MockFilterConfig* config) { |
73 return new FilterFactoryImpl1<MockDataSource, | 75 return new FilterFactoryImpl1<MockDataSource, |
74 const MockFilterConfig*>(config); | 76 const MockFilterConfig*>(config); |
75 } | 77 } |
76 | 78 |
77 explicit MockDataSource(const MockFilterConfig* config) | 79 explicit MockDataSource(const MockFilterConfig* config) |
78 : config_(config), | 80 : config_(config), |
79 position_(0) { | 81 position_(0), |
| 82 deleted_(NULL) { |
| 83 } |
| 84 |
| 85 MockDataSource(const MockFilterConfig* config, bool* deleted) |
| 86 : config_(config), |
| 87 position_(0), |
| 88 deleted_(deleted) { |
| 89 EXPECT_TRUE(deleted); |
| 90 EXPECT_FALSE(*deleted); |
80 } | 91 } |
81 | 92 |
82 // Implementation of MediaFilter. | 93 // Implementation of MediaFilter. |
83 virtual void Stop() {} | 94 virtual void Stop() {} |
84 | 95 |
85 // Implementation of DataSource. | 96 // Implementation of DataSource. |
86 virtual bool Initialize(const std::string& url) { | 97 virtual bool Initialize(const std::string& url) { |
87 media_format_.SetAsString(MediaFormat::kMimeType, | 98 media_format_.SetAsString(MediaFormat::kMimeType, |
88 mime_type::kApplicationOctetStream); | 99 mime_type::kApplicationOctetStream); |
89 media_format_.SetAsString(MediaFormat::kURL, url); | 100 media_format_.SetAsString(MediaFormat::kURL, url); |
(...skipping 24 matching lines...) Expand all Loading... |
114 | 125 |
115 virtual const MediaFormat* GetMediaFormat() { | 126 virtual const MediaFormat* GetMediaFormat() { |
116 return &media_format_; | 127 return &media_format_; |
117 } | 128 } |
118 | 129 |
119 virtual size_t Read(uint8* data, size_t size) { | 130 virtual size_t Read(uint8* data, size_t size) { |
120 size_t read = static_cast<size_t>(config_->media_total_bytes - position_); | 131 size_t read = static_cast<size_t>(config_->media_total_bytes - position_); |
121 if (size < read) { | 132 if (size < read) { |
122 read = size; | 133 read = size; |
123 } | 134 } |
124 memset(data, 0, read); | 135 memset(data, config_->data_source_value, read); |
125 return read; | 136 return read; |
126 } | 137 } |
127 | 138 |
128 virtual bool GetPosition(int64* position_out) { | 139 virtual bool GetPosition(int64* position_out) { |
129 *position_out = position_; | 140 *position_out = position_; |
130 return true; | 141 return true; |
131 } | 142 } |
132 | 143 |
133 virtual bool SetPosition(int64 position) { | 144 virtual bool SetPosition(int64 position) { |
134 EXPECT_GE(position, 0u); | |
135 EXPECT_LE(position, config_->media_total_bytes); | |
136 if (position < 0u || position > config_->media_total_bytes) { | 145 if (position < 0u || position > config_->media_total_bytes) { |
137 return false; | 146 return false; |
138 } | 147 } |
139 position_ = position; | 148 position_ = position; |
140 return true; | 149 return true; |
141 } | 150 } |
142 | 151 |
143 virtual bool GetSize(int64* size_out) { | 152 virtual bool GetSize(int64* size_out) { |
144 *size_out = config_->media_total_bytes; | 153 if (config_->media_total_bytes >= 0) { |
| 154 *size_out = config_->media_total_bytes; |
| 155 return true; |
| 156 } |
145 return false; | 157 return false; |
146 } | 158 } |
147 | 159 |
| 160 // Simple position getter for unit testing. |
| 161 int64 position() const { return position_; } |
| 162 |
148 private: | 163 private: |
149 virtual ~MockDataSource() {} | 164 virtual ~MockDataSource() { |
| 165 if (deleted_) { |
| 166 *deleted_ = true; |
| 167 } |
| 168 } |
150 | 169 |
151 void TaskBehavior() { | 170 void TaskBehavior() { |
152 switch (config_->data_source_behavior) { | 171 switch (config_->data_source_behavior) { |
153 case MOCK_DATA_SOURCE_TASK_ERROR_POST_INIT: | 172 case MOCK_DATA_SOURCE_TASK_ERROR_POST_INIT: |
154 case MOCK_DATA_SOURCE_TASK_ERROR_PRE_INIT: | 173 case MOCK_DATA_SOURCE_TASK_ERROR_PRE_INIT: |
155 host_->Error(PIPELINE_ERROR_NETWORK); | 174 host_->Error(PIPELINE_ERROR_NETWORK); |
156 break; | 175 break; |
157 case MOCK_DATA_SOURCE_TASK_INIT: | 176 case MOCK_DATA_SOURCE_TASK_INIT: |
158 host_->InitializationComplete(); | 177 host_->InitializationComplete(); |
159 break; | 178 break; |
160 default: | 179 default: |
161 NOTREACHED(); | 180 NOTREACHED(); |
162 } | 181 } |
163 } | 182 } |
164 | 183 |
165 const MockFilterConfig* config_; | 184 const MockFilterConfig* config_; |
166 int64 position_; | 185 int64 position_; |
167 MediaFormat media_format_; | 186 MediaFormat media_format_; |
168 | 187 |
| 188 // Set to true inside the destructor. Used in FFmpegGlue unit tests for |
| 189 // testing proper reference counting. |
| 190 bool* deleted_; |
| 191 |
169 DISALLOW_COPY_AND_ASSIGN(MockDataSource); | 192 DISALLOW_COPY_AND_ASSIGN(MockDataSource); |
170 }; | 193 }; |
171 | 194 |
172 //------------------------------------------------------------------------------ | 195 //------------------------------------------------------------------------------ |
173 | 196 |
174 class MockDemuxer : public Demuxer { | 197 class MockDemuxer : public Demuxer { |
175 public: | 198 public: |
176 static FilterFactory* CreateFactory(const MockFilterConfig* config) { | 199 static FilterFactory* CreateFactory(const MockFilterConfig* config) { |
177 return new FilterFactoryImpl1<MockDemuxer, | 200 return new FilterFactoryImpl1<MockDemuxer, |
178 const MockFilterConfig*>(config); | 201 const MockFilterConfig*>(config); |
(...skipping 415 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
594 base::WaitableEvent event_; | 617 base::WaitableEvent event_; |
595 bool callback_success_status_; | 618 bool callback_success_status_; |
596 bool waiting_for_callback_; | 619 bool waiting_for_callback_; |
597 | 620 |
598 DISALLOW_COPY_AND_ASSIGN(InitializationHelper); | 621 DISALLOW_COPY_AND_ASSIGN(InitializationHelper); |
599 }; | 622 }; |
600 | 623 |
601 } // namespace media | 624 } // namespace media |
602 | 625 |
603 #endif // MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ | 626 #endif // MEDIA_BASE_MOCK_MEDIA_FILTERS_H_ |
OLD | NEW |