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

Unified Diff: chromecast/media/cma/test/cma_end_to_end_test.cc

Issue 1372393007: [Chromecast] Upgrade to new CMA backend API (Closed) Base URL: https://chromium.googlesource.com/chromium/src@master
Patch Set: Fix end_to_end test + address slan comments Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chromecast/media/cma/test/cma_end_to_end_test.cc
diff --git a/chromecast/media/cma/test/cma_end_to_end_test.cc b/chromecast/media/cma/test/cma_end_to_end_test.cc
index 70483e6d9a0b74d35068e1a712786caec94da5ad..471c6e620755f7698e9ab4da6d9fc5abfbbbdbab 100644
--- a/chromecast/media/cma/test/cma_end_to_end_test.cc
+++ b/chromecast/media/cma/test/cma_end_to_end_test.cc
@@ -11,8 +11,14 @@
#include "chromecast/base/task_runner_impl.h"
#include "chromecast/media/cma/backend/media_pipeline_backend_default.h"
#include "chromecast/media/cma/base/buffering_defs.h"
+#include "chromecast/media/cma/base/coded_frame_provider.h"
#include "chromecast/media/cma/filters/cma_renderer.h"
+#include "chromecast/media/cma/pipeline/av_pipeline_client.h"
#include "chromecast/media/cma/pipeline/media_pipeline_impl.h"
+#include "chromecast/media/cma/pipeline/video_pipeline_client.h"
+#include "chromecast/renderer/media/audio_pipeline.h"
+#include "chromecast/renderer/media/renderer_media_pipeline.h"
+#include "chromecast/renderer/media/video_pipeline.h"
#include "gpu/command_buffer/client/gles2_interface_stub.h"
#include "media/base/demuxer_stream_provider.h"
#include "media/base/fake_demuxer_stream.h"
@@ -26,6 +32,163 @@ namespace media {
namespace {
+class FakeRendererMediaPipeline : public RendererMediaPipeline {
+ public:
+ FakeRendererMediaPipeline(scoped_ptr<MediaPipelineImpl> media_pipeline)
+ : media_pipeline_(media_pipeline.Pass()),
+ audio_pipeline_(new FakeAudioPipeline(media_pipeline_.get())),
+ video_pipeline_(new FakeVideoPipeline(media_pipeline_.get())) {}
+
+ ~FakeRendererMediaPipeline() override {}
+
+ // RendererMediaPipeline implementation:
+ void SetClient(const MediaPipelineClient& client) override {
+ media_pipeline_->SetClient(client);
+ }
+
+ void SetCdm(int cdm_id) override { media_pipeline_->SetCdm(cdm_id); }
+
+ AudioPipeline* GetAudioPipeline() const override {
+ return audio_pipeline_.get();
+ }
+
+ VideoPipeline* GetVideoPipeline() const override {
+ return video_pipeline_.get();
+ }
+
+ void InitializeAudio(const ::media::AudioDecoderConfig& config,
+ scoped_ptr<CodedFrameProvider> frame_provider,
+ const ::media::PipelineStatusCB& status_cb) override {
+ audio_pipeline_->InitializeAudio(config, frame_provider.Pass(), status_cb);
+ }
+
+ void InitializeVideo(const std::vector< ::media::VideoDecoderConfig>& configs,
+ scoped_ptr<CodedFrameProvider> frame_provider,
+ const ::media::PipelineStatusCB& status_cb) override {
+ video_pipeline_->InitializeVideo(configs, frame_provider.Pass(), status_cb);
+ }
+
+ void StartPlayingFrom(base::TimeDelta time) override {
+ media_pipeline_->StartPlayingFrom(time);
+ }
+
+ void Flush(const ::media::PipelineStatusCB& status_cb) override {
+ media_pipeline_->Flush(status_cb);
+ }
+
+ void Stop() override { media_pipeline_->Stop(); }
+
+ void SetPlaybackRate(double playback_rate) override {
+ media_pipeline_->SetPlaybackRate(playback_rate);
+ }
+
+ private:
+ class FakeAudioPipeline : public AudioPipeline {
+ public:
+ FakeAudioPipeline(MediaPipelineImpl* media_pipeline)
+ : media_pipeline_(media_pipeline),
+ client_set_(false),
+ initialized_(false) {
+ DCHECK(media_pipeline_);
+ }
+
+ ~FakeAudioPipeline() override {}
+
+ void InitializeAudio(const ::media::AudioDecoderConfig& config,
+ scoped_ptr<CodedFrameProvider> frame_provider,
+ const ::media::PipelineStatusCB& status_cb) {
+ config_ = config;
+ frame_provider_ = frame_provider.Pass();
+ status_cb_ = status_cb;
+ initialized_ = true;
+ if (client_set_) {
+ media_pipeline_->InitializeAudio(
+ config_, client_, frame_provider_.Pass(), status_cb_);
+ }
+ }
+
+ // AudioPipeline implementation:
+ void SetClient(const AvPipelineClient& client) override {
+ client_ = client;
+ client_set_ = true;
+ if (initialized_) {
+ media_pipeline_->InitializeAudio(
+ config_, client_, frame_provider_.Pass(), status_cb_);
+ }
+ }
+
+ void SetVolume(float volume) override {
+ media_pipeline_->SetVolume(volume);
+ }
+
+ private:
+ MediaPipelineImpl* media_pipeline_;
+ bool client_set_;
+ bool initialized_;
+
+ AvPipelineClient client_;
+ ::media::AudioDecoderConfig config_;
+ scoped_ptr<CodedFrameProvider> frame_provider_;
+ ::media::PipelineStatusCB status_cb_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeAudioPipeline);
+ };
+
+ class FakeVideoPipeline : public VideoPipeline {
+ public:
+ FakeVideoPipeline(MediaPipelineImpl* media_pipeline)
+ : media_pipeline_(media_pipeline),
+ client_set_(false),
+ initialized_(false) {
+ DCHECK(media_pipeline_);
+ }
+
+ ~FakeVideoPipeline() override {}
+
+ void InitializeVideo(
+ const std::vector< ::media::VideoDecoderConfig>& configs,
+ scoped_ptr<CodedFrameProvider> frame_provider,
+ const ::media::PipelineStatusCB& status_cb) {
+ configs_ = configs;
+ frame_provider_ = frame_provider.Pass();
+ status_cb_ = status_cb;
+ initialized_ = true;
+ if (client_set_) {
+ media_pipeline_->InitializeVideo(
+ configs_, client_, frame_provider_.Pass(), status_cb_);
+ }
+ }
+
+ // VideoPipeline implementation:
+ void SetClient(const VideoPipelineClient& client) override {
+ client_ = client;
+ client_set_ = true;
+ if (initialized_) {
+ media_pipeline_->InitializeVideo(
+ configs_, client_, frame_provider_.Pass(), status_cb_);
+ }
+ }
+
+ private:
+ MediaPipelineImpl* media_pipeline_;
+ bool client_set_;
+ bool initialized_;
+
+ VideoPipelineClient client_;
+ std::vector< ::media::VideoDecoderConfig> configs_;
+ scoped_ptr<CodedFrameProvider> frame_provider_;
+ ::media::PipelineStatusCB status_cb_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeVideoPipeline);
+ };
+
+ const scoped_ptr<MediaPipelineImpl> media_pipeline_;
+ scoped_ptr<FakeAudioPipeline> audio_pipeline_;
+ scoped_ptr<FakeVideoPipeline> video_pipeline_;
+
+ DISALLOW_COPY_AND_ASSIGN(FakeRendererMediaPipeline);
+};
+
class CmaEndToEndTest : public testing::Test {
public:
CmaEndToEndTest() {}
@@ -40,9 +203,8 @@ class CmaEndToEndTest : public testing::Test {
scoped_ptr<MediaPipelineImpl> media_pipeline(new MediaPipelineImpl());
task_runner_.reset(new TaskRunnerImpl());
- MediaPipelineDeviceParams params(task_runner_.get());
scoped_ptr<MediaPipelineBackend> backend =
- make_scoped_ptr(new MediaPipelineBackendDefault(params));
+ make_scoped_ptr(new MediaPipelineBackendDefault());
gles2_.reset(new gpu::gles2::GLES2InterfaceStub());
mock_gpu_factories_ = new ::media::MockGpuVideoAcceleratorFactories();
@@ -52,8 +214,11 @@ class CmaEndToEndTest : public testing::Test {
media_pipeline->Initialize(kLoadTypeMediaSource, backend.Pass());
- renderer_.reset(new CmaRenderer(media_pipeline.Pass(), null_sink_.get(),
- mock_gpu_factories_));
+ scoped_ptr<RendererMediaPipeline> renderer_media_pipeline(
+ new FakeRendererMediaPipeline(media_pipeline.Pass()));
+
+ renderer_.reset(new CmaRenderer(
+ renderer_media_pipeline.Pass(), null_sink_.get(), mock_gpu_factories_));
}
void TearDown() override { message_loop_.RunUntilIdle(); }
@@ -101,6 +266,5 @@ TEST_F(CmaEndToEndTest, TestInitialization) {
EXPECT_CALL(mock_, OnInitialized(::media::PIPELINE_OK));
}
-
} // namespace media
} // namespace chromecast

Powered by Google App Engine
This is Rietveld 408576698