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

Side by Side Diff: media/remoting/remote_stream_provider.h

Issue 2692593002: Media Remoting: End to end integration tests. (Closed)
Patch Set: Created 3 years, 10 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef MEDIA_REMOTING_REMOTE_STREAM_PROVIDER_H_
6 #define MEDIA_REMOTING_REMOTE_STREAM_PROVIDER_H_
7
8 #include <deque>
9
10 #include "base/memory/weak_ptr.h"
11 #include "media/base/audio_decoder_config.h"
12 #include "media/base/demuxer_stream.h"
13 #include "media/base/media_resource.h"
14 #include "media/base/video_decoder_config.h"
15 #include "media/remoting/rpc_broker.h"
16
17 namespace media {
18 namespace remoting {
19
20 // Simulates the DemuxerStream on Media Remoting receiver. Receives data from
21 // mojo data pipe, and returns one frame or/and status when Read() is called.
22 class RemoteMediaStream final : public DemuxerStream {
miu 2017/03/29 01:39:14 ditto: Same stuff here: Don't consider this only u
miu 2017/03/29 01:39:14 Consider just forward-declaring this class here, a
xjz 2017/03/30 23:21:31 Done.
xjz 2017/03/30 23:21:31 Done.
23 public:
24 RemoteMediaStream(RpcBroker* rpc_broker, Type type, int remote_handle);
25 ~RemoteMediaStream() override;
26
27 // DemuxerStream implementation.
28 void Read(const ReadCB& read_cb) override;
29 AudioDecoderConfig audio_decoder_config() override;
30 VideoDecoderConfig video_decoder_config() override;
31 DemuxerStream::Type type() const override;
32 bool SupportsConfigChanges() override;
33 VideoRotation video_rotation() override;
34 bool enabled() const override;
35 void set_enabled(bool enabled, base::TimeDelta timestamp) override {}
36 void SetStreamStatusChangeCB(const StreamStatusChangeCB& cb) override {}
37
38 void Initialize(const base::Closure& init_done_cb);
39 void FlushUntil(int count);
40 void AppendBuffer(scoped_refptr<DecoderBuffer> buffer);
41
42 private:
43 // RPC messages handlers.
44 void OnReceivedRpc(std::unique_ptr<pb::RpcMessage> message);
45 void OnInitializeCallback(std::unique_ptr<pb::RpcMessage> message);
46 void OnReadUntilCallback(std::unique_ptr<pb::RpcMessage> message);
47
48 // Issues the ReadUntil RPC message when read is pending and buffer is empty.
49 void SendReadUntil();
50
51 // Run and reset the read callback.
52 void CompleteRead(DemuxerStream::Status status);
53
54 // Update the |audio/video_decoder_config_|. When config changes in the mid
55 // stream, the new config will be pushed in the end of queue. Old config will
56 // be droped when all associated frames are consumed.
57 void UpdateConfig(const pb::AudioDecoderConfig* audio_message,
58 const pb::VideoDecoderConfig* video_message);
59
60 RpcBroker* rpc_broker_; // Outlives this class.
miu 2017/03/29 01:39:14 const
xjz 2017/03/30 23:21:31 Done.
61 Type type_ = DemuxerStream::UNKNOWN;
miu 2017/03/29 01:39:14 const (and no default value, since it is set by ct
xjz 2017/03/30 23:21:31 Done.
62 int remote_handle_ = RpcBroker::kInvalidHandle;
miu 2017/03/29 01:39:14 ditto: no default assignments here, since ctor set
xjz 2017/03/30 23:21:31 Done.
63 int rpc_handle_ = RpcBroker::kInvalidHandle;
64
65 // Set when Initialize() is called, and will be run only once after
66 // initialization is done.
67 base::Closure init_done_callback_;
68
69 // The read until count in the last ReadUntil RPC message.
70 int last_read_until_count_ = 0;
71
72 // Indicates whether Audio/VideoDecoderConfig changed and the frames with the
73 // old config are not yet consumed. The new config is stored in the end of
74 // |audio/video_decoder_config_|;
75 bool config_changed_ = false;
76
77 // Indicates whether a ReadUntil RPC message was sent without receiving the
78 // ReadUntilCallback message yet.
79 bool read_until_sent_ = false;
80
81 // Set when Read() is called. Run only once when read completes.
82 ReadCB read_complete_callback_;
83
84 std::deque<scoped_refptr<DecoderBuffer>> buffers_;
85 std::deque<AudioDecoderConfig> audio_decoder_config_;
86 std::deque<VideoDecoderConfig> video_decoder_config_;
87
88 base::WeakPtrFactory<RemoteMediaStream> weak_factory_;
89
90 DISALLOW_COPY_AND_ASSIGN(RemoteMediaStream);
91 };
92
93 // Simulates a stream provider on Media Remoting receiver.
94 class RemoteStreamProvider final : public MediaResource {
miu 2017/03/29 01:39:14 naming: How about just StreamProvider (you're alre
xjz 2017/03/30 23:21:31 Done. Will rename the files to "stream_provider.*"
95 public:
96 explicit RemoteStreamProvider(RpcBroker* rpc_broker);
97
98 ~RemoteStreamProvider() override;
99
100 // MediaResource implemenation.
101 DemuxerStream* GetStream(DemuxerStream::Type type) override;
102
103 void Initialize(int remote_audio_handle,
104 int remote_video_handle,
105 const base::Closure& callback);
106 void AppendBuffer(DemuxerStream::Type type,
107 scoped_refptr<DecoderBuffer> buffer);
108 void FlushUntil(DemuxerStream::Type type, int count);
109
110 private:
111 // Called when audio/video stream is initialized.
112 void AudioStreamInitialized();
113 void VideoStreamInitialized();
114
115 RpcBroker* rpc_broker_;
miu 2017/03/29 01:39:14 const
xjz 2017/03/30 23:21:31 Done.
116 std::unique_ptr<RemoteMediaStream> video_stream_;
117 std::unique_ptr<RemoteMediaStream> audio_stream_;
118 bool audio_stream_initialized_ = false;
119 bool video_stream_initialized_ = false;
120
121 // Set when Initialize() is called, and will run only once when both video
122 // and audio streams are initialized.
123 base::Closure init_done_callback_;
124
125 base::WeakPtrFactory<RemoteStreamProvider> weak_factory_;
126
127 DISALLOW_COPY_AND_ASSIGN(RemoteStreamProvider);
128 };
129
130 } // namespace remoting
131 } // namespace media
132 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698