Fix FullScreen crash in Webapp
[platform/framework/web/chromium-efl.git] / media / remoting / end2end_test_renderer.h
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.
4
5 #ifndef MEDIA_REMOTING_END2END_TEST_RENDERER_H_
6 #define MEDIA_REMOTING_END2END_TEST_RENDERER_H_
7
8 #include <memory>
9 #include <vector>
10
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"
18
19 namespace media {
20
21 class DecoderBuffer;
22
23 namespace remoting {
24
25 class RendererController;
26 class CourierRenderer;
27 class Receiver;
28 class ReceiverController;
29
30 // Simulates the media remoting pipeline.
31 class End2EndTestRenderer final : public Renderer {
32  public:
33   explicit End2EndTestRenderer(std::unique_ptr<Renderer> renderer);
34   ~End2EndTestRenderer() override;
35
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;
48
49   void OnSelectedVideoTracksChanged(
50       const std::vector<DemuxerStream*>& enabled_tracks,
51       base::OnceClosure change_completed_cb) override;
52
53   void OnEnabledAudioTracksChanged(
54       const std::vector<DemuxerStream*>& enabled_tracks,
55       base::OnceClosure change_completed_cb) override;
56
57  private:
58   class TestRemotee;
59
60   void InitTestApi();
61
62   // Called to send RPC messages to |receiver_|.
63   void SendMessageToSink(const std::vector<uint8_t>& message);
64
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);
69
70   // Called when receives RPC messages from |receiver_|.
71   void OnMessageFromSink(std::unique_ptr<std::vector<uint8_t>> message);
72
73   void InitializeReceiverRenderer(PipelineStatus status);
74   void OnCourierRendererInitialized(PipelineStatus status);
75   void OnReceiverInitialized(PipelineStatus status);
76   void CompleteInitialize();
77
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);
82
83   PipelineStatusCallback init_cb_;
84
85   bool courier_renderer_initialized_;
86   bool receiver_initialized_;
87
88   // Sender components.
89   std::unique_ptr<RendererController> controller_;
90   std::unique_ptr<CourierRenderer> courier_renderer_;
91
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_;
98
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
103   // message.
104   int sender_renderer_handle_ = openscreen::cast::RpcMessenger::kInvalidHandle;
105
106   base::WeakPtrFactory<End2EndTestRenderer> weak_factory_{this};
107 };
108
109 }  // namespace remoting
110 }  // namespace media
111
112 #endif  // MEDIA_REMOTING_END2END_TEST_RENDERER_H_