xref: /haiku/src/add-ons/media/plugins/rtsp_streamer/RTSPMediaIO.h (revision 0ba82236bdd42192c263fcda6e1ba8475d0d88ac)
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:
21*0ba82236SDario Casalinuovo 										RTSPMediaIO(BUrl ourUrl);
224c7eafb7SDario Casalinuovo 	virtual								~RTSPMediaIO();
234c7eafb7SDario Casalinuovo 
244c7eafb7SDario Casalinuovo 			status_t					InitCheck() const;
254c7eafb7SDario Casalinuovo 
26d004f813SDario Casalinuovo 	virtual	ssize_t						WriteAt(off_t position,
27d004f813SDario Casalinuovo 											const void* buffer,
284c7eafb7SDario Casalinuovo 											size_t size);
294c7eafb7SDario Casalinuovo 
30b13f52bfSDario Casalinuovo 	virtual	status_t					SetSize(off_t size);
31b13f52bfSDario Casalinuovo 
320957c821SDario Casalinuovo 			void						LoopThread();
330957c821SDario Casalinuovo 			void						ShutdownLoop();
340957c821SDario Casalinuovo private:
350957c821SDario Casalinuovo 			static int32				_LoopThread(void* data);
360957c821SDario Casalinuovo 
37*0ba82236SDario 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 			status_t					fInitErr;
474c7eafb7SDario Casalinuovo };
484c7eafb7SDario Casalinuovo 
494c7eafb7SDario Casalinuovo 
504c7eafb7SDario Casalinuovo class HaikuRTSPClient : public RTSPClient
514c7eafb7SDario Casalinuovo {
524c7eafb7SDario Casalinuovo public:
534c7eafb7SDario Casalinuovo 										HaikuRTSPClient(UsageEnvironment& env,
544c7eafb7SDario Casalinuovo 											char const* rtspURL,
554c7eafb7SDario Casalinuovo 											portNumBits tunnelOverHTTPPortNum,
560957c821SDario Casalinuovo 											RTSPMediaIO* fInputAdapter);
570957c821SDario Casalinuovo 
580957c821SDario Casalinuovo 			void						Close();
594c7eafb7SDario Casalinuovo 
604c7eafb7SDario Casalinuovo 			BInputAdapter*				GetInputAdapter() const;
614c7eafb7SDario Casalinuovo 
624c7eafb7SDario Casalinuovo 			status_t					WaitForInit(bigtime_t timeout);
634c7eafb7SDario Casalinuovo 
644c7eafb7SDario Casalinuovo 			void						NotifyError();
654c7eafb7SDario Casalinuovo 			void						NotifySucces();
664c7eafb7SDario Casalinuovo 
674c7eafb7SDario Casalinuovo protected:
680957c821SDario Casalinuovo 
694c7eafb7SDario Casalinuovo 	virtual 							~HaikuRTSPClient();
704c7eafb7SDario Casalinuovo public:
714c7eafb7SDario Casalinuovo 			MediaSubsessionIterator* 	iter;
724c7eafb7SDario Casalinuovo 			MediaSession*				session;
734c7eafb7SDario Casalinuovo 			MediaSubsession*			subsession;
744c7eafb7SDario Casalinuovo 			TaskToken					streamTimerTask;
754c7eafb7SDario Casalinuovo 			double						duration;
764c7eafb7SDario Casalinuovo 
774c7eafb7SDario Casalinuovo private:
780957c821SDario Casalinuovo 			RTSPMediaIO*				fInterface;
790957c821SDario Casalinuovo 
804c7eafb7SDario Casalinuovo 			port_id						fInitPort;
814c7eafb7SDario Casalinuovo };
824c7eafb7SDario Casalinuovo 
834c7eafb7SDario Casalinuovo #endif
84