| Index: media/mojo/common/mojo_decoder_buffer_converter.cc
|
| diff --git a/media/mojo/common/mojo_decoder_buffer_converter.cc b/media/mojo/common/mojo_decoder_buffer_converter.cc
|
| index 32080d3af4458ff28707a811c51bec9e38035b8f..d47e5f56a67644b34719a05660029b385dd34a8a 100644
|
| --- a/media/mojo/common/mojo_decoder_buffer_converter.cc
|
| +++ b/media/mojo/common/mojo_decoder_buffer_converter.cc
|
| @@ -64,18 +64,20 @@ std::unique_ptr<MojoDecoderBufferReader> MojoDecoderBufferReader::Create(
|
| MojoDecoderBufferReader::MojoDecoderBufferReader(
|
| mojo::ScopedDataPipeConsumerHandle consumer_handle)
|
| : consumer_handle_(std::move(consumer_handle)),
|
| - pipe_watcher_(FROM_HERE),
|
| + pipe_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL),
|
| bytes_read_(0) {
|
| DVLOG(1) << __func__;
|
|
|
| MojoResult result =
|
| - pipe_watcher_.Start(consumer_handle_.get(), MOJO_HANDLE_SIGNAL_READABLE,
|
| + pipe_watcher_.Watch(consumer_handle_.get(), MOJO_HANDLE_SIGNAL_READABLE,
|
| base::Bind(&MojoDecoderBufferReader::OnPipeReadable,
|
| base::Unretained(this)));
|
| if (result != MOJO_RESULT_OK) {
|
| DVLOG(1) << __func__
|
| << ": Failed to start watching the pipe. result=" << result;
|
| consumer_handle_.reset();
|
| + } else {
|
| + pipe_watcher_.ArmOrNotify();
|
| }
|
| }
|
|
|
| @@ -159,13 +161,16 @@ void MojoDecoderBufferReader::ReadDecoderBufferData() {
|
|
|
| if (IsPipeReadWriteError(result)) {
|
| OnPipeError(result);
|
| - } else if (result == MOJO_RESULT_OK) {
|
| - DCHECK_GT(num_bytes, 0u);
|
| - bytes_read_ += num_bytes;
|
| - if (bytes_read_ == buffer_size) {
|
| - DCHECK(read_cb_);
|
| - bytes_read_ = 0;
|
| - std::move(read_cb_).Run(std::move(media_buffer_));
|
| + } else {
|
| + pipe_watcher_.ArmOrNotify();
|
| + if (result == MOJO_RESULT_OK) {
|
| + DCHECK_GT(num_bytes, 0u);
|
| + bytes_read_ += num_bytes;
|
| + if (bytes_read_ == buffer_size) {
|
| + DCHECK(read_cb_);
|
| + bytes_read_ = 0;
|
| + std::move(read_cb_).Run(std::move(media_buffer_));
|
| + }
|
| }
|
| }
|
| }
|
| @@ -186,18 +191,20 @@ std::unique_ptr<MojoDecoderBufferWriter> MojoDecoderBufferWriter::Create(
|
| MojoDecoderBufferWriter::MojoDecoderBufferWriter(
|
| mojo::ScopedDataPipeProducerHandle producer_handle)
|
| : producer_handle_(std::move(producer_handle)),
|
| - pipe_watcher_(FROM_HERE),
|
| + pipe_watcher_(FROM_HERE, mojo::SimpleWatcher::ArmingPolicy::MANUAL),
|
| bytes_written_(0) {
|
| DVLOG(1) << __func__;
|
|
|
| MojoResult result =
|
| - pipe_watcher_.Start(producer_handle_.get(), MOJO_HANDLE_SIGNAL_WRITABLE,
|
| + pipe_watcher_.Watch(producer_handle_.get(), MOJO_HANDLE_SIGNAL_WRITABLE,
|
| base::Bind(&MojoDecoderBufferWriter::OnPipeWritable,
|
| base::Unretained(this)));
|
| if (result != MOJO_RESULT_OK) {
|
| DVLOG(1) << __func__
|
| << ": Failed to start watching the pipe. result=" << result;
|
| producer_handle_.reset();
|
| + } else {
|
| + pipe_watcher_.ArmOrNotify();
|
| }
|
| }
|
|
|
| @@ -273,12 +280,15 @@ MojoResult MojoDecoderBufferWriter::WriteDecoderBufferData() {
|
|
|
| if (IsPipeReadWriteError(result)) {
|
| OnPipeError(result);
|
| - } else if (result == MOJO_RESULT_OK) {
|
| - DCHECK_GT(num_bytes, 0u);
|
| - bytes_written_ += num_bytes;
|
| - if (bytes_written_ == buffer_size) {
|
| - media_buffer_ = nullptr;
|
| - bytes_written_ = 0;
|
| + } else {
|
| + pipe_watcher_.ArmOrNotify();
|
| + if (result == MOJO_RESULT_OK) {
|
| + DCHECK_GT(num_bytes, 0u);
|
| + bytes_written_ += num_bytes;
|
| + if (bytes_written_ == buffer_size) {
|
| + media_buffer_ = nullptr;
|
| + bytes_written_ = 0;
|
| + }
|
| }
|
| }
|
|
|
|
|