| Index: media/remoting/remote_demuxer_stream_adapter.h
|
| diff --git a/media/remoting/remote_demuxer_stream_adapter.h b/media/remoting/remote_demuxer_stream_adapter.h
|
| index 8c9464a2dd6e564cc29f0418a9cbfc0bc8535acb..8b46a09b1db98fc70edb1a9c3233779247c9965d 100644
|
| --- a/media/remoting/remote_demuxer_stream_adapter.h
|
| +++ b/media/remoting/remote_demuxer_stream_adapter.h
|
| @@ -10,6 +10,7 @@
|
| #include <memory>
|
| #include <vector>
|
|
|
| +#include "base/callback_forward.h"
|
| #include "base/macros.h"
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/optional.h"
|
| @@ -18,6 +19,7 @@
|
| #include "media/base/video_decoder_config.h"
|
| #include "media/mojo/interfaces/remoting.mojom.h"
|
| #include "media/remoting/rpc/rpc_broker.h"
|
| +#include "media/remoting/triggers.h"
|
| #include "mojo/public/cpp/system/data_pipe.h"
|
|
|
| namespace base {
|
| @@ -36,6 +38,8 @@ namespace remoting {
|
| // while RPC message should be sent on main thread using |main_task_runner|.
|
| class RemoteDemuxerStreamAdapter {
|
| public:
|
| + using ErrorCallback = base::Callback<void(StopTrigger)>;
|
| +
|
| // |main_task_runner|: Task runner to post RPC message on main thread
|
| // |media_task_runner|: Task runner to run whole class on media thread.
|
| // |name|: Demuxer stream name. For troubleshooting purposes.
|
| @@ -46,6 +50,8 @@ class RemoteDemuxerStreamAdapter {
|
| // |stream_sender_info|: Transfer of pipe binding on the media thread. It is
|
| // to access mojo interface for sending data stream.
|
| // |producer_handle|: handle to send data using mojo data pipe.
|
| + // |error_callback|: Run if a fatal runtime error occurs and remoting should
|
| + // be shut down.
|
| RemoteDemuxerStreamAdapter(
|
| scoped_refptr<base::SingleThreadTaskRunner> main_task_runner,
|
| scoped_refptr<base::SingleThreadTaskRunner> media_task_runner,
|
| @@ -54,13 +60,19 @@ class RemoteDemuxerStreamAdapter {
|
| const base::WeakPtr<RpcBroker>& rpc_broker,
|
| int rpc_handle,
|
| mojom::RemotingDataStreamSenderPtrInfo stream_sender_info,
|
| - mojo::ScopedDataPipeProducerHandle producer_handle);
|
| + mojo::ScopedDataPipeProducerHandle producer_handle,
|
| + const ErrorCallback& error_callback);
|
| ~RemoteDemuxerStreamAdapter();
|
|
|
| // Rpc handle for this class. This is used for sending/receiving RPC message
|
| // with specific hanle using Rpcbroker.
|
| int rpc_handle() const { return rpc_handle_; }
|
|
|
| + // Returns the number of bytes that have been written to the data pipe since
|
| + // the last call to this method. This is polled periodically by
|
| + // RemoteRendererImpl for metrics purposes.
|
| + int64_t GetBytesWrittenAndReset();
|
| +
|
| // Signals if system is in flushing state. The caller uses |flushing| to
|
| // signal when flush starts and when is done. During flush operation, all
|
| // fetching data actions will be discarded. The return value indicates frame
|
| @@ -94,8 +106,8 @@ class RemoteDemuxerStreamAdapter {
|
| return read_until_callback_handle_ != kInvalidHandle;
|
| }
|
|
|
| - // Callback function when data pipe error occurs.
|
| - void OnFatalError(const char* reason);
|
| + // Callback function when a fatal runtime error occurs.
|
| + void OnFatalError(StopTrigger stop_trigger);
|
|
|
| const scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
|
| const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_;
|
| @@ -114,6 +126,11 @@ class RemoteDemuxerStreamAdapter {
|
| ::media::DemuxerStream* const demuxer_stream_;
|
| const ::media::DemuxerStream::Type type_;
|
|
|
| + // Run by OnFatalError to propagate StopTriggers back to the
|
| + // RemoteRendererImpl that owns this instance. This is not-null at
|
| + // construction time, and set to null the first time OnFatalError() is called.
|
| + ErrorCallback error_callback_;
|
| +
|
| // Remote RPC handle for demuxer initialization. The value is provided by
|
| // receiver from RPC_DS_INITIALIZE message and will be used as handle in
|
| // RPC_DS_INITIALIZE_CALLBACK message.
|
| @@ -156,6 +173,9 @@ class RemoteDemuxerStreamAdapter {
|
| ::media::mojom::RemotingDataStreamSenderPtr stream_sender_;
|
| mojo::ScopedDataPipeProducerHandle producer_handle_;
|
|
|
| + // Tracks the number of bytes written to the pipe.
|
| + int64_t bytes_written_to_pipe_;
|
| +
|
| // WeakPtrFactory only for reading buffer from demuxer stream. This is used
|
| // for canceling all read callbacks provided to the |demuxer_stream_| before a
|
| // flush.
|
|
|