| // 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. |
| |
| #ifndef MEDIA_FILTERS_PIPELINE_INTEGRATION_TEST_BASE_H_ |
| #define MEDIA_FILTERS_PIPELINE_INTEGRATION_TEST_BASE_H_ |
| |
| #include "base/message_loop.h" |
| #include "base/md5.h" |
| #include "media/audio/null_audio_sink.h" |
| #include "media/base/filter_collection.h" |
| #include "media/base/pipeline.h" |
| #include "media/filters/chunk_demuxer.h" |
| #include "media/filters/video_renderer_base.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| |
| class FilePath; |
| |
| namespace media { |
| |
| class Decryptor; |
| |
| // Empty MD5 hash string. Used to verify empty audio or video tracks. |
| extern const char kNullHash[]; |
| |
| // Integration tests for Pipeline. Real demuxers, real decoders, and |
| // base renderer implementations are used to verify pipeline functionality. The |
| // renderers used in these tests rely heavily on the AudioRendererBase & |
| // VideoRendererBase implementations which contain a majority of the code used |
| // in the real AudioRendererImpl & SkCanvasVideoRenderer implementations used in |
| // the browser. The renderers in this test don't actually write data to a |
| // display or audio device. Both of these devices are simulated since they have |
| // little effect on verifying pipeline behavior and allow tests to run faster |
| // than real-time. |
| class PipelineIntegrationTestBase { |
| public: |
| PipelineIntegrationTestBase(); |
| virtual ~PipelineIntegrationTestBase(); |
| |
| bool WaitUntilOnEnded(); |
| PipelineStatus WaitUntilEndedOrError(); |
| bool Start(const FilePath& file_path, PipelineStatus expected_status); |
| // Enable playback with audio and video hashing enabled. Frame dropping and |
| // audio underflow will be disabled to ensure consistent hashes. |
| bool Start(const FilePath& file_path, PipelineStatus expected_status, |
| bool hashing_enabled); |
| // Initialize the pipeline and ignore any status updates. Useful for testing |
| // invalid audio/video clips which don't have deterministic results. |
| bool Start(const FilePath& file_path); |
| |
| void Play(); |
| void Pause(); |
| bool Seek(base::TimeDelta seek_time); |
| void Stop(); |
| bool WaitUntilCurrentTimeIsAfter(const base::TimeDelta& wait_time); |
| scoped_ptr<FilterCollection> CreateFilterCollection( |
| const FilePath& file_path); |
| |
| // Returns the MD5 hash of all video frames seen. Should only be called once |
| // after playback completes. First time hashes should be generated with |
| // --video-threads=1 to ensure correctness. Pipeline must have been started |
| // with hashing enabled. |
| std::string GetVideoHash(); |
| |
| // Returns the MD5 hash of all audio frames seen. Should only be called once |
| // after playback completes. Pipeline must have been started with hashing |
| // enabled. |
| std::string GetAudioHash(); |
| |
| protected: |
| MessageLoop message_loop_; |
| base::MD5Context md5_context_; |
| bool hashing_enabled_; |
| scoped_refptr<Pipeline> pipeline_; |
| scoped_refptr<VideoRendererBase> renderer_; |
| scoped_refptr<NullAudioSink> audio_sink_; |
| bool ended_; |
| PipelineStatus pipeline_status_; |
| |
| void OnStatusCallbackChecked(PipelineStatus expected_status, |
| PipelineStatus status); |
| void OnStatusCallback(PipelineStatus status); |
| PipelineStatusCB QuitOnStatusCB(PipelineStatus expected_status); |
| void OnEnded(PipelineStatus status); |
| void OnError(PipelineStatus status); |
| void QuitAfterCurrentTimeTask(const base::TimeDelta& quit_time); |
| scoped_ptr<FilterCollection> CreateFilterCollection( |
| const scoped_refptr<Demuxer>& demuxer, Decryptor* decryptor); |
| void SetDecryptor(Decryptor* decryptor, |
| const DecryptorReadyCB& decryptor_ready_cb); |
| void OnVideoRendererPaint(); |
| |
| MOCK_METHOD1(OnSetOpaque, void(bool)); |
| MOCK_METHOD1(OnBufferingState, void(Pipeline::BufferingState)); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_FILTERS_PIPELINE_INTEGRATION_TEST_BASE_H_ |