| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 #include "chromecast/media/cma/backend/media_pipeline_backend_wrapper.h" | 5 #include "chromecast/media/cma/backend/media_pipeline_backend_wrapper.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "chromecast/media/cma/backend/media_pipeline_backend_manager.h" | 8 #include "chromecast/media/cma/backend/media_pipeline_backend_manager.h" |
| 9 | 9 |
| 10 namespace chromecast { | 10 namespace chromecast { |
| 11 namespace media { | 11 namespace media { |
| 12 | 12 |
| 13 using DecoderType = MediaPipelineBackendManager::DecoderType; |
| 14 |
| 13 MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( | 15 MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( |
| 14 std::unique_ptr<MediaPipelineBackend> backend, | 16 std::unique_ptr<MediaPipelineBackend> backend, |
| 15 int stream_type, | 17 int stream_type, |
| 16 float stream_type_volume, | 18 float stream_type_volume, |
| 17 MediaPipelineBackendManager* backend_manager) | 19 MediaPipelineBackendManager* backend_manager) |
| 18 : backend_(std::move(backend)), | 20 : backend_(std::move(backend)), |
| 19 stream_type_(stream_type), | 21 stream_type_(stream_type), |
| 20 audio_decoder_wrapper_(nullptr), | 22 audio_decoder_wrapper_(nullptr), |
| 21 stream_type_volume_(stream_type_volume), | 23 stream_type_volume_(stream_type_volume), |
| 22 is_initialized_(false), | 24 is_initialized_(false), |
| 25 have_video_decoder_(false), |
| 23 backend_manager_(backend_manager) { | 26 backend_manager_(backend_manager) { |
| 24 DCHECK(backend_); | 27 DCHECK(backend_); |
| 25 } | 28 } |
| 26 | 29 |
| 27 MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { | 30 MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { |
| 28 backend_manager_->OnMediaPipelineBackendDestroyed(this); | 31 backend_manager_->OnMediaPipelineBackendDestroyed(this); |
| 32 |
| 33 if (audio_decoder_wrapper_) |
| 34 backend_manager_->DecrementDecoderCount(DecoderType::AUDIO_DECODER); |
| 35 if (have_video_decoder_) |
| 36 backend_manager_->DecrementDecoderCount(DecoderType::VIDEO_DECODER); |
| 29 } | 37 } |
| 30 | 38 |
| 31 MediaPipelineBackend::AudioDecoder* | 39 MediaPipelineBackend::AudioDecoder* |
| 32 MediaPipelineBackendWrapper::CreateAudioDecoder() { | 40 MediaPipelineBackendWrapper::CreateAudioDecoder() { |
| 33 DCHECK(!is_initialized_); | 41 DCHECK(!is_initialized_); |
| 34 if (audio_decoder_wrapper_) | 42 if (audio_decoder_wrapper_) |
| 35 return nullptr; | 43 return nullptr; |
| 36 | 44 |
| 45 if (!backend_manager_->IncrementDecoderCount(DecoderType::AUDIO_DECODER)) |
| 46 return nullptr; |
| 47 |
| 37 audio_decoder_wrapper_.reset( | 48 audio_decoder_wrapper_.reset( |
| 38 new AudioDecoderWrapper(backend_->CreateAudioDecoder())); | 49 new AudioDecoderWrapper(backend_->CreateAudioDecoder())); |
| 39 return audio_decoder_wrapper_.get(); | 50 return audio_decoder_wrapper_.get(); |
| 40 } | 51 } |
| 41 | 52 |
| 42 MediaPipelineBackend::VideoDecoder* | 53 MediaPipelineBackend::VideoDecoder* |
| 43 MediaPipelineBackendWrapper::CreateVideoDecoder() { | 54 MediaPipelineBackendWrapper::CreateVideoDecoder() { |
| 44 DCHECK(!is_initialized_); | 55 DCHECK(!is_initialized_); |
| 56 DCHECK(!have_video_decoder_); |
| 57 |
| 58 if (!backend_manager_->IncrementDecoderCount(DecoderType::VIDEO_DECODER)) |
| 59 return nullptr; |
| 60 have_video_decoder_ = true; |
| 61 |
| 45 return backend_->CreateVideoDecoder(); | 62 return backend_->CreateVideoDecoder(); |
| 46 } | 63 } |
| 47 | 64 |
| 48 bool MediaPipelineBackendWrapper::Initialize() { | 65 bool MediaPipelineBackendWrapper::Initialize() { |
| 49 DCHECK(!is_initialized_); | 66 DCHECK(!is_initialized_); |
| 50 is_initialized_ = backend_->Initialize(); | 67 is_initialized_ = backend_->Initialize(); |
| 51 if (is_initialized_ && audio_decoder_wrapper_) | 68 if (is_initialized_ && audio_decoder_wrapper_) |
| 52 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); | 69 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); |
| 53 | 70 |
| 54 return is_initialized_; | 71 return is_initialized_; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 84 | 101 |
| 85 void MediaPipelineBackendWrapper::SetStreamTypeVolume( | 102 void MediaPipelineBackendWrapper::SetStreamTypeVolume( |
| 86 float stream_type_volume) { | 103 float stream_type_volume) { |
| 87 stream_type_volume_ = stream_type_volume; | 104 stream_type_volume_ = stream_type_volume; |
| 88 if (is_initialized_ && audio_decoder_wrapper_) | 105 if (is_initialized_ && audio_decoder_wrapper_) |
| 89 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); | 106 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); |
| 90 } | 107 } |
| 91 | 108 |
| 92 } // namespace media | 109 } // namespace media |
| 93 } // namespace chromecast | 110 } // namespace chromecast |
| OLD | NEW |