1 // Copyright 2017 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_REMOTING_END2END_TEST_RENDERER_H_
6 #define MEDIA_REMOTING_END2END_TEST_RENDERER_H_
11 #include "base/memory/raw_ptr.h"
12 #include "base/memory/scoped_refptr.h"
13 #include "base/memory/weak_ptr.h"
14 #include "media/base/demuxer_stream.h"
15 #include "media/base/renderer.h"
16 #include "media/remoting/stream_provider.h"
17 #include "third_party/openscreen/src/cast/streaming/rpc_messenger.h"
25 class RendererController;
26 class CourierRenderer;
28 class ReceiverController;
30 // Simulates the media remoting pipeline.
31 class End2EndTestRenderer final : public Renderer {
33 explicit End2EndTestRenderer(std::unique_ptr<Renderer> renderer);
34 ~End2EndTestRenderer() override;
36 // Renderer implementation.
37 void Initialize(MediaResource* media_resource,
38 RendererClient* client,
39 PipelineStatusCallback init_cb) override;
40 void SetLatencyHint(absl::optional<base::TimeDelta> latency_hint) override;
41 void SetPreservesPitch(bool preserves_pitch) override;
42 void Flush(base::OnceClosure flush_cb) override;
43 void StartPlayingFrom(base::TimeDelta time) override;
44 void SetPlaybackRate(double playback_rate) override;
45 void SetVolume(float volume) override;
46 base::TimeDelta GetMediaTime() override;
47 RendererType GetRendererType() override;
49 void OnSelectedVideoTracksChanged(
50 const std::vector<DemuxerStream*>& enabled_tracks,
51 base::OnceClosure change_completed_cb) override;
53 void OnEnabledAudioTracksChanged(
54 const std::vector<DemuxerStream*>& enabled_tracks,
55 base::OnceClosure change_completed_cb) override;
62 // Called to send RPC messages to |receiver_|.
63 void SendMessageToSink(const std::vector<uint8_t>& message);
65 // Called to send frame data to |receiver_|.
66 void SendFrameToSink(uint32_t frame_count,
67 scoped_refptr<media::DecoderBuffer> decoder_buffer,
68 DemuxerStream::Type type);
70 // Called when receives RPC messages from |receiver_|.
71 void OnMessageFromSink(std::unique_ptr<std::vector<uint8_t>> message);
73 void InitializeReceiverRenderer(PipelineStatus status);
74 void OnCourierRendererInitialized(PipelineStatus status);
75 void OnReceiverInitialized(PipelineStatus status);
76 void CompleteInitialize();
78 // Callback function when RPC message is received.
79 void OnReceivedRpc(std::unique_ptr<openscreen::cast::RpcMessage> message);
80 void OnAcquireRenderer(std::unique_ptr<openscreen::cast::RpcMessage> message);
81 void OnAcquireRendererDone(int receiver_renderer_handle);
83 PipelineStatusCallback init_cb_;
85 bool courier_renderer_initialized_;
86 bool receiver_initialized_;
89 std::unique_ptr<RendererController> controller_;
90 std::unique_ptr<CourierRenderer> courier_renderer_;
92 // Receiver components.
93 std::unique_ptr<TestRemotee> media_remotee_;
94 raw_ptr<ReceiverController> receiver_controller_;
95 std::unique_ptr<Receiver> receiver_;
96 std::unique_ptr<StreamProvider> stream_provider_;
97 raw_ptr<openscreen::cast::RpcMessenger> receiver_rpc_messenger_;
99 // Handle of |receiver_|
100 int receiver_renderer_handle_ =
101 openscreen::cast::RpcMessenger::kInvalidHandle;
102 // Handle of |courier_renderer_|, it would be sent with AcquireRenderer
104 int sender_renderer_handle_ = openscreen::cast::RpcMessenger::kInvalidHandle;
106 base::WeakPtrFactory<End2EndTestRenderer> weak_factory_{this};
109 } // namespace remoting
112 #endif // MEDIA_REMOTING_END2END_TEST_RENDERER_H_