a19e7ea401ed8d79a08af390fa8e9e50c0a2c7e9
[platform/framework/web/chromium-efl.git] /
1 // Copyright (c) 2024 Samsung Electronics. 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 TIZEN_SRC_CHROMIUM_IMPL_CONTENT_RENDERER_MEDIA_TIZEN_ELEMENTARY_MEDIA_STREAM_SOURCE_WORKER_THREAD_MEDIA_STREAM_DEMUXER_IMPL_H_
6 #define TIZEN_SRC_CHROMIUM_IMPL_CONTENT_RENDERER_MEDIA_TIZEN_ELEMENTARY_MEDIA_STREAM_SOURCE_WORKER_THREAD_MEDIA_STREAM_DEMUXER_IMPL_H_
7
8 #include "content/renderer/media/tizen/elementary_media_stream_source/any_thread/demuxer_params.h"
9 #include "content/renderer/media/tizen/elementary_media_stream_source/any_thread/media_stream_impl.h"
10 #include "content/renderer/media/tizen/elementary_media_stream_source/worker_thread/append_host.h"
11 #include "content/renderer/media/tizen/elementary_media_stream_source/worker_thread/demuxer.h"
12 #include "content/renderer/media/tizen/elementary_media_stream_source/worker_thread/demuxer_dispatcher_client.h"
13 #include "content/renderer/media/tizen/elementary_media_stream_source/worker_thread/platform_demuxer_adapter_client.h"
14
15 namespace content {
16
17 namespace elementary_media_stream_source {
18
19 namespace any_thread {
20 class DemuxerDispatcher;
21 }  // namespace any_thread
22
23 namespace worker_thread {
24 class AppendClient;
25
26 // Demuxer implementation for MediaResource::Type::STREAM.
27 class MediaStreamDemuxerImpl
28     : public Demuxer,
29       public DemuxerDispatcherClient,
30       public AppendHost,
31       public PlatformDemuxerAdapterClient,
32       public std::enable_shared_from_this<MediaStreamDemuxerImpl> {
33  public:
34   using BackendError = ::elementary_media_stream_source::mojom::BackendError;
35
36   explicit MediaStreamDemuxerImpl(any_thread::DemuxerParams);
37
38   ~MediaStreamDemuxerImpl() override;
39
40   // Demuxer
41   std::shared_ptr<AppendHost> GetAppendHost(TrackType) override;
42   void OnBufferedTimeRangesChanged(media::Ranges<base::TimeDelta>&&) override;
43   void OnInitialConfigReadyForDataStream(const MaybeAudioConfig&,
44                                          const MaybeVideoConfig&) override;
45   void SetAppendClient(TrackType, std::shared_ptr<AppendClient>) override;
46   void SetVideoTextureClient(std::shared_ptr<VideoTextureClient>) override;
47
48   // DemuxerDispatcherClient
49   void OnPipelineResuming() override;
50   void OnPipelineSuspended() override;
51   void OnReadRequested(TrackType) override;
52   void OnSeekDone(base::TimeDelta new_time, uint32_t session_id) override;
53   void OnSessionIdChange(uint32_t session_id) override;
54
55   // AppendHost
56   void NotifyFramerateSet(
57       const media::StreamFramerate::Framerate& framerate) override;
58   void OnReadConfig(AudioTrackConfigPtr) override;
59   void OnReadConfig(VideoTrackConfigPtr) override;
60   void OnReadMediaPackets(TrackType, std::vector<Packet>) override;
61
62   // PlatformDemuxerAdapterClient
63   void RegisterSource(std::shared_ptr<DemuxerClient>,
64                       base::OnceClosure on_source_registered) override;
65
66  private:
67   // void ReleaseVideoTexture(uint64_t packet_id);
68
69   std::array<std::weak_ptr<AppendClient>, (+TrackType::kMaxValue + 1)>
70       append_clients_;
71
72   std::weak_ptr<DemuxerClient> client_;
73   std::weak_ptr<any_thread::DemuxerDispatcher> dispatcher_;
74   PipelineMode pipeline_mode_;
75   // std::shared_ptr<any_thread::LockableDemuxerState> state_;
76   // std::weak_ptr<VideoTextureClient> video_texture_client_;
77 };
78
79 }  // namespace worker_thread
80
81 }  // namespace elementary_media_stream_source
82
83 }  // namespace content
84
85 #endif  // TIZEN_SRC_CHROMIUM_IMPL_CONTENT_RENDERER_MEDIA_TIZEN_ELEMENTARY_MEDIA_STREAM_SOURCE_WORKER_THREAD_MEDIA_STREAM_DEMUXER_IMPL_H_