Chromium Code Reviews| 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 MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( | 13 MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( |
| 14 std::unique_ptr<MediaPipelineBackend> backend, | 14 std::unique_ptr<MediaPipelineBackend> backend, |
| 15 int stream_type, | 15 int stream_type, |
| 16 float stream_type_volume, | 16 float stream_type_volume, |
| 17 MediaPipelineBackendManager* backend_manager) | 17 MediaPipelineBackendManager* backend_manager) |
| 18 : backend_(std::move(backend)), | 18 : backend_(std::move(backend)), |
| 19 stream_type_(stream_type), | 19 stream_type_(stream_type), |
| 20 audio_decoder_wrapper_(nullptr), | 20 audio_decoder_wrapper_(nullptr), |
| 21 stream_type_volume_(stream_type_volume), | 21 stream_type_volume_(stream_type_volume), |
| 22 is_initialized_(false), | 22 is_initialized_(false), |
| 23 have_video_decoder_(false), | |
| 23 backend_manager_(backend_manager) { | 24 backend_manager_(backend_manager) { |
| 24 DCHECK(backend_); | 25 DCHECK(backend_); |
| 25 } | 26 } |
| 26 | 27 |
| 27 MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { | 28 MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { |
| 28 backend_manager_->OnMediaPipelineBackendDestroyed(this); | 29 backend_manager_->OnMediaPipelineBackendDestroyed(this); |
| 30 | |
| 31 if (audio_decoder_wrapper_) | |
| 32 backend_manager_->DecrementAudioDecoderCount(); | |
| 33 if (have_video_decoder_) | |
| 34 backend_manager_->DecrementVideoDecoderCount(); | |
|
kmackay
2016/07/22 16:50:07
Can't we have multiple video decoders (for DolbyVi
kmackay
2016/07/22 16:53:08
I think, since the API allows you to create multip
halliwell
2016/07/22 17:16:29
DV is handled by a single video decoder. You can
halliwell
2016/07/22 17:16:29
Although the API does, the implementation doesn't
| |
| 29 } | 35 } |
| 30 | 36 |
| 31 MediaPipelineBackend::AudioDecoder* | 37 MediaPipelineBackend::AudioDecoder* |
| 32 MediaPipelineBackendWrapper::CreateAudioDecoder() { | 38 MediaPipelineBackendWrapper::CreateAudioDecoder() { |
| 33 DCHECK(!is_initialized_); | 39 DCHECK(!is_initialized_); |
| 34 if (audio_decoder_wrapper_) | 40 if (audio_decoder_wrapper_) |
| 35 return nullptr; | 41 return nullptr; |
| 36 | 42 |
| 43 if (!backend_manager_->IncrementAudioDecoderCount()) | |
| 44 return nullptr; | |
| 45 | |
| 37 audio_decoder_wrapper_.reset( | 46 audio_decoder_wrapper_.reset( |
| 38 new AudioDecoderWrapper(backend_->CreateAudioDecoder())); | 47 new AudioDecoderWrapper(backend_->CreateAudioDecoder())); |
| 39 return audio_decoder_wrapper_.get(); | 48 return audio_decoder_wrapper_.get(); |
| 40 } | 49 } |
| 41 | 50 |
| 42 MediaPipelineBackend::VideoDecoder* | 51 MediaPipelineBackend::VideoDecoder* |
| 43 MediaPipelineBackendWrapper::CreateVideoDecoder() { | 52 MediaPipelineBackendWrapper::CreateVideoDecoder() { |
| 44 DCHECK(!is_initialized_); | 53 DCHECK(!is_initialized_); |
| 54 if (!backend_manager_->IncrementVideoDecoderCount()) | |
| 55 return nullptr; | |
| 56 have_video_decoder_ = true; | |
| 57 | |
| 45 return backend_->CreateVideoDecoder(); | 58 return backend_->CreateVideoDecoder(); |
| 46 } | 59 } |
| 47 | 60 |
| 48 bool MediaPipelineBackendWrapper::Initialize() { | 61 bool MediaPipelineBackendWrapper::Initialize() { |
| 49 DCHECK(!is_initialized_); | 62 DCHECK(!is_initialized_); |
| 50 is_initialized_ = backend_->Initialize(); | 63 is_initialized_ = backend_->Initialize(); |
| 51 if (is_initialized_ && audio_decoder_wrapper_) | 64 if (is_initialized_ && audio_decoder_wrapper_) |
| 52 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); | 65 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); |
| 53 | 66 |
| 54 return is_initialized_; | 67 return is_initialized_; |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 84 | 97 |
| 85 void MediaPipelineBackendWrapper::SetStreamTypeVolume( | 98 void MediaPipelineBackendWrapper::SetStreamTypeVolume( |
| 86 float stream_type_volume) { | 99 float stream_type_volume) { |
| 87 stream_type_volume_ = stream_type_volume; | 100 stream_type_volume_ = stream_type_volume; |
| 88 if (is_initialized_ && audio_decoder_wrapper_) | 101 if (is_initialized_ && audio_decoder_wrapper_) |
| 89 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); | 102 audio_decoder_wrapper_->SetStreamTypeVolume(stream_type_volume_); |
| 90 } | 103 } |
| 91 | 104 |
| 92 } // namespace media | 105 } // namespace media |
| 93 } // namespace chromecast | 106 } // namespace chromecast |
| OLD | NEW |