⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soundconsumer.h

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 H
字号:
//// (c) Yuri Kiryanov, openh323@kiryanov.com// for www.Openh323.org by Equivalence//// Portions: 1998-1999, Be Incorporated//#if !defined( _SoundConsumer_h )#define _SoundConsumer_h#include <BufferConsumer.h>#include "SoundUtils.h"//	To use this Consumer://	1. Create Record and Notify hooks, or subclass SoundConsumer//	   if you'd rather use the inheritance hierarchy.//	   * The Record function should do whatever you want to do//	     when you receive a buffer.//	   * The Notify function should handle whatever events//	     you wish to handle (defined in SoundUtil.h).//	2: Create an instance of SoundConsumer, giving it the//	   appropriate hook functions. Or, create an instance of an//	   appropriate subclass if you've made one.//	3: Register your new Consumer with the MediaRoster.//	4: Connect your Consumer to some Producer.//	5: Start or Stop the Consumer if your hook functions//	   implement behavior for these kinds of events.//	   Seek the Consumer to set the offset of the timestamps that//	   your Record function will see.//	6: When you're done, disconnect the Consumer, then delete it.class SoundConsumer :	public BBufferConsumer{public:		SoundConsumer(				const char * name,				SoundProcessFunc recordFunc = NULL,				SoundNotifyFunc notifyFunc = NULL,				void * cookie = NULL);		~SoundConsumer();		//	This function is OK to call from any thread.		status_t SetHooks(				SoundProcessFunc recordFunc = NULL,				SoundNotifyFunc notifyFunc = NULL,				void * cookie = NULL);		//	The MediaNode interfacepublic:virtual	port_id ControlPort() const;virtual	BMediaAddOn* AddOn(				int32 * internal_id) const;	/* Who instantiated you -- or NULL for app class */protected:virtual	void Start(				bigtime_t performance_time);virtual	void Stop(				bigtime_t performance_time,				bool immediate);virtual	void Seek(				bigtime_t media_time,				bigtime_t performance_time);virtual	void SetRunMode(				run_mode mode);virtual	void TimeWarp(				bigtime_t at_real_time,				bigtime_t to_performance_time);virtual	void Preroll();virtual	void SetTimeSource(				BTimeSource * time_source);virtual	status_t HandleMessage(				int32 message,				const void * data,				size_t size);		//	The BufferConsumer interfacevirtual	status_t AcceptFormat(				const media_destination & dest,				media_format * format);virtual	status_t GetNextInput( /* cookie starts at 0 */				int32 * cookie,				media_input * out_input);virtual	void DisposeInputCookie(				int32 cookie);virtual	void BufferReceived(				BBuffer * buffer);virtual	void ProducerDataStatus(				const media_destination & for_whom,				int32 status,				bigtime_t at_media_time);virtual	status_t GetLatencyFor(				const media_destination & for_whom,				bigtime_t * out_latency,				media_node_id * out_timesource);virtual	status_t Connected(				const media_source & producer,				const media_destination & where,				const media_format & with_format,				media_input * out_input);virtual	void Disconnected(				const media_source & producer,				const media_destination & where);virtual	status_t FormatChanged(				const media_source & producer,				const media_destination & consumer, 				int32 from_change_count,				const media_format & format);protected:		//	Functions called when no hooks are installed.		//	OK to override instead of installing hooks.virtual	void Record(				bigtime_t time,				const void * data,				size_t size,				const media_raw_audio_format & format);virtual	void Notify(				int32 cause,				...);private:		SoundProcessFunc m_recordHook;		SoundNotifyFunc m_notifyHook;		void * m_cookie;		media_input m_input;		thread_id m_thread;		port_id m_port;		// The times we need to deal with		// My notation for times: tr = real time,		// tp = performance time, tm = media time.		bigtime_t m_trTimeout;	// how long to wait on the input port		bigtime_t m_tpSeekAt;	// when we Seek		bigtime_t m_tmSeekTo;	// target time for Seek		// The transformation from media to peformance time.		// d = p - m, so m + d = p.		// Media time is generally governed by the Seek		// function. In our node, we simply use media time as		// the time that we report to the record hook function.		// If we were a producer node, we might use media time		// to track where we were in playing a certain piece		// of media. But we aren't.		bigtime_t m_delta;				// State variables		bool m_seeking;		// a Seek is pending		//	Functions to calculate timing values. OK to override.		//	ProcessingLatency is the time it takes to process a buffer;		//	TotalLatency is returned to producer; Timeout is passed		//	to call to read_port_etc() in service thread loop.virtual	bigtime_t Timeout();virtual	bigtime_t ProcessingLatency();virtual bigtime_t TotalLatency();		//	The actual thread doing the workstatic	status_t ThreadEntry(				void * obj);		void ServiceThread();		void DoHookChange(				void * msg);};#endif	/* _SoundConsumer_h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -