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( | |
18 media::DecodeStatus status) { | |
19 switch (status) { | |
20 case media::DecodeStatus::OK: | |
21 return interfaces::AudioDecoder::DecodeStatus::OK; | |
22 case media::DecodeStatus::ABORTED: | |
23 return interfaces::AudioDecoder::DecodeStatus::ABORTED; | |
24 case media::DecodeStatus::DECODE_ERROR: | |
25 return interfaces::AudioDecoder::DecodeStatus::DECODE_ERROR; | |
26 } | |
27 NOTREACHED(); | |
28 return interfaces::AudioDecoder::DecodeStatus::DECODE_ERROR; | |
29 } | |
30 | |
31 MojoAudioDecoderService::MojoAudioDecoderService( | 17 MojoAudioDecoderService::MojoAudioDecoderService( |
32 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, | 18 base::WeakPtr<MojoCdmServiceContext> mojo_cdm_service_context, |
33 std::unique_ptr<media::AudioDecoder> decoder, | 19 std::unique_ptr<media::AudioDecoder> decoder, |
34 mojo::InterfaceRequest<interfaces::AudioDecoder> request) | 20 mojo::InterfaceRequest<interfaces::AudioDecoder> request) |
35 : binding_(this, std::move(request)), | 21 : binding_(this, std::move(request)), |
36 mojo_cdm_service_context_(mojo_cdm_service_context), | 22 mojo_cdm_service_context_(mojo_cdm_service_context), |
37 decoder_(std::move(decoder)), | 23 decoder_(std::move(decoder)), |
38 weak_factory_(this) { | 24 weak_factory_(this) { |
39 weak_this_ = weak_factory_.GetWeakPtr(); | 25 weak_this_ = weak_factory_.GetWeakPtr(); |
40 } | 26 } |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 consumer_handle_ = std::move(receive_pipe); | 75 consumer_handle_ = std::move(receive_pipe); |
90 } | 76 } |
91 | 77 |
92 void MojoAudioDecoderService::Decode(interfaces::DecoderBufferPtr buffer, | 78 void MojoAudioDecoderService::Decode(interfaces::DecoderBufferPtr buffer, |
93 const DecodeCallback& callback) { | 79 const DecodeCallback& callback) { |
94 DVLOG(3) << __FUNCTION__; | 80 DVLOG(3) << __FUNCTION__; |
95 | 81 |
96 scoped_refptr<DecoderBuffer> media_buffer = | 82 scoped_refptr<DecoderBuffer> media_buffer = |
97 ReadDecoderBuffer(std::move(buffer)); | 83 ReadDecoderBuffer(std::move(buffer)); |
98 if (!media_buffer) { | 84 if (!media_buffer) { |
99 callback.Run(ConvertDecodeStatus(media::DecodeStatus::DECODE_ERROR)); | 85 callback.Run(interfaces::DecodeStatus::DECODE_ERROR); |
100 return; | 86 return; |
101 } | 87 } |
102 | 88 |
103 decoder_->Decode(media_buffer, | 89 decoder_->Decode(media_buffer, |
104 base::Bind(&MojoAudioDecoderService::OnDecodeStatus, | 90 base::Bind(&MojoAudioDecoderService::OnDecodeStatus, |
105 weak_this_, callback)); | 91 weak_this_, callback)); |
106 } | 92 } |
107 | 93 |
108 void MojoAudioDecoderService::Reset(const ResetCallback& callback) { | 94 void MojoAudioDecoderService::Reset(const ResetCallback& callback) { |
109 DVLOG(1) << __FUNCTION__; | 95 DVLOG(1) << __FUNCTION__; |
(...skipping 11 matching lines...) Expand all Loading... |
121 callback.Run(success, decoder_->NeedsBitstreamConversion()); | 107 callback.Run(success, decoder_->NeedsBitstreamConversion()); |
122 } else { | 108 } else { |
123 // Do not call decoder_->NeedsBitstreamConversion() if init failed. | 109 // Do not call decoder_->NeedsBitstreamConversion() if init failed. |
124 callback.Run(false, false); | 110 callback.Run(false, false); |
125 } | 111 } |
126 } | 112 } |
127 | 113 |
128 void MojoAudioDecoderService::OnDecodeStatus(const DecodeCallback& callback, | 114 void MojoAudioDecoderService::OnDecodeStatus(const DecodeCallback& callback, |
129 media::DecodeStatus status) { | 115 media::DecodeStatus status) { |
130 DVLOG(3) << __FUNCTION__ << " status:" << status; | 116 DVLOG(3) << __FUNCTION__ << " status:" << status; |
131 callback.Run(ConvertDecodeStatus(status)); | 117 callback.Run(static_cast<interfaces::DecodeStatus>(status)); |
132 } | 118 } |
133 | 119 |
134 void MojoAudioDecoderService::OnResetDone(const ResetCallback& callback) { | 120 void MojoAudioDecoderService::OnResetDone(const ResetCallback& callback) { |
135 DVLOG(1) << __FUNCTION__; | 121 DVLOG(1) << __FUNCTION__; |
136 callback.Run(); | 122 callback.Run(); |
137 } | 123 } |
138 | 124 |
139 void MojoAudioDecoderService::OnAudioBufferReady( | 125 void MojoAudioDecoderService::OnAudioBufferReady( |
140 const scoped_refptr<AudioBuffer>& audio_buffer) { | 126 const scoped_refptr<AudioBuffer>& audio_buffer) { |
141 DVLOG(1) << __FUNCTION__; | 127 DVLOG(1) << __FUNCTION__; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 uint32_t bytes_read = bytes_to_read; | 159 uint32_t bytes_read = bytes_to_read; |
174 CHECK_EQ(ReadDataRaw(consumer_handle_.get(), media_buffer->writable_data(), | 160 CHECK_EQ(ReadDataRaw(consumer_handle_.get(), media_buffer->writable_data(), |
175 &bytes_read, MOJO_READ_DATA_FLAG_ALL_OR_NONE), | 161 &bytes_read, MOJO_READ_DATA_FLAG_ALL_OR_NONE), |
176 MOJO_RESULT_OK); | 162 MOJO_RESULT_OK); |
177 CHECK_EQ(bytes_to_read, bytes_read); | 163 CHECK_EQ(bytes_to_read, bytes_read); |
178 | 164 |
179 return media_buffer; | 165 return media_buffer; |
180 } | 166 } |
181 | 167 |
182 } // namespace media | 168 } // namespace media |
OLD | NEW |