Index: chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc |
diff --git a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc |
index 89cd79a41f5a704dc76d94461e8b44a76cbd6825..d569e6cac13c0b8dbb255d252d540f023b3c12a2 100644 |
--- a/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc |
+++ b/chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc |
@@ -10,6 +10,8 @@ |
namespace chromecast { |
namespace media { |
+using DecoderType = MediaPipelineBackendManager::DecoderType; |
+ |
MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( |
std::unique_ptr<MediaPipelineBackend> backend, |
int stream_type, |
@@ -20,12 +22,18 @@ MediaPipelineBackendWrapper::MediaPipelineBackendWrapper( |
audio_decoder_wrapper_(nullptr), |
stream_type_volume_(stream_type_volume), |
is_initialized_(false), |
+ have_video_decoder_(false), |
backend_manager_(backend_manager) { |
DCHECK(backend_); |
} |
MediaPipelineBackendWrapper::~MediaPipelineBackendWrapper() { |
backend_manager_->OnMediaPipelineBackendDestroyed(this); |
+ |
+ if (audio_decoder_wrapper_) |
+ backend_manager_->DecrementDecoderCount(DecoderType::AUDIO_DECODER); |
+ if (have_video_decoder_) |
+ backend_manager_->DecrementDecoderCount(DecoderType::VIDEO_DECODER); |
} |
MediaPipelineBackend::AudioDecoder* |
@@ -34,6 +42,9 @@ MediaPipelineBackendWrapper::CreateAudioDecoder() { |
if (audio_decoder_wrapper_) |
return nullptr; |
+ if (!backend_manager_->IncrementDecoderCount(DecoderType::AUDIO_DECODER)) |
+ return nullptr; |
+ |
audio_decoder_wrapper_.reset( |
new AudioDecoderWrapper(backend_->CreateAudioDecoder())); |
return audio_decoder_wrapper_.get(); |
@@ -42,6 +53,12 @@ MediaPipelineBackendWrapper::CreateAudioDecoder() { |
MediaPipelineBackend::VideoDecoder* |
MediaPipelineBackendWrapper::CreateVideoDecoder() { |
DCHECK(!is_initialized_); |
+ DCHECK(!have_video_decoder_); |
+ |
+ if (!backend_manager_->IncrementDecoderCount(DecoderType::VIDEO_DECODER)) |
+ return nullptr; |
+ have_video_decoder_ = true; |
+ |
return backend_->CreateVideoDecoder(); |
} |