Index: media/mojo/services/mojo_audio_decoder.cc |
diff --git a/media/mojo/services/mojo_audio_decoder.cc b/media/mojo/services/mojo_audio_decoder.cc |
index c80300aef1eb79a827ad47cfdabdf6f9e61e5938..037982e44aaa9424996772edbec99969ea368912 100644 |
--- a/media/mojo/services/mojo_audio_decoder.cc |
+++ b/media/mojo/services/mojo_audio_decoder.cc |
@@ -79,7 +79,7 @@ void MojoAudioDecoder::Initialize(const AudioDecoderConfig& config, |
base::Bind(&MojoAudioDecoder::OnInitialized, base::Unretained(this))); |
} |
-void MojoAudioDecoder::Decode(const scoped_refptr<DecoderBuffer>& buffer, |
+void MojoAudioDecoder::Decode(const scoped_refptr<DecoderBuffer>& media_buffer, |
const DecodeCB& decode_cb) { |
DVLOG(3) << __FUNCTION__; |
DCHECK(task_runner_->BelongsToCurrentThread()); |
@@ -90,11 +90,18 @@ void MojoAudioDecoder::Decode(const scoped_refptr<DecoderBuffer>& buffer, |
return; |
} |
+ mojom::DecoderBufferPtr buffer = TransferDecoderBuffer(media_buffer); |
+ if (!buffer) { |
+ task_runner_->PostTask(FROM_HERE, |
+ base::Bind(decode_cb, DecodeStatus::DECODE_ERROR)); |
+ return; |
+ } |
+ |
DCHECK(decode_cb_.is_null()); |
decode_cb_ = decode_cb; |
remote_decoder_->Decode( |
- TransferDecoderBuffer(buffer), |
+ std::move(buffer), |
base::Bind(&MojoAudioDecoder::OnDecodeStatus, base::Unretained(this))); |
} |
@@ -223,10 +230,14 @@ mojom::DecoderBufferPtr MojoAudioDecoder::TransferDecoderBuffer( |
// Serialize the data section of the DecoderBuffer into our pipe. |
uint32_t num_bytes = base::checked_cast<uint32_t>(media_buffer->data_size()); |
DCHECK_GT(num_bytes, 0u); |
- CHECK_EQ(WriteDataRaw(producer_handle_.get(), media_buffer->data(), |
- &num_bytes, MOJO_READ_DATA_FLAG_ALL_OR_NONE), |
- MOJO_RESULT_OK); |
- CHECK_EQ(num_bytes, static_cast<uint32_t>(media_buffer->data_size())); |
+ MojoResult result = |
+ WriteDataRaw(producer_handle_.get(), media_buffer->data(), &num_bytes, |
+ MOJO_WRITE_DATA_FLAG_ALL_OR_NONE); |
+ if (result != MOJO_RESULT_OK || num_bytes != media_buffer->data_size()) { |
+ DVLOG(1) << __FUNCTION__ << ": writing to data pipe failed"; |
+ return nullptr; |
+ } |
+ |
return buffer; |
} |