Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(525)

Side by Side Diff: media/test/pipeline_integration_test_base.h

Issue 2808583002: RELAND: Media Remoting end to end integration tests. (Closed)
Patch Set: Rebased. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « media/test/pipeline_integration_test.cc ('k') | media/test/pipeline_integration_test_base.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #ifndef MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_ 5 #ifndef MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_
6 #define MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_ 6 #define MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/md5.h" 11 #include "base/md5.h"
12 #include "base/message_loop/message_loop.h" 12 #include "base/message_loop/message_loop.h"
13 #include "base/test/scoped_task_scheduler.h" 13 #include "base/test/scoped_task_scheduler.h"
14 #include "media/audio/clockless_audio_sink.h" 14 #include "media/audio/clockless_audio_sink.h"
15 #include "media/audio/null_audio_sink.h" 15 #include "media/audio/null_audio_sink.h"
16 #include "media/base/demuxer.h" 16 #include "media/base/demuxer.h"
17 #include "media/base/null_video_sink.h" 17 #include "media/base/null_video_sink.h"
18 #include "media/base/pipeline_impl.h" 18 #include "media/base/pipeline_impl.h"
19 #include "media/base/pipeline_status.h" 19 #include "media/base/pipeline_status.h"
20 #include "media/base/text_track.h" 20 #include "media/base/text_track.h"
21 #include "media/base/text_track_config.h" 21 #include "media/base/text_track_config.h"
22 #include "media/base/video_frame.h" 22 #include "media/base/video_frame.h"
23 #include "media/renderers/video_renderer_impl.h" 23 #include "media/renderers/video_renderer_impl.h"
24 #include "testing/gmock/include/gmock/gmock.h" 24 #include "testing/gmock/include/gmock/gmock.h"
25 25
26 namespace media { 26 namespace media {
27 27
28 class CdmContext; 28 class FakeEncryptedMedia;
29 class MockMediaSource;
29 30
30 // Empty MD5 hash string. Used to verify empty video tracks. 31 // Empty MD5 hash string. Used to verify empty video tracks.
31 extern const char kNullVideoHash[]; 32 extern const char kNullVideoHash[];
32 33
33 // Empty hash string. Used to verify empty audio tracks. 34 // Empty hash string. Used to verify empty audio tracks.
34 extern const char kNullAudioHash[]; 35 extern const char kNullAudioHash[];
35 36
36 // Dummy tick clock which advances extremely quickly (1 minute every time 37 // Dummy tick clock which advances extremely quickly (1 minute every time
37 // NowTicks() is called). 38 // NowTicks() is called).
38 class DummyTickClock : public base::TickClock { 39 class DummyTickClock : public base::TickClock {
39 public: 40 public:
40 DummyTickClock() : now_() {} 41 DummyTickClock() : now_() {}
41 ~DummyTickClock() override {} 42 ~DummyTickClock() override {}
42 base::TimeTicks NowTicks() override; 43 base::TimeTicks NowTicks() override;
43 44
44 private: 45 private:
45 base::TimeTicks now_; 46 base::TimeTicks now_;
46 }; 47 };
47 48
49 class PipelineTestRendererFactory {
50 public:
51 virtual ~PipelineTestRendererFactory() {}
52 // Creates and returns a Renderer.
53 virtual std::unique_ptr<Renderer> CreateRenderer(
54 CreateVideoDecodersCB prepend_video_decoders_cb,
55 CreateAudioDecodersCB prepend_audio_decoders_cb) = 0;
56 };
57
48 // Integration tests for Pipeline. Real demuxers, real decoders, and 58 // Integration tests for Pipeline. Real demuxers, real decoders, and
49 // base renderer implementations are used to verify pipeline functionality. The 59 // base renderer implementations are used to verify pipeline functionality. The
50 // renderers used in these tests rely heavily on the AudioRendererBase & 60 // renderers used in these tests rely heavily on the AudioRendererBase &
51 // VideoRendererImpl implementations which contain a majority of the code used 61 // VideoRendererImpl implementations which contain a majority of the code used
52 // in the real AudioRendererImpl & SkCanvasVideoRenderer implementations used in 62 // in the real AudioRendererImpl & SkCanvasVideoRenderer implementations used in
53 // the browser. The renderers in this test don't actually write data to a 63 // the browser. The renderers in this test don't actually write data to a
54 // display or audio device. Both of these devices are simulated since they have 64 // display or audio device. Both of these devices are simulated since they have
55 // little effect on verifying pipeline behavior and allow tests to run faster 65 // little effect on verifying pipeline behavior and allow tests to run faster
56 // than real-time. 66 // than real-time.
57 class PipelineIntegrationTestBase : public Pipeline::Client { 67 class PipelineIntegrationTestBase : public Pipeline::Client {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 // Pipeline must have been started with clockless playback enabled. 129 // Pipeline must have been started with clockless playback enabled.
120 base::TimeDelta GetAudioTime(); 130 base::TimeDelta GetAudioTime();
121 131
122 // Sets a callback to handle EME "encrypted" event. Must be called to test 132 // Sets a callback to handle EME "encrypted" event. Must be called to test
123 // potentially encrypted media. 133 // potentially encrypted media.
124 void set_encrypted_media_init_data_cb( 134 void set_encrypted_media_init_data_cb(
125 const Demuxer::EncryptedMediaInitDataCB& encrypted_media_init_data_cb) { 135 const Demuxer::EncryptedMediaInitDataCB& encrypted_media_init_data_cb) {
126 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; 136 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb;
127 } 137 }
128 138
139 std::unique_ptr<Renderer> CreateRenderer(
140 CreateVideoDecodersCB prepend_video_decoders_cb,
141 CreateAudioDecodersCB prepend_audio_decoders_cb);
142
129 protected: 143 protected:
130 MediaLog media_log_; 144 MediaLog media_log_;
131 base::MessageLoop message_loop_; 145 base::MessageLoop message_loop_;
132 base::MD5Context md5_context_; 146 base::MD5Context md5_context_;
133 bool hashing_enabled_; 147 bool hashing_enabled_;
134 bool clockless_playback_; 148 bool clockless_playback_;
135 149
136 // TaskScheduler is used only for FFmpegDemuxer. 150 // TaskScheduler is used only for FFmpegDemuxer.
137 std::unique_ptr<base::test::ScopedTaskScheduler> task_scheduler_; 151 std::unique_ptr<base::test::ScopedTaskScheduler> task_scheduler_;
138 std::unique_ptr<Demuxer> demuxer_; 152 std::unique_ptr<Demuxer> demuxer_;
139 std::unique_ptr<DataSource> data_source_; 153 std::unique_ptr<DataSource> data_source_;
140 std::unique_ptr<PipelineImpl> pipeline_; 154 std::unique_ptr<PipelineImpl> pipeline_;
141 scoped_refptr<NullAudioSink> audio_sink_; 155 scoped_refptr<NullAudioSink> audio_sink_;
142 scoped_refptr<ClocklessAudioSink> clockless_audio_sink_; 156 scoped_refptr<ClocklessAudioSink> clockless_audio_sink_;
143 std::unique_ptr<NullVideoSink> video_sink_; 157 std::unique_ptr<NullVideoSink> video_sink_;
144 bool ended_; 158 bool ended_;
145 PipelineStatus pipeline_status_; 159 PipelineStatus pipeline_status_;
146 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_; 160 Demuxer::EncryptedMediaInitDataCB encrypted_media_init_data_cb_;
147 VideoPixelFormat last_video_frame_format_; 161 VideoPixelFormat last_video_frame_format_;
148 ColorSpace last_video_frame_color_space_; 162 ColorSpace last_video_frame_color_space_;
149 DummyTickClock dummy_clock_; 163 DummyTickClock dummy_clock_;
150 PipelineMetadata metadata_; 164 PipelineMetadata metadata_;
151 scoped_refptr<VideoFrame> last_frame_; 165 scoped_refptr<VideoFrame> last_frame_;
152 base::TimeDelta current_duration_; 166 base::TimeDelta current_duration_;
167 std::unique_ptr<PipelineTestRendererFactory> renderer_factory_;
153 168
154 PipelineStatus StartInternal( 169 PipelineStatus StartInternal(
155 std::unique_ptr<DataSource> data_source, 170 std::unique_ptr<DataSource> data_source,
156 CdmContext* cdm_context, 171 CdmContext* cdm_context,
157 uint8_t test_type, 172 uint8_t test_type,
158 CreateVideoDecodersCB prepend_video_decoders_cb = CreateVideoDecodersCB(), 173 CreateVideoDecodersCB prepend_video_decoders_cb = CreateVideoDecodersCB(),
159 CreateAudioDecodersCB prepend_audio_decoders_cb = 174 CreateAudioDecodersCB prepend_audio_decoders_cb =
160 CreateAudioDecodersCB()); 175 CreateAudioDecodersCB());
161 176
162 PipelineStatus StartWithFile( 177 PipelineStatus StartWithFile(
163 const std::string& filename, 178 const std::string& filename,
164 CdmContext* cdm_context, 179 CdmContext* cdm_context,
165 uint8_t test_type, 180 uint8_t test_type,
166 CreateVideoDecodersCB prepend_video_decoders_cb = CreateVideoDecodersCB(), 181 CreateVideoDecodersCB prepend_video_decoders_cb = CreateVideoDecodersCB(),
167 CreateAudioDecodersCB prepend_audio_decoders_cb = 182 CreateAudioDecodersCB prepend_audio_decoders_cb =
168 CreateAudioDecodersCB()); 183 CreateAudioDecodersCB());
169 184
185 PipelineStatus StartPipelineWithMediaSource(MockMediaSource* source);
186 PipelineStatus StartPipelineWithEncryptedMedia(
187 MockMediaSource* source,
188 FakeEncryptedMedia* encrypted_media);
189 PipelineStatus StartPipelineWithMediaSource(
190 MockMediaSource* source,
191 uint8_t test_type,
192 FakeEncryptedMedia* encrypted_media);
193
170 void OnSeeked(base::TimeDelta seek_time, PipelineStatus status); 194 void OnSeeked(base::TimeDelta seek_time, PipelineStatus status);
171 void OnStatusCallback(PipelineStatus status); 195 void OnStatusCallback(PipelineStatus status);
172 void DemuxerEncryptedMediaInitDataCB(EmeInitDataType type, 196 void DemuxerEncryptedMediaInitDataCB(EmeInitDataType type,
173 const std::vector<uint8_t>& init_data); 197 const std::vector<uint8_t>& init_data);
174 198
175 void DemuxerMediaTracksUpdatedCB(std::unique_ptr<MediaTracks> tracks); 199 void DemuxerMediaTracksUpdatedCB(std::unique_ptr<MediaTracks> tracks);
176 200
177 void QuitAfterCurrentTimeTask(const base::TimeDelta& quit_time); 201 void QuitAfterCurrentTimeTask(const base::TimeDelta& quit_time);
178 202
179 // Creates Demuxer and sets |demuxer_|. 203 // Creates Demuxer and sets |demuxer_|.
180 void CreateDemuxer(std::unique_ptr<DataSource> data_source); 204 void CreateDemuxer(std::unique_ptr<DataSource> data_source);
181 205
182 // Creates and returns a Renderer.
183 virtual std::unique_ptr<Renderer> CreateRenderer(
184 CreateVideoDecodersCB prepend_video_decoders_cb = CreateVideoDecodersCB(),
185 CreateAudioDecodersCB prepend_audio_decoders_cb =
186 CreateAudioDecodersCB());
187
188 void OnVideoFramePaint(const scoped_refptr<VideoFrame>& frame); 206 void OnVideoFramePaint(const scoped_refptr<VideoFrame>& frame);
189 207
190 void CheckDuration(); 208 void CheckDuration();
191 209
192 // Return the media start time from |demuxer_|. 210 // Return the media start time from |demuxer_|.
193 base::TimeDelta GetStartTime(); 211 base::TimeDelta GetStartTime();
194 212
195 MOCK_METHOD1(DecryptorAttached, void(bool)); 213 MOCK_METHOD1(DecryptorAttached, void(bool));
196 // Pipeline::Client overrides. 214 // Pipeline::Client overrides.
197 void OnError(PipelineStatus status) override; 215 void OnError(PipelineStatus status) override;
198 void OnEnded() override; 216 void OnEnded() override;
199 MOCK_METHOD1(OnMetadata, void(PipelineMetadata)); 217 MOCK_METHOD1(OnMetadata, void(PipelineMetadata));
200 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState)); 218 MOCK_METHOD1(OnBufferingStateChange, void(BufferingState));
201 MOCK_METHOD0(OnDurationChange, void()); 219 MOCK_METHOD0(OnDurationChange, void());
202 MOCK_METHOD2(OnAddTextTrack, 220 MOCK_METHOD2(OnAddTextTrack,
203 void(const TextTrackConfig& config, 221 void(const TextTrackConfig& config,
204 const AddTextTrackDoneCB& done_cb)); 222 const AddTextTrackDoneCB& done_cb));
205 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void)); 223 MOCK_METHOD0(OnWaitingForDecryptionKey, void(void));
206 MOCK_METHOD1(OnVideoNaturalSizeChange, void(const gfx::Size&)); 224 MOCK_METHOD1(OnVideoNaturalSizeChange, void(const gfx::Size&));
207 MOCK_METHOD1(OnVideoOpacityChange, void(bool)); 225 MOCK_METHOD1(OnVideoOpacityChange, void(bool));
208 MOCK_METHOD0(OnVideoAverageKeyframeDistanceUpdate, void()); 226 MOCK_METHOD0(OnVideoAverageKeyframeDistanceUpdate, void());
227
228 private:
229 DISALLOW_COPY_AND_ASSIGN(PipelineIntegrationTestBase);
209 }; 230 };
210 231
211 } // namespace media 232 } // namespace media
212 233
213 #endif // MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_ 234 #endif // MEDIA_TEST_PIPELINE_INTEGRATION_TEST_BASE_H_
OLDNEW
« no previous file with comments | « media/test/pipeline_integration_test.cc ('k') | media/test/pipeline_integration_test_base.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698