| 
									
										
										
										
											2023-07-04 05:02:19 -05:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * Copyright (c) 2023, Gregory Bertilson <zaggy1024@gmail.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * SPDX-License-Identifier: BSD-2-Clause | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-11-21 02:47:45 +04:00
										 |  |  | #include <LibCore/Timer.h>
 | 
					
						
							| 
									
										
										
										
											2024-08-28 12:08:38 +02:00
										 |  |  | #include <LibMedia/Audio/PlaybackStream.h>
 | 
					
						
							| 
									
										
										
										
											2023-07-04 05:02:19 -05:00
										 |  |  | #include <LibWeb/Platform/AudioCodecPlugin.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Web::Platform { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AudioCodecPluginAgnostic final : public AudioCodecPlugin { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |     static ErrorOr<NonnullOwnPtr<AudioCodecPluginAgnostic>> create(NonnullRefPtr<Audio::Loader> const&); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     virtual void resume_playback() override; | 
					
						
							|  |  |  |     virtual void pause_playback() override; | 
					
						
							|  |  |  |     virtual void set_volume(double) override; | 
					
						
							|  |  |  |     virtual void seek(double) override; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-16 23:45:44 -06:00
										 |  |  |     virtual AK::Duration duration() override; | 
					
						
							| 
									
										
										
										
											2023-07-04 05:02:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2024-07-16 23:45:44 -06:00
										 |  |  |     explicit AudioCodecPluginAgnostic(NonnullRefPtr<Audio::Loader> loader, AK::Duration, NonnullRefPtr<Core::Timer> update_timer); | 
					
						
							| 
									
										
										
										
											2023-07-04 05:02:19 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |     void update_timestamp(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     NonnullRefPtr<Audio::Loader> m_loader; | 
					
						
							|  |  |  |     RefPtr<Audio::PlaybackStream> m_output { nullptr }; | 
					
						
							| 
									
										
										
										
											2024-07-16 23:45:44 -06:00
										 |  |  |     AK::Duration m_duration { AK::Duration::zero() }; | 
					
						
							|  |  |  |     AK::Duration m_last_resume_in_media_time { AK::Duration::zero() }; | 
					
						
							|  |  |  |     AK::Duration m_last_resume_in_device_time { AK::Duration::zero() }; | 
					
						
							|  |  |  |     AK::Duration m_last_good_device_time { AK::Duration::zero() }; | 
					
						
							| 
									
										
										
										
											2023-07-04 05:02:19 -05:00
										 |  |  |     Core::EventLoop& m_main_thread_event_loop; | 
					
						
							|  |  |  |     NonnullRefPtr<Core::Timer> m_update_timer; | 
					
						
							|  |  |  |     bool m_paused { true }; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } |