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

Side by Side Diff: chromecast/media/cma/backend/media_pipeline_backend_wrapper.cc

Issue 2173593002: [Chromecast] Limit number of concurrent audio and video decoders (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use enum for decoder type Created 4 years, 5 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 unified diff | Download patch
« no previous file with comments | « chromecast/media/cma/backend/media_pipeline_backend_wrapper.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
OLDNEW
« no previous file with comments | « chromecast/media/cma/backend/media_pipeline_backend_wrapper.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698