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 (boost::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, boost::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... | |
boost::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 _, _auxStreamer, _soundHandler, gnash::sound::sound_handler::attach_aux_streamer(), fetchWrapper(), and gnash::sound::sound_handler::unplugInputStream().
Referenced by gnash::NetStream_as::play().
void gnash::BufferedAudioStreamer::cleanAudioQueue | ( | ) |
References _audioQueue, and _audioQueueMutex.
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 _auxStreamer, _soundHandler, and gnash::sound::sound_handler::unplugInputStream().
Referenced by gnash::NetStream_as::close(), and gnash::NetStream_as::~NetStream_as().
unsigned int gnash::BufferedAudioStreamer::fetch | ( | boost::int16_t * | samples, |
unsigned int | nSamples, | ||
bool & | eof | ||
) |
Fetch samples from the audio queue.
References _audioQueue, _audioQueueMutex, _audioQueueSize, gnash::BufferedAudioStreamer::CursoredBuffer::m_ptr, gnash::BufferedAudioStreamer::CursoredBuffer::m_size, and gnash::key::n.
Referenced by fetchWrapper().
|
static |
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.
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(), and gnash::NetStream_as::update().
boost::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(), and gnash::NetStream_as::update().
size_t gnash::BufferedAudioStreamer::_audioQueueSize |
sound::InputStream* gnash::BufferedAudioStreamer::_auxStreamer |
Referenced by attachAuxStreamer(), detachAuxStreamer(), and push().
sound::sound_handler* gnash::BufferedAudioStreamer::_soundHandler |
Referenced by attachAuxStreamer(), and detachAuxStreamer().