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.
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_
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"
17 namespace elementary_media_stream_source {
19 namespace any_thread {
20 class DemuxerDispatcher;
21 } // namespace any_thread
23 namespace worker_thread {
26 // Demuxer implementation for MediaResource::Type::STREAM.
27 class MediaStreamDemuxerImpl
29 public DemuxerDispatcherClient,
31 public PlatformDemuxerAdapterClient,
32 public std::enable_shared_from_this<MediaStreamDemuxerImpl> {
34 using BackendError = ::elementary_media_stream_source::mojom::BackendError;
36 explicit MediaStreamDemuxerImpl(any_thread::DemuxerParams);
38 ~MediaStreamDemuxerImpl() override;
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;
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;
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;
62 // PlatformDemuxerAdapterClient
63 void RegisterSource(std::shared_ptr<DemuxerClient>,
64 base::OnceClosure on_source_registered) override;
67 // void ReleaseVideoTexture(uint64_t packet_id);
69 std::array<std::weak_ptr<AppendClient>, (+TrackType::kMaxValue + 1)>
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_;
79 } // namespace worker_thread
81 } // namespace elementary_media_stream_source
83 } // namespace content
85 #endif // TIZEN_SRC_CHROMIUM_IMPL_CONTENT_RENDERER_MEDIA_TIZEN_ELEMENTARY_MEDIA_STREAM_SOURCE_WORKER_THREAD_MEDIA_STREAM_DEMUXER_IMPL_H_