Index: media/filters/pipeline_integration_test_base.cc |
diff --git a/media/filters/pipeline_integration_test_base.cc b/media/filters/pipeline_integration_test_base.cc |
index 3f0910a2b8b2a4180573d4aefc609cfa5b8ed6a9..1bcaab9a93d314fac5ec9937106f0b968e4872df 100644 |
--- a/media/filters/pipeline_integration_test_base.cc |
+++ b/media/filters/pipeline_integration_test_base.cc |
@@ -11,9 +11,11 @@ |
#include "media/filters/chunk_demuxer.h" |
#include "media/filters/ffmpeg_audio_decoder.h" |
#include "media/filters/ffmpeg_demuxer.h" |
+#include "media/filters/ffmpeg_text_decoder.h" |
#include "media/filters/ffmpeg_video_decoder.h" |
#include "media/filters/file_data_source.h" |
#include "media/filters/opus_audio_decoder.h" |
+#include "media/filters/text_renderer_impl.h" |
#include "media/filters/vpx_video_decoder.h" |
using ::testing::AnyNumber; |
@@ -71,6 +73,20 @@ void PipelineIntegrationTestBase::DemuxerNeedKeyCB( |
need_key_cb_.Run(std::string(), type, init_data); |
} |
+void PipelineIntegrationTestBase::OnFFmpegTextTrackCB( |
+ media::TextKind kind, |
+ const std::string& label, |
+ const std::string& language, |
+ int index) { |
+ EXPECT_GE(index, 0); |
+ |
+ typedef std::pair<TextTracks::iterator, bool> result_t; |
+ result_t result = ffmpeg_text_tracks_.insert(index); |
+ EXPECT_TRUE(result.second); |
+ ASSERT_NE(result.first, ffmpeg_text_tracks_.end()); |
+ EXPECT_EQ(*result.first, index); |
+} |
+ |
void PipelineIntegrationTestBase::OnEnded() { |
DCHECK(!ended_); |
ended_ = true; |
@@ -212,10 +228,14 @@ PipelineIntegrationTestBase::CreateFilterCollection( |
Demuxer::NeedKeyCB need_key_cb = base::Bind( |
&PipelineIntegrationTestBase::DemuxerNeedKeyCB, base::Unretained(this)); |
+ media::FFmpegAddTextTrackCB add_text_track_cb = base::Bind( |
+ &PipelineIntegrationTestBase::OnFFmpegTextTrackCB, |
+ base::Unretained(this)); |
scoped_ptr<Demuxer> demuxer( |
new FFmpegDemuxer(message_loop_.message_loop_proxy(), |
data_source_.get(), |
need_key_cb, |
+ add_text_track_cb, |
new MediaLog())); |
return CreateFilterCollection(demuxer.Pass(), decryptor); |
} |
@@ -280,6 +300,17 @@ PipelineIntegrationTestBase::CreateFilterCollection( |
scoped_ptr<AudioRenderer> audio_renderer(audio_renderer_impl); |
collection->SetAudioRenderer(audio_renderer.Pass()); |
+ scoped_ptr<TextDecoder> text_decoder( |
+ new FFmpegTextDecoder(message_loop_.message_loop_proxy())); |
+ |
+ scoped_ptr<TextRenderer> text_renderer( |
+ new TextRendererImpl( |
+ message_loop_.message_loop_proxy(), |
+ text_decoder.Pass(), |
+ base::Bind(&PipelineIntegrationTestBase::OnCueReady, |
+ base::Unretained(this)))); |
+ collection->SetTextRenderer(text_renderer.Pass()); |
+ |
return collection.Pass(); |
} |
@@ -297,6 +328,15 @@ void PipelineIntegrationTestBase::OnVideoRendererPaint( |
frame->HashFrameForTesting(&md5_context_); |
} |
+void PipelineIntegrationTestBase::OnCueReady( |
+ int index, |
+ const scoped_refptr<media::TextBuffer>& text_buffer) { |
+ EXPECT_GE(index, 0); |
+ |
+ TextTracks::iterator it = ffmpeg_text_tracks_.find(index); |
+ EXPECT_NE(it, ffmpeg_text_tracks_.end()); |
+} |
+ |
std::string PipelineIntegrationTestBase::GetVideoHash() { |
DCHECK(hashing_enabled_); |
base::MD5Digest digest; |