xref: /haiku/src/add-ons/media/plugins/rtsp_streamer/RTSPMediaIO.h (revision 413b622176de12aa6d6bd9c8ae32409f1fe28a50)
14c7eafb7SDario Casalinuovo /*
24c7eafb7SDario Casalinuovo  * Copyright 2016, Dario Casalinuovo. All rights reserved.
34c7eafb7SDario Casalinuovo  * Distributed under the terms of the MIT License.
44c7eafb7SDario Casalinuovo  */
54c7eafb7SDario Casalinuovo #ifndef _RTSP_MEDIA_IO_H
64c7eafb7SDario Casalinuovo #define _RTSP_MEDIA_IO_H
74c7eafb7SDario Casalinuovo 
84c7eafb7SDario Casalinuovo 
94c7eafb7SDario Casalinuovo #include <AdapterIO.h>
104c7eafb7SDario Casalinuovo #include <Url.h>
114c7eafb7SDario Casalinuovo 
124c7eafb7SDario Casalinuovo #include "rtsp.h"
134c7eafb7SDario Casalinuovo 
144c7eafb7SDario Casalinuovo 
150957c821SDario Casalinuovo class HaikuRTSPClient;
160957c821SDario Casalinuovo 
170957c821SDario Casalinuovo 
184c7eafb7SDario Casalinuovo class RTSPMediaIO : public BAdapterIO
194c7eafb7SDario Casalinuovo {
204c7eafb7SDario Casalinuovo public:
210ba82236SDario Casalinuovo 										RTSPMediaIO(BUrl ourUrl);
224c7eafb7SDario Casalinuovo 	virtual								~RTSPMediaIO();
234c7eafb7SDario Casalinuovo 
24d004f813SDario Casalinuovo 	virtual	ssize_t						WriteAt(off_t position,
25d004f813SDario Casalinuovo 											const void* buffer,
264c7eafb7SDario Casalinuovo 											size_t size);
274c7eafb7SDario Casalinuovo 
28b13f52bfSDario Casalinuovo 	virtual	status_t					SetSize(off_t size);
29b13f52bfSDario Casalinuovo 
30*413b6221SDario Casalinuovo 	virtual status_t					Open();
31*413b6221SDario Casalinuovo 
320957c821SDario Casalinuovo 			void						LoopThread();
330957c821SDario Casalinuovo 			void						ShutdownLoop();
340957c821SDario Casalinuovo private:
350957c821SDario Casalinuovo 			static int32				_LoopThread(void* data);
360957c821SDario Casalinuovo 
370ba82236SDario Casalinuovo 			BUrl						fUrl;
380957c821SDario Casalinuovo 
390957c821SDario Casalinuovo 			HaikuRTSPClient*			fClient;
404c7eafb7SDario Casalinuovo 			UsageEnvironment*			fEnv;
410957c821SDario Casalinuovo 			TaskScheduler*				fScheduler;
420957c821SDario Casalinuovo 
430957c821SDario Casalinuovo 			char						fLoopWatchVariable;
440957c821SDario Casalinuovo 			thread_id					fLoopThread;
454c7eafb7SDario Casalinuovo };
464c7eafb7SDario Casalinuovo 
474c7eafb7SDario Casalinuovo 
484c7eafb7SDario Casalinuovo class HaikuRTSPClient : public RTSPClient
494c7eafb7SDario Casalinuovo {
504c7eafb7SDario Casalinuovo public:
514c7eafb7SDario Casalinuovo 										HaikuRTSPClient(UsageEnvironment& env,
524c7eafb7SDario Casalinuovo 											char const* rtspURL,
534c7eafb7SDario Casalinuovo 											portNumBits tunnelOverHTTPPortNum,
540957c821SDario Casalinuovo 											RTSPMediaIO* fInputAdapter);
550957c821SDario Casalinuovo 
560957c821SDario Casalinuovo 			void						Close();
574c7eafb7SDario Casalinuovo 
584c7eafb7SDario Casalinuovo 			BInputAdapter*				GetInputAdapter() const;
594c7eafb7SDario Casalinuovo 
604c7eafb7SDario Casalinuovo 			status_t					WaitForInit(bigtime_t timeout);
614c7eafb7SDario Casalinuovo 
624c7eafb7SDario Casalinuovo 			void						NotifyError();
634c7eafb7SDario Casalinuovo 			void						NotifySucces();
644c7eafb7SDario Casalinuovo 
654c7eafb7SDario Casalinuovo protected:
660957c821SDario Casalinuovo 
674c7eafb7SDario Casalinuovo 	virtual 							~HaikuRTSPClient();
684c7eafb7SDario Casalinuovo public:
694c7eafb7SDario Casalinuovo 			MediaSubsessionIterator* 	iter;
704c7eafb7SDario Casalinuovo 			MediaSession*				session;
714c7eafb7SDario Casalinuovo 			MediaSubsession*			subsession;
724c7eafb7SDario Casalinuovo 			TaskToken					streamTimerTask;
734c7eafb7SDario Casalinuovo 			double						duration;
744c7eafb7SDario Casalinuovo 
754c7eafb7SDario Casalinuovo private:
760957c821SDario Casalinuovo 			RTSPMediaIO*				fInterface;
770957c821SDario Casalinuovo 
784c7eafb7SDario Casalinuovo 			port_id						fInitPort;
794c7eafb7SDario Casalinuovo };
804c7eafb7SDario Casalinuovo 
814c7eafb7SDario Casalinuovo #endif
82