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

Unified Diff: media/mojo/clients/mojo_audio_decoder.cc

Issue 2096063003: media: Add MojoDecoderBuffer{Reader|Writer} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comments addressed Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: media/mojo/clients/mojo_audio_decoder.cc
diff --git a/media/mojo/clients/mojo_audio_decoder.cc b/media/mojo/clients/mojo_audio_decoder.cc
index 4495c8a0945df1c9fc47ad7d116a3e167a4e0e6d..5393e0564aadd9d6403079965dc466e86ed20632 100644
--- a/media/mojo/clients/mojo_audio_decoder.cc
+++ b/media/mojo/clients/mojo_audio_decoder.cc
@@ -13,7 +13,9 @@
#include "base/threading/thread_task_runner_handle.h"
#include "media/base/audio_buffer.h"
#include "media/base/cdm_context.h"
+#include "media/base/demuxer_stream.h"
#include "media/mojo/common/media_type_converters.h"
+#include "media/mojo/common/mojo_decoder_buffer_converter.h"
namespace media {
@@ -56,12 +58,6 @@ void MojoAudioDecoder::Initialize(const AudioDecoderConfig& config,
return;
}
- // If connection error has happened, fail immediately.
- if (remote_decoder_.encountered_error()) {
sandersd (OOO until July 31) 2016/06/27 20:24:54 We use this pattern everywhere; what is the expect
sandersd (OOO until July 31) 2016/06/27 20:25:20 *now guaranteed
Ken Rockot(use gerrit already) 2016/06/27 21:00:27 The correct thing to do is set an error handler an
sandersd (OOO until July 31) 2016/06/27 21:04:21 Right, but what if an error has already happened?
Ken Rockot(use gerrit already) 2016/06/27 21:17:21 encountered_error() only ever changes value in res
xhwang 2016/06/28 01:11:48 What Ken said. Basically encountered_error() will
- task_runner_->PostTask(FROM_HERE, base::Bind(init_cb, false));
- return;
- }
-
// Otherwise, set an error handler to catch the connection error.
// Using base::Unretained(this) is safe because |this| owns |remote_decoder_|,
// and the error handler can't be invoked once |remote_decoder_| is destroyed.
@@ -90,7 +86,8 @@ void MojoAudioDecoder::Decode(const scoped_refptr<DecoderBuffer>& media_buffer,
return;
}
- mojom::DecoderBufferPtr buffer = TransferDecoderBuffer(media_buffer);
+ mojom::DecoderBufferPtr buffer =
+ mojo_decoder_buffer_writer_->WriteDecoderBuffer(media_buffer);
if (!buffer) {
task_runner_->PostTask(FROM_HERE,
base::Bind(decode_cb, DecodeStatus::DECODE_ERROR));
@@ -164,8 +161,13 @@ void MojoAudioDecoder::OnInitialized(bool success,
needs_bitstream_conversion_ = needs_bitstream_conversion;
- if (success)
- CreateDataPipe();
+ if (success) {
+ mojo::ScopedDataPipeConsumerHandle remote_consumer_handle;
+ mojo_decoder_buffer_writer_ = MojoDecoderBufferWriter::Create(
+ DemuxerStream::AUDIO, &remote_consumer_handle);
+ // Pass consumer end to |remote_decoder_|.
+ remote_decoder_->SetDataSource(std::move(remote_consumer_handle));
+ }
base::ResetAndReturn(&init_cb_).Run(success);
}
@@ -189,41 +191,4 @@ void MojoAudioDecoder::OnResetDone() {
base::ResetAndReturn(&reset_cb_).Run();
}
-void MojoAudioDecoder::CreateDataPipe() {
- MojoCreateDataPipeOptions options;
- options.struct_size = sizeof(MojoCreateDataPipeOptions);
- options.flags = MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE;
- options.element_num_bytes = 1;
- // TODO(timav): Consider capacity calculation based on AudioDecoderConfig.
- options.capacity_num_bytes = 512 * 1024;
-
- mojo::DataPipe write_pipe(options);
-
- // Keep producer end.
- producer_handle_ = std::move(write_pipe.producer_handle);
-
- // Pass consumer end to |remote_decoder_|.
- remote_decoder_->SetDataSource(std::move(write_pipe.consumer_handle));
-}
-
-mojom::DecoderBufferPtr MojoAudioDecoder::TransferDecoderBuffer(
- const scoped_refptr<DecoderBuffer>& media_buffer) {
- mojom::DecoderBufferPtr buffer = mojom::DecoderBuffer::From(media_buffer);
- if (media_buffer->end_of_stream())
- return buffer;
-
- // 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);
- 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;
-}
-
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698