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 |