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

📄 sdl_audio.cpp

📁 彩信浏览器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		m_lock.leave();		unregister_renderer(this);		m_lock.enter();	}		if (m_audio_src) {		m_audio_src->release();		m_audio_src = NULL;	}		if (m_transition_engine) {		delete m_transition_engine;		m_transition_engine = NULL;	}	m_is_playing = false;	m_lock.leave();}voidgui::sdl::sdl_audio_renderer::set_intransition(const lib::transition_info* info) { 	if (m_transition_engine)		delete m_transition_engine;	m_intransition = info;	m_transition_engine = new smil2::audio_transition_engine();	m_transition_engine->init(m_event_processor, false, info);}voidgui::sdl::sdl_audio_renderer::start_outtransition(const lib::transition_info* info) { 	if (m_transition_engine)		delete m_transition_engine;	m_outtransition = info;	m_transition_engine = new smil2::audio_transition_engine();	m_transition_engine->init(m_event_processor, true, info);}intgui::sdl::sdl_audio_renderer::get_data(int bytes_wanted, Uint8 **ptr){	m_lock.enter();		// turned this of because I think here also happends a get_read_ptr when it should not	//XXXX sometimes we get this one in News when changing video itmes		assert(m_is_playing);	int rv;	*ptr = NULL;	if (m_is_paused||!m_audio_src) { 		rv = 0;		m_read_ptr_called = false;	} else {		AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::get_data: m_audio_src->get_read_ptr(), m_audio_src=0x%x, this=0x%x", (void*) m_audio_src, (void*) this);		m_read_ptr_called = true;		rv = m_audio_src->size();		*ptr = (Uint8 *) m_audio_src->get_read_ptr();		if (rv) assert(*ptr);		if (rv > bytes_wanted)			rv = bytes_wanted;		// Also set volume(s)		m_volcount = 0;		if (m_dest) {			const common::region_info *info = m_dest->get_info();			double level = info ? info->get_soundlevel() : 1.0;			if (m_intransition || m_outtransition) {				level = m_transition_engine->get_volume(level);			}			double leftlevel, rightlevel;			leftlevel = rightlevel = level;			if (info) {				common::sound_alignment align = info->get_soundalign();				if (align == common::sa_left) {					rightlevel = 0.0;				}				if (align == common::sa_right) {					leftlevel = 0.0;				}			}			if (leftlevel == 1.0 && rightlevel == 1.0)				m_volcount = 0;			else if (leftlevel == rightlevel) {				m_volcount = 1;				m_volumes[0] = leftlevel;			} else {				m_volcount = 2;				m_volumes[0] = leftlevel;				m_volumes[1] = rightlevel;			}		}	}	m_lock.leave();	AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::get_data(0x%x) return rv=%d, m_volcount=%d, m_volumes=[%f,%f]",this,rv,m_volcount,m_volcount>=1?m_volumes[0]:1,m_volcount==2?m_volumes[1]:m_volcount==1?0:1);	return rv;}voidgui::sdl::sdl_audio_renderer::get_data_done(int size){	m_lock.enter();	// Acknowledge that we are ready with the data provided to us	// at the previous callback time	//AM_DBG if (m_audio_src) lib::logger::get_logger()->debug("sdl_audio_renderer::get_data_done: m_src->readdone(%d), %d more", size, m_audio_src->size()-size);	//if (size) {	if (m_audio_src) {		if (m_read_ptr_called) {			AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::get_data_done: calling m_audio_src->readdone(%d) m_audio_src=0x%x, this = (x%x)", size, (void*) m_audio_src, (void*) this);			m_audio_src->readdone(size);			m_read_ptr_called = false;		}	}	bool still_busy;	still_busy = (size != 0);	still_busy |= restart_audio_input();	if (!still_busy) {		AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::playdone: calling m_context->stopped() this = (x%x)",this);		// We cannot call unregister_renderer from here, because we are called from the		// SDL callback and already holding the m_global_lock. So, in stead		// we use the event processor to unregister ourselves later.		lib::event *e = new readdone_callback(this, &sdl_audio_renderer::stop);		m_event_processor->add_event(e, 0, ambulant::lib::ep_med);		if (m_audio_src) {			m_audio_src->stop();			m_audio_src->release();			m_audio_src = NULL;		}		m_lock.leave();		if (m_context) {			m_context->stopped(m_cookie, 0);		} else {			AM_DBG lib::logger::get_logger()->trace("sdl_audio_renderer(0x%x): m_context is  NULL", (void*)this);		}		return;	}	m_lock.leave();}boolgui::sdl::sdl_audio_renderer::restart_audio_input(){	// private method - no need to lock.	if (!m_audio_src || m_audio_src->end_of_file() || !m_is_playing) {		// No more data.		return false;	}	if (m_audio_src->size() < s_min_buffer_size_bytes ) {		// Start reading 		lib::event *e = new readdone_callback(this, &sdl_audio_renderer::data_avail);		m_audio_src->start(m_event_processor, e);	}	return true;}voidgui::sdl::sdl_audio_renderer::data_avail(){	m_lock.enter();	//assert(m_audio_src);	if (!m_audio_src) {						AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::data_avail: m_audio_src already deleted");		m_lock.leave();		return;	}	AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::data_avail: %d bytes available", m_audio_src->size());		restart_audio_input();		m_lock.leave();	AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::data_avail: done");}	boolgui::sdl::sdl_audio_renderer::is_paused(){	m_lock.enter();	bool rv;	rv = m_is_paused;	m_lock.leave();	return rv;}boolgui::sdl::sdl_audio_renderer::is_stopped(){	m_lock.enter();	bool rv;	rv = !m_is_playing;	m_lock.leave();	return rv;}boolgui::sdl::sdl_audio_renderer::is_playing(){	m_lock.enter();	bool rv;	rv = m_is_playing;	m_lock.leave();	return rv;}voidgui::sdl::sdl_audio_renderer::stop(){	m_lock.enter();	AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::stop(0x%x)",(void*)this);	if (m_is_playing) {		m_lock.leave();		unregister_renderer(this);		// XXX Should we call stopped_callback?		m_context->stopped(m_cookie, 0);		m_lock.enter();	}	m_is_playing = false;	if (m_audio_src) {		m_audio_src->stop();		m_audio_src->release();		m_audio_src = NULL;	}	m_lock.leave();}voidgui::sdl::sdl_audio_renderer::pause(common::pause_display d){	m_lock.enter();	m_is_paused = true;	m_lock.leave();}voidgui::sdl::sdl_audio_renderer::resume(){	m_lock.enter();	m_is_paused = false;	m_lock.leave();}voidgui::sdl::sdl_audio_renderer::start(double where){	m_lock.enter();    if (!m_node) abort();			AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer.start(0x%x)", (void *)this);	if (m_audio_src) {			if (m_audio_src->get_start_time() != m_audio_src->get_clip_begin())			lib::logger::get_logger()->trace("sdl_audio_renderer: warning: datasource does not support clipBegin");					lib::event *e = new readdone_callback(this, &sdl_audio_renderer::data_avail);		AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer::start(): m_audio_src->start(0x%x, 0x%x) this = (x%x)m_audio_src=0x%x", (void*)m_event_processor, (void*)e, this, (void*)m_audio_src);		m_audio_src->start(m_event_processor, e);		m_is_playing = true;		m_is_paused = false;		m_lock.leave();		register_renderer(this);		if (m_intransition && ! m_transition_engine) {			m_transition_engine = new smil2::audio_transition_engine();			m_transition_engine->init(m_event_processor, false, m_intransition);		}	} else {		AM_DBG lib::logger::get_logger()->debug("sdl_audio_renderer.start: no datasource");		m_lock.leave();		m_context->stopped(m_cookie, 0);	}}voidgui::sdl::sdl_audio_renderer::seek(double where){	lib::logger::get_logger()->trace("sdl_audio_renderer: seek(%f) not implemented", where);}common::duration gui::sdl::sdl_audio_renderer::get_dur(){	common::duration rv(false, 0.0);	m_lock.enter();	if (m_audio_src)		rv = m_audio_src->get_dur();	m_lock.leave();	return rv;}

⌨️ 快捷键说明

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