Gnash
0.8.11dev
|
Buffered AudioStreamer. More...
#include <NetStream_as.h>
Classes | |
class | CursoredBuffer |
A buffer with a cursor state. More... | |
Public Types | |
typedef boost::ptr_deque< CursoredBuffer > | AudioQueue |
Public Member Functions | |
BufferedAudioStreamer (sound::sound_handler *handler) | |
void | cleanAudioQueue () |
void | attachAuxStreamer () |
Attach the aux streamer. More... | |
void | detachAuxStreamer () |
Detach the aux streamer. More... | |
unsigned int | fetch (std::int16_t *samples, unsigned int nSamples, bool &eof) |
Fetch samples from the audio queue. More... | |
void | push (CursoredBuffer *audio) |
Push a buffer to the audio queue. More... | |
Static Public Member Functions | |
static unsigned int | fetchWrapper (void *owner, std::int16_t *samples, unsigned int nSamples, bool &eof) |
Fetch samples from the audio queue. More... | |
Public Attributes | |
sound::sound_handler * | _soundHandler |
AudioQueue | _audioQueue |
size_t | _audioQueueSize |
Number of bytes in the audio queue, protected by _audioQueueMutex. More... | |
std::mutex | _audioQueueMutex |
sound::InputStream * | _auxStreamer |
Buffered AudioStreamer.
This class you create passing a sound handler, which will be used to implement attach/detach and eventually throw away buffers of sound when no sound handler is given.
Then you push samples to a buffer of it and can request attach/detach operations. When attached, the sound handler will fetch samples from the buffer, in a thread-safe way.
typedef boost::ptr_deque<CursoredBuffer> gnash::BufferedAudioStreamer::AudioQueue |
gnash::BufferedAudioStreamer::BufferedAudioStreamer | ( | sound::sound_handler * | handler | ) |
handler | Sound handler to use for attach/detach |
void gnash::BufferedAudioStreamer::attachAuxStreamer | ( | ) |
Attach the aux streamer.
On success, _auxStreamerAttached will be set to true. Won't attach again if already attached.
References _, gnash::sound::sound_handler::attach_aux_streamer(), gnash::key::e, fetchWrapper(), gnash::log_debug(), gnash::log_error(), and gnash::sound::sound_handler::unplugInputStream().
Referenced by gnash::NetStream_as::play(), and gnash::NetStream_as::time().
void gnash::BufferedAudioStreamer::cleanAudioQueue | ( | ) |
References _, _audioQueue, _audioQueueMutex, gnash::fn_call::arg(), gnash::NetStream_as::bufferLength(), gnash::NetStream_as::bufferTime(), gnash::NetStream_as::bytesLoaded(), gnash::NetStream_as::bytesTotal(), gnash::NetStream_as::close(), gnash::Global_as::createFunction(), gnash::as_object::get_prototype(), gnash::NetStream_as::getCurrentFPS(), gnash::getGlobal(), gnash::VM::getNative(), gnash::getVM(), IF_VERBOSE_ASCODING_ERRORS, gnash::as_object::init_member(), gnash::as_object::init_readonly_property(), gnash::NetConnection_as::isConnected(), gnash::NetStream_as::isConnected(), gnash::isNativeType(), gnash::log_aserror(), LOG_ONCE, gnash::log_unimpl(), gnash::fn_call::nargs, gnash::key::o, gnash::NetStream_as::pause(), gnash::NetStream_as::pauseModePause, gnash::NetStream_as::pauseModeToggle, gnash::NetStream_as::pauseModeUnPause, gnash::NetStream_as::play(), gnash::NetStream_as::seek(), gnash::NetStream_as::setBufferTime(), gnash::NetStream_as::setNetCon(), gnash::as_object::setRelay(), gnash::fn_call::this_ptr, gnash::NetStream_as::time(), gnash::toBool(), gnash::toNumber(), gnash::toObject(), and UNUSED.
Referenced by gnash::NetStream_as::close(), gnash::NetStream_as::seek(), and gnash::NetStream_as::~NetStream_as().
void gnash::BufferedAudioStreamer::detachAuxStreamer | ( | ) |
Detach the aux streamer.
_auxStreamerAttached will be set to true. Won't detach if not attached.
References gnash::log_debug(), and gnash::sound::sound_handler::unplugInputStream().
Referenced by gnash::NetStream_as::close(), gnash::NetStream_as::time(), and gnash::NetStream_as::~NetStream_as().
unsigned int gnash::BufferedAudioStreamer::fetch | ( | std::int16_t * | samples, |
unsigned int | nSamples, | ||
bool & | eof | ||
) |
Fetch samples from the audio queue.
References _audioQueue, _audioQueueMutex, _audioQueueSize, gnash::log_debug(), gnash::BufferedAudioStreamer::CursoredBuffer::m_ptr, gnash::BufferedAudioStreamer::CursoredBuffer::m_size, and gnash::key::n.
Referenced by fetchWrapper().
|
static |
Fetch samples from the audio queue.
References fetch(), and gnash::ActiveRelay::owner().
Referenced by attachAuxStreamer().
void gnash::BufferedAudioStreamer::push | ( | CursoredBuffer * | audio | ) |
Push a buffer to the audio queue.
audio | Samples buffer, ownership transferred. |
References _audioQueue, _audioQueueMutex, _audioQueueSize, _auxStreamer, and gnash::BufferedAudioStreamer::CursoredBuffer::m_size.
Referenced by gnash::NetStream_as::seek().
AudioQueue gnash::BufferedAudioStreamer::_audioQueue |
This is where audio frames are pushed by ::advance and consumed by sound_handler callback (audio_streamer)
Referenced by cleanAudioQueue(), fetch(), push(), gnash::NetStream_as::seek(), and gnash::NetStream_as::update().
std::mutex gnash::BufferedAudioStreamer::_audioQueueMutex |
The queue needs to be protected as sound_handler callback is invoked by a separate thread (dunno if it makes sense actually)
Referenced by cleanAudioQueue(), fetch(), push(), gnash::NetStream_as::seek(), and gnash::NetStream_as::update().
size_t gnash::BufferedAudioStreamer::_audioQueueSize |
sound::InputStream* gnash::BufferedAudioStreamer::_auxStreamer |
Referenced by push().
sound::sound_handler* gnash::BufferedAudioStreamer::_soundHandler |