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" |
11 #include "media/base/media_keys.h" | 11 #include "media/base/media_keys.h" |
12 #include "media/mojo/common/media_type_converters.h" | 12 #include "media/mojo/common/media_type_converters.h" |
13 #include "media/mojo/services/mojo_cdm_service_context.h" | 13 #include "media/mojo/services/mojo_cdm_service_context.h" |
14 | 14 |
15 namespace media { | 15 namespace media { |
16 | 16 |
17 static interfaces::AudioDecoder::DecodeStatus ConvertDecodeStatus( | 17 static mojom::AudioDecoder::DecodeStatus ConvertDecodeStatus( |
18 media::DecodeStatus status) { | 18 media::DecodeStatus status) { |
19 switch (status) { | 19 switch (status) { |
20 case media::DecodeStatus::OK: | 20 case media::DecodeStatus::OK: |
21 return interfaces::AudioDecoder::DecodeStatus::OK; | 21 return mojom::AudioDecoder::DecodeStatus::OK; |
22 case media::DecodeStatus::ABORTED: | 22 case media::DecodeStatus::ABORTED: |
23 return interfaces::AudioDecoder::DecodeStatus::ABORTED; | 23 return mojom::AudioDecoder::DecodeStatus::ABORTED; |
24 case media::DecodeStatus::DECODE_ERROR: | 24 case media::DecodeStatus::DECODE_ERROR: |
25 return interfaces::AudioDecoder::DecodeStatus::DECODE_ERROR; | 25 return mojom::AudioDecoder::DecodeStatus::DECODE_ERROR; |
26 } | 26 } |
27 NOTREACHED(); | 27 NOTREACHED(); |
28 return interfaces::AudioDecoder::DecodeStatus::DECODE_ERROR; | 28 return mojom::AudioDecoder::DecodeStatus::DECODE_ERROR; |
29 } | 29 } |
30 | 30 |
31 MojoAudioDecoderService::MojoAudioDecoderService( | 31 MojoAudioDecoderService::MojoAudioDecoderService( |
32 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, | 32 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
33 std::unique_ptr<media::AudioDecoder> decoder, | 33 std::unique_ptr<media::AudioDecoder> decoder, |
34 mojo::InterfaceRequest<interfaces::AudioDecoder> request) | 34 mojo::InterfaceRequest<mojom::AudioDecoder> request) |
35 : binding_(this, std::move(request)), | 35 : binding_(this, std::move(request)), |
36 mojo_cdm_service_context_(mojo_cdm_service_context), | 36 mojo_cdm_service_context_(mojo_cdm_service_context), |
37 decoder_(std::move(decoder)), | 37 decoder_(std::move(decoder)), |
38 weak_factory_(this) { | 38 weak_factory_(this) { |
39 weak_this_ = weak_factory_.GetWeakPtr(); | 39 weak_this_ = weak_factory_.GetWeakPtr(); |
40 } | 40 } |
41 | 41 |
42 MojoAudioDecoderService::~MojoAudioDecoderService() {} | 42 MojoAudioDecoderService::~MojoAudioDecoderService() {} |
43 | 43 |
44 void MojoAudioDecoderService::Initialize( | 44 void MojoAudioDecoderService::Initialize(mojom::AudioDecoderClientPtr client, |
45 interfaces::AudioDecoderClientPtr client, | 45 mojom::AudioDecoderConfigPtr config, |
46 interfaces::AudioDecoderConfigPtr config, | 46 int32_t cdm_id, |
47 int32_t cdm_id, | 47 const InitializeCallback& callback) { |
48 const InitializeCallback& callback) { | |
49 DVLOG(1) << __FUNCTION__ << " " | 48 DVLOG(1) << __FUNCTION__ << " " |
50 << config.To<media::AudioDecoderConfig>().AsHumanReadableString(); | 49 << config.To<media::AudioDecoderConfig>().AsHumanReadableString(); |
51 | 50 |
52 // Get CdmContext from cdm_id if the stream is encrypted. | 51 // Get CdmContext from cdm_id if the stream is encrypted. |
53 CdmContext* cdm_context = nullptr; | 52 CdmContext* cdm_context = nullptr; |
54 scoped_refptr<MediaKeys> cdm; | 53 scoped_refptr<MediaKeys> cdm; |
55 if (config.To<media::AudioDecoderConfig>().is_encrypted()) { | 54 if (config.To<media::AudioDecoderConfig>().is_encrypted()) { |
56 if (!mojo_cdm_service_context_) { | 55 if (!mojo_cdm_service_context_) { |
57 DVLOG(1) << "CDM service context not available."; | 56 DVLOG(1) << "CDM service context not available."; |
58 callback.Run(false, false); | 57 callback.Run(false, false); |
(...skipping 23 matching lines...) Expand all Loading... |
82 cdm), | 81 cdm), |
83 base::Bind(&MojoAudioDecoderService::OnAudioBufferReady, weak_this_)); | 82 base::Bind(&MojoAudioDecoderService::OnAudioBufferReady, weak_this_)); |
84 } | 83 } |
85 | 84 |
86 void MojoAudioDecoderService::SetDataSource( | 85 void MojoAudioDecoderService::SetDataSource( |
87 mojo::ScopedDataPipeConsumerHandle receive_pipe) { | 86 mojo::ScopedDataPipeConsumerHandle receive_pipe) { |
88 DVLOG(1) << __FUNCTION__; | 87 DVLOG(1) << __FUNCTION__; |
89 consumer_handle_ = std::move(receive_pipe); | 88 consumer_handle_ = std::move(receive_pipe); |
90 } | 89 } |
91 | 90 |
92 void MojoAudioDecoderService::Decode(interfaces::DecoderBufferPtr buffer, | 91 void MojoAudioDecoderService::Decode(mojom::DecoderBufferPtr buffer, |
93 const DecodeCallback& callback) { | 92 const DecodeCallback& callback) { |
94 DVLOG(3) << __FUNCTION__; | 93 DVLOG(3) << __FUNCTION__; |
95 | 94 |
96 scoped_refptr<DecoderBuffer> media_buffer = | 95 scoped_refptr<DecoderBuffer> media_buffer = |
97 ReadDecoderBuffer(std::move(buffer)); | 96 ReadDecoderBuffer(std::move(buffer)); |
98 if (!media_buffer) { | 97 if (!media_buffer) { |
99 callback.Run(ConvertDecodeStatus(media::DecodeStatus::DECODE_ERROR)); | 98 callback.Run(ConvertDecodeStatus(media::DecodeStatus::DECODE_ERROR)); |
100 return; | 99 return; |
101 } | 100 } |
102 | 101 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 void MojoAudioDecoderService::OnResetDone(const ResetCallback& callback) { | 133 void MojoAudioDecoderService::OnResetDone(const ResetCallback& callback) { |
135 DVLOG(1) << __FUNCTION__; | 134 DVLOG(1) << __FUNCTION__; |
136 callback.Run(); | 135 callback.Run(); |
137 } | 136 } |
138 | 137 |
139 void MojoAudioDecoderService::OnAudioBufferReady( | 138 void MojoAudioDecoderService::OnAudioBufferReady( |
140 const scoped_refptr<AudioBuffer>& audio_buffer) { | 139 const scoped_refptr<AudioBuffer>& audio_buffer) { |
141 DVLOG(1) << __FUNCTION__; | 140 DVLOG(1) << __FUNCTION__; |
142 | 141 |
143 // TODO(timav): Use DataPipe. | 142 // TODO(timav): Use DataPipe. |
144 client_->OnBufferDecoded(interfaces::AudioBuffer::From(audio_buffer)); | 143 client_->OnBufferDecoded(mojom::AudioBuffer::From(audio_buffer)); |
145 } | 144 } |
146 | 145 |
147 scoped_refptr<DecoderBuffer> MojoAudioDecoderService::ReadDecoderBuffer( | 146 scoped_refptr<DecoderBuffer> MojoAudioDecoderService::ReadDecoderBuffer( |
148 interfaces::DecoderBufferPtr buffer) { | 147 mojom::DecoderBufferPtr buffer) { |
149 scoped_refptr<DecoderBuffer> media_buffer( | 148 scoped_refptr<DecoderBuffer> media_buffer( |
150 buffer.To<scoped_refptr<DecoderBuffer>>()); | 149 buffer.To<scoped_refptr<DecoderBuffer>>()); |
151 | 150 |
152 if (media_buffer->end_of_stream()) | 151 if (media_buffer->end_of_stream()) |
153 return media_buffer; | 152 return media_buffer; |
154 | 153 |
155 // Wait for the data to become available in the DataPipe. | 154 // Wait for the data to become available in the DataPipe. |
156 MojoHandleSignalsState state; | 155 MojoHandleSignalsState state; |
157 CHECK_EQ(MOJO_RESULT_OK, | 156 CHECK_EQ(MOJO_RESULT_OK, |
158 MojoWait(consumer_handle_.get().value(), MOJO_HANDLE_SIGNAL_READABLE, | 157 MojoWait(consumer_handle_.get().value(), MOJO_HANDLE_SIGNAL_READABLE, |
(...skipping 14 matching lines...) Expand all Loading... |
173 uint32_t bytes_read = bytes_to_read; | 172 uint32_t bytes_read = bytes_to_read; |
174 CHECK_EQ(ReadDataRaw(consumer_handle_.get(), media_buffer->writable_data(), | 173 CHECK_EQ(ReadDataRaw(consumer_handle_.get(), media_buffer->writable_data(), |
175 &bytes_read, MOJO_READ_DATA_FLAG_ALL_OR_NONE), | 174 &bytes_read, MOJO_READ_DATA_FLAG_ALL_OR_NONE), |
176 MOJO_RESULT_OK); | 175 MOJO_RESULT_OK); |
177 CHECK_EQ(bytes_to_read, bytes_read); | 176 CHECK_EQ(bytes_to_read, bytes_read); |
178 | 177 |
179 return media_buffer; | 178 return media_buffer; |
180 } | 179 } |
181 | 180 |
182 } // namespace media | 181 } // namespace media |
OLD | NEW |