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

Side by Side Diff: media/mojo/interfaces/remoting.mojom

Issue 2951523002: Media Remoting: Add mojo interfaces between browser and extension. (Closed)
Patch Set: Add SinkCapabilities structure. Created 3 years, 5 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 module media.mojom; 5 module media.mojom;
6 6
7 import "media/mojo/interfaces/remoting_common.mojom";
8
7 interface RemoterFactory { 9 interface RemoterFactory {
8 // Create a new Remoter associated with the given RemotingSource and bind it 10 // Create a new Remoter associated with the given RemotingSource and bind it
9 // to the given interface request. The RemotingSource will be notified when 11 // to the given interface request. The RemotingSource will be notified when
10 // the Remoter becomes available for use (or becomes unavailable). 12 // the Remoter becomes available for use (or becomes unavailable).
11 Create(RemotingSource source, Remoter& remoter); 13 Create(RemotingSource source, Remoter& remoter);
12 }; 14 };
13 15
14 // Interface used by the source to control when media bitstream data is read 16 // Interface used by the source to control when media bitstream data is read
15 // from a data pipe and then sent to the remote endpoint. There is one 17 // from a data pipe and then sent to the remote endpoint. There is one
16 // RemotingDataStreamSender per data pipe. 18 // RemotingDataStreamSender per data pipe.
17 interface RemotingDataStreamSender { 19 interface RemotingDataStreamSender {
18 // Consumes |size| bytes of data from the data pipe, which is a chunk of the 20 // Consumes |size| bytes of data from the data pipe, which is a chunk of the
19 // next frame's data payload starting at the given byte |offset|. 21 // next frame's data payload starting at the given byte |offset|.
20 // |total_payload_size| indicates the size of the entire data payload for the 22 // |total_payload_size| indicates the size of the entire data payload for the
21 // frame. Before this is called, |size| bytes of data must have been written 23 // frame. Before this is called, |size| bytes of data must have been written
22 // into the data pipe. 24 // into the data pipe.
23 // 25 //
24 // Normally, a frame's entire data payload can be pushed through the data pipe 26 // Normally, a frame's entire data payload can be pushed through the data pipe
25 // in one chunk. However, there can be situations where the size of the 27 // in one chunk. However, there can be situations where the size of the
26 // payload exceeds the capacity of the data pipe; and so this API supports 28 // payload exceeds the capacity of the data pipe; and so this API supports
27 // feeding the frame data through the pipe in multiple chunks. 29 // feeding the frame data through the pipe in multiple chunks.
28 ConsumeDataChunk(uint32 offset, uint32 size, uint32 total_payload_size); 30 ConsumeDataChunk(uint32 offset, uint32 size, uint32 total_payload_size);
29 31
30 // Enqueues another frame for transmission to the remote endpoint. Before this 32 // Enqueues another frame for transmission to the remote endpoint. Before this
31 // is called, ConsumeDataChunk() must have been called one or more times to 33 // is called, ConsumeDataChunk() must have been called one or more times to
32 // provide all of the frame's data. 34 // provide all of the frame's data.
33 SendFrame(); 35 SendFrame();
34 36
35 // Cancel the transmission of all in-flight data to the remote, up to and 37 // Cancels the transmission of all in-flight data to the remote, up to and
36 // including the last SendFrame() call; and also discard any data chunks 38 // including the last SendFrame() call; and also discard any data chunks
37 // that were consumed from the data pipe for the next frame. This is used to 39 // that were consumed from the data pipe for the next frame. This is used to
38 // optimize seeking, when it is known that any in-flight data is no longer 40 // optimize seeking, when it is known that any in-flight data is no longer
39 // needed by the remote. There is no guarantee as to how much of the in-flight 41 // needed by the remote. There is no guarantee as to how much of the in-flight
40 // data will actually reach the remote before the cancellation takes effect. 42 // data will actually reach the remote before the cancellation takes effect.
41 CancelInFlightData(); 43 CancelInFlightData();
42 }; 44 };
43 45
44 enum RemotingStopReason {
45 ROUTE_TERMINATED, // User-initiated disconnect, etc.
46 LOCAL_PLAYBACK, // Media switched back to local playback.
47 SOURCE_GONE, // RemotingSource has been destroyed.
48 MESSAGE_SEND_FAILED, // Failed to send a message to the sink.
49 DATA_SEND_FAILED, // Failed to consume from a data pipe or send to the sink.
50 UNEXPECTED_FAILURE, // Unexpected failure or inconsistent state encountered.
51 };
52
53 // Interface used by the source to start/stop remoting and send data to the 46 // Interface used by the source to start/stop remoting and send data to the
54 // sink. 47 // sink.
55 interface Remoter { 48 interface Remoter {
56 // Start a remoting session (once the sink has been reported to be available; 49 // Starts a remoting session (once the sink has been reported to be available;
57 // see RemotingSource). Either RemotingSource.OnStarted() or OnStartFailed() 50 // see RemotingSource). Either RemotingSource.OnStarted() or OnStartFailed()
58 // will be called to indicate success or failure. Once OnStarted() has been 51 // will be called to indicate success or failure. Once OnStarted() has been
59 // invoked, the source may then make calls to SendMessageToSink() and expect 52 // invoked, the source may then make calls to SendMessageToSink() and expect
60 // messages from the remote via RemotingSource.OnMessageFromSink(). 53 // messages from the remote via RemotingSource.OnMessageFromSink().
61 Start(); 54 Start();
62 55
63 // Start remoting the media data streams. This is called after Start() to 56 // Starts remoting the media data streams. This is called after Start() to
64 // provide data pipes from which the audio/video bitstream data is consumed 57 // provide data pipes from which the audio/video bitstream data is consumed
65 // and then transported to the remote device. RemotingDataStreamSenders are 58 // and then transported to the remote device. RemotingDataStreamSenders are
66 // used by the source to control when data should be consumed from the data 59 // used by the source to control when data should be consumed from the data
67 // pipes and sent. One or both pipes (and their corresponding 60 // pipes and sent. One or both pipes (and their corresponding
68 // RemotingDataStreamSender interface requests) must be provided. 61 // RemotingDataStreamSender interface requests) must be provided.
69 StartDataStreams(handle<data_pipe_consumer>? audio_pipe, 62 StartDataStreams(handle<data_pipe_consumer>? audio_pipe,
70 handle<data_pipe_consumer>? video_pipe, 63 handle<data_pipe_consumer>? video_pipe,
71 RemotingDataStreamSender&? audio_sender, 64 RemotingDataStreamSender&? audio_sender,
72 RemotingDataStreamSender&? video_sender); 65 RemotingDataStreamSender&? video_sender);
73 66
74 // Stop remoting media. Messages in both directions will be dropped after this 67 // Stops remoting media. Messages in both directions will be dropped after thi s
75 // point as well as any pending or in-transit media bitstream data. 68 // point as well as any pending or in-transit media bitstream data.
76 Stop(RemotingStopReason reason); 69 Stop(RemotingStopReason reason);
77 70
78 // Send |message| to the sink. |message| is a serialized protobuf from 71 // Sends |message| to the sink. |message| is a serialized protobuf from
79 // src/media/remoting/proto. 72 // src/media/remoting/proto.
80 SendMessageToSink(array<uint8> message); 73 SendMessageToSink(array<uint8> message);
81 }; 74 };
82 75
83 enum RemotingSinkCapabilities {
84 NONE,
85 RENDERING_ONLY,
86 CONTENT_DECRYPTION_AND_RENDERING,
87 };
88
89 enum RemotingStartFailReason {
90 CANNOT_START_MULTIPLE, // Remoting was already active.
91 ROUTE_TERMINATED, // User-initated disconnect while starting remoting.
92 };
93
94 // Interface used for sending notifications back to the local source's control 76 // Interface used for sending notifications back to the local source's control
95 // logic, and to pass messages from the sink back to the local media pipeline. 77 // logic, and to pass messages from the sink back to the local media pipeline.
96 interface RemotingSource { 78 interface RemotingSource {
97 // Notify the source that the sink is now available to start remoting. It is 79 // Notifies the source that the sink is now available to start remoting. It is
98 // up to the source's control logic to decide whether/when to start remoting. 80 // up to the source's control logic to decide whether/when to start remoting.
99 // 81 //
100 // TODO(miu): In a later change, pass detailed information about the sink's 82 // TODO(miu): In a later change, pass detailed information about the sink's
101 // capabilities (e.g., codec support, DRM keysystem support, etc.). 83 // capabilities (e.g., codec support, DRM keysystem support, etc.).
102 OnSinkAvailable(RemotingSinkCapabilities capabilities); 84 OnSinkAvailable(RemotingSinkCapabilities capabilities);
103 85
104 // Notify the source that the sink is no longer available for remoting. This 86 // Notifies the source that the sink is no longer available for remoting. This
105 // may happen, for example, because the sink has been shut down, or because 87 // may happen, for example, because the sink has been shut down, or because
106 // another source has started remoting. 88 // another source has started remoting.
107 OnSinkGone(); 89 OnSinkGone();
108 90
109 // One of these is called after the source attempts to start remoting. If 91 // One of these is called after the source attempts to start remoting. If
110 // OnStarted() is called, messages may begin flowing; and this will continue 92 // OnStarted() is called, messages may begin flowing; and this will continue
111 // until OnStopped() is called. On the other hand, if OnStartFailed() is 93 // until OnStopped() is called. On the other hand, if OnStartFailed() is
112 // called, then no messages are being passed between source and sink and 94 // called, then no messages are being passed between source and sink and
113 // remoting is not taking place. 95 // remoting is not taking place.
114 OnStarted(); 96 OnStarted();
115 OnStartFailed(RemotingStartFailReason reason); 97 OnStartFailed(RemotingStartFailReason reason);
116 98
117 // Pass a |message| from the sink back to the source. The |message| consists 99 // Passes a |message| from the sink back to the source. The |message| consists
118 // of a serialized protobuf from src/media/remoting/proto. This will only be 100 // of a serialized protobuf from src/media/remoting/proto. This will only be
119 // called after OnStarted() and before OnStopped(). 101 // called after OnStarted() and before OnStopped().
120 OnMessageFromSink(array<uint8> message); 102 OnMessageFromSink(array<uint8> message);
121 103
122 // Notify the source that remoting has terminated. This may or may not be in 104 // Notifies the source that remoting has terminated. This may or may not be in
123 // response to a Remoter.Stop() call, as other events (possibly external) may 105 // response to a Remoter.Stop() call, as other events (possibly external) may
124 // have caused remoting to end. 106 // have caused remoting to end.
125 OnStopped(RemotingStopReason reason); 107 OnStopped(RemotingStopReason reason);
126 }; 108 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698