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

Unified Diff: media/mojo/services/mojo_demuxer_stream_adapter.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/services/mojo_demuxer_stream_adapter.cc
diff --git a/media/mojo/services/mojo_demuxer_stream_adapter.cc b/media/mojo/services/mojo_demuxer_stream_adapter.cc
index bd71d3013ec0e9d8777ee4464ba424deb23fd0e0..035972904b5d8a6126beeb1ea2eb66ac49e75b9c 100644
--- a/media/mojo/services/mojo_demuxer_stream_adapter.cc
+++ b/media/mojo/services/mojo_demuxer_stream_adapter.cc
@@ -12,6 +12,7 @@
#include "base/numerics/safe_conversions.h"
#include "media/base/decoder_buffer.h"
#include "media/mojo/common/media_type_converters.h"
+#include "media/mojo/common/mojo_decoder_buffer_converter.h"
#include "mojo/public/cpp/system/data_pipe.h"
namespace media {
@@ -37,7 +38,6 @@ void MojoDemuxerStreamAdapter::Read(const DemuxerStream::ReadCB& read_cb) {
// We shouldn't be holding on to a previous callback if a new Read() came in.
DCHECK(read_cb_.is_null());
- DCHECK(stream_pipe_.is_valid());
read_cb_ = read_cb;
demuxer_stream_->Read(base::Bind(&MojoDemuxerStreamAdapter::OnBufferReady,
weak_factory_.GetWeakPtr()));
@@ -73,15 +73,18 @@ VideoRotation MojoDemuxerStreamAdapter::video_rotation() {
// TODO(xhwang): Pass liveness here.
void MojoDemuxerStreamAdapter::OnStreamReady(
mojom::DemuxerStream::Type type,
- mojo::ScopedDataPipeConsumerHandle pipe,
+ mojo::ScopedDataPipeConsumerHandle consumer_handle,
mojom::AudioDecoderConfigPtr audio_config,
mojom::VideoDecoderConfigPtr video_config) {
DVLOG(1) << __FUNCTION__;
- DCHECK(pipe.is_valid());
DCHECK_EQ(DemuxerStream::UNKNOWN, type_);
+ DCHECK(consumer_handle.is_valid());
type_ = static_cast<DemuxerStream::Type>(type);
- stream_pipe_ = std::move(pipe);
+
+ mojo_decoder_buffer_reader_.reset(
+ new MojoDecoderBufferReader(std::move(consumer_handle)));
+
UpdateConfig(std::move(audio_config), std::move(video_config));
stream_ready_cb_.Run();
@@ -95,7 +98,6 @@ void MojoDemuxerStreamAdapter::OnBufferReady(
DVLOG(3) << __FUNCTION__;
DCHECK(!read_cb_.is_null());
DCHECK_NE(type_, DemuxerStream::UNKNOWN);
- DCHECK(stream_pipe_.is_valid());
if (status == mojom::DemuxerStream::Status::CONFIG_CHANGED) {
UpdateConfig(std::move(audio_config), std::move(video_config));
@@ -109,35 +111,10 @@ void MojoDemuxerStreamAdapter::OnBufferReady(
}
DCHECK_EQ(status, mojom::DemuxerStream::Status::OK);
- scoped_refptr<DecoderBuffer> media_buffer(
- buffer.To<scoped_refptr<DecoderBuffer>>());
-
- if (media_buffer->end_of_stream()) {
- base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kOk, media_buffer);
- return;
- }
-
- DCHECK_GT(media_buffer->data_size(), 0u);
-
- // Wait for the data to become available in the DataPipe.
- MojoHandleSignalsState state;
- MojoResult result =
- MojoWait(stream_pipe_.get().value(), MOJO_HANDLE_SIGNAL_READABLE,
- MOJO_DEADLINE_INDEFINITE, &state);
- if (result != MOJO_RESULT_OK) {
- DVLOG(1) << __FUNCTION__ << ": Peer closed the data pipe";
- base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kAborted, nullptr);
- return;
- }
- // Read the inner data for the DecoderBuffer from our DataPipe.
- uint32_t bytes_to_read =
- base::checked_cast<uint32_t>(media_buffer->data_size());
- uint32_t bytes_read = bytes_to_read;
- result = ReadDataRaw(stream_pipe_.get(), media_buffer->writable_data(),
- &bytes_read, MOJO_READ_DATA_FLAG_ALL_OR_NONE);
- if (result != MOJO_RESULT_OK || bytes_read != bytes_to_read) {
- DVLOG(1) << __FUNCTION__ << ": reading from pipe failed";
+ scoped_refptr<DecoderBuffer> media_buffer =
+ mojo_decoder_buffer_reader_->ReadDecoderBuffer(buffer);
+ if (!media_buffer) {
base::ResetAndReturn(&read_cb_).Run(DemuxerStream::kAborted, nullptr);
return;
}

Powered by Google App Engine
This is Rietveld 408576698