| 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 "media/mojo/services/mojo_audio_decoder_service.h" | 5 #include "media/mojo/services/mojo_audio_decoder_service.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
| 9 #include "base/logging.h" | 9 #include "base/logging.h" |
| 10 #include "media/base/cdm_context.h" | 10 #include "media/base/cdm_context.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 21 mojo::InterfaceRequest<mojom::AudioDecoder> request) | 21 mojo::InterfaceRequest<mojom::AudioDecoder> request) |
| 22 : binding_(this, std::move(request)), | 22 : binding_(this, std::move(request)), |
| 23 mojo_cdm_service_context_(mojo_cdm_service_context), | 23 mojo_cdm_service_context_(mojo_cdm_service_context), |
| 24 decoder_(std::move(decoder)), | 24 decoder_(std::move(decoder)), |
| 25 weak_factory_(this) { | 25 weak_factory_(this) { |
| 26 weak_this_ = weak_factory_.GetWeakPtr(); | 26 weak_this_ = weak_factory_.GetWeakPtr(); |
| 27 } | 27 } |
| 28 | 28 |
| 29 MojoAudioDecoderService::~MojoAudioDecoderService() {} | 29 MojoAudioDecoderService::~MojoAudioDecoderService() {} |
| 30 | 30 |
| 31 void MojoAudioDecoderService::Initialize(mojom::AudioDecoderClientPtr client, | 31 void MojoAudioDecoderService::Initialize( |
| 32 mojom::AudioDecoderConfigPtr config, | 32 mojom::AudioDecoderClientAssociatedPtrInfo client, |
| 33 int32_t cdm_id, | 33 mojom::AudioDecoderConfigPtr config, |
| 34 const InitializeCallback& callback) { | 34 int32_t cdm_id, |
| 35 const InitializeCallback& callback) { |
| 35 DVLOG(1) << __FUNCTION__ << " " | 36 DVLOG(1) << __FUNCTION__ << " " |
| 36 << config.To<media::AudioDecoderConfig>().AsHumanReadableString(); | 37 << config.To<media::AudioDecoderConfig>().AsHumanReadableString(); |
| 37 | 38 |
| 38 // Get CdmContext from cdm_id if the stream is encrypted. | 39 // Get CdmContext from cdm_id if the stream is encrypted. |
| 39 CdmContext* cdm_context = nullptr; | 40 CdmContext* cdm_context = nullptr; |
| 40 scoped_refptr<MediaKeys> cdm; | 41 scoped_refptr<MediaKeys> cdm; |
| 41 if (config.To<media::AudioDecoderConfig>().is_encrypted()) { | 42 if (config.To<media::AudioDecoderConfig>().is_encrypted()) { |
| 42 if (!mojo_cdm_service_context_) { | 43 if (!mojo_cdm_service_context_) { |
| 43 DVLOG(1) << "CDM service context not available."; | 44 DVLOG(1) << "CDM service context not available."; |
| 44 callback.Run(false, false); | 45 callback.Run(false, false); |
| 45 return; | 46 return; |
| 46 } | 47 } |
| 47 | 48 |
| 48 cdm = mojo_cdm_service_context_->GetCdm(cdm_id); | 49 cdm = mojo_cdm_service_context_->GetCdm(cdm_id); |
| 49 if (!cdm) { | 50 if (!cdm) { |
| 50 DVLOG(1) << "CDM not found for CDM id: " << cdm_id; | 51 DVLOG(1) << "CDM not found for CDM id: " << cdm_id; |
| 51 callback.Run(false, false); | 52 callback.Run(false, false); |
| 52 return; | 53 return; |
| 53 } | 54 } |
| 54 | 55 |
| 55 cdm_context = cdm->GetCdmContext(); | 56 cdm_context = cdm->GetCdmContext(); |
| 56 if (!cdm_context) { | 57 if (!cdm_context) { |
| 57 DVLOG(1) << "CDM context not available for CDM id: " << cdm_id; | 58 DVLOG(1) << "CDM context not available for CDM id: " << cdm_id; |
| 58 callback.Run(false, false); | 59 callback.Run(false, false); |
| 59 return; | 60 return; |
| 60 } | 61 } |
| 61 } | 62 } |
| 62 | 63 |
| 63 client_ = std::move(client); | 64 client_.Bind(std::move(client)); |
| 64 | 65 |
| 65 decoder_->Initialize( | 66 decoder_->Initialize( |
| 66 config.To<media::AudioDecoderConfig>(), cdm_context, | 67 config.To<media::AudioDecoderConfig>(), cdm_context, |
| 67 base::Bind(&MojoAudioDecoderService::OnInitialized, weak_this_, callback, | 68 base::Bind(&MojoAudioDecoderService::OnInitialized, weak_this_, callback, |
| 68 cdm), | 69 cdm), |
| 69 base::Bind(&MojoAudioDecoderService::OnAudioBufferReady, weak_this_)); | 70 base::Bind(&MojoAudioDecoderService::OnAudioBufferReady, weak_this_)); |
| 70 } | 71 } |
| 71 | 72 |
| 72 void MojoAudioDecoderService::SetDataSource( | 73 void MojoAudioDecoderService::SetDataSource( |
| 73 mojo::ScopedDataPipeConsumerHandle receive_pipe) { | 74 mojo::ScopedDataPipeConsumerHandle receive_pipe) { |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 126 | 127 |
| 127 void MojoAudioDecoderService::OnAudioBufferReady( | 128 void MojoAudioDecoderService::OnAudioBufferReady( |
| 128 const scoped_refptr<AudioBuffer>& audio_buffer) { | 129 const scoped_refptr<AudioBuffer>& audio_buffer) { |
| 129 DVLOG(1) << __FUNCTION__; | 130 DVLOG(1) << __FUNCTION__; |
| 130 | 131 |
| 131 // TODO(timav): Use DataPipe. | 132 // TODO(timav): Use DataPipe. |
| 132 client_->OnBufferDecoded(mojom::AudioBuffer::From(audio_buffer)); | 133 client_->OnBufferDecoded(mojom::AudioBuffer::From(audio_buffer)); |
| 133 } | 134 } |
| 134 | 135 |
| 135 } // namespace media | 136 } // namespace media |
| OLD | NEW |