Gnash  0.8.11dev
Classes | Public Types | Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
gnash::BufferedAudioStreamer Class Reference

Buffered AudioStreamer. More...

#include <NetStream_as.h>

Classes

class  CursoredBuffer
 A buffer with a cursor state. More...
 

Public Types

typedef boost::ptr_deque< CursoredBufferAudioQueue
 

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
 

Detailed Description

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.

Member Typedef Documentation

§ AudioQueue

Constructor & Destructor Documentation

§ BufferedAudioStreamer()

gnash::BufferedAudioStreamer::BufferedAudioStreamer ( sound::sound_handler handler)
Parameters
handlerSound handler to use for attach/detach

Member Function Documentation

§ attachAuxStreamer()

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().

§ cleanAudioQueue()

void gnash::BufferedAudioStreamer::cleanAudioQueue ( )

§ detachAuxStreamer()

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().

§ fetch()

unsigned int gnash::BufferedAudioStreamer::fetch ( std::int16_t *  samples,
unsigned int  nSamples,
bool &  eof 
)

§ fetchWrapper()

unsigned int gnash::BufferedAudioStreamer::fetchWrapper ( void *  owner,
std::int16_t *  samples,
unsigned int  nSamples,
bool &  eof 
)
static

Fetch samples from the audio queue.

References fetch(), and gnash::ActiveRelay::owner().

Referenced by attachAuxStreamer().

§ push()

void gnash::BufferedAudioStreamer::push ( CursoredBuffer audio)

Push a buffer to the audio queue.

Parameters
audioSamples buffer, ownership transferred.
Todo:
: take something simpler (SimpleBuffer?)

References _audioQueue, _audioQueueMutex, _audioQueueSize, _auxStreamer, and gnash::BufferedAudioStreamer::CursoredBuffer::m_size.

Referenced by gnash::NetStream_as::seek().

Member Data Documentation

§ _audioQueue

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().

§ _audioQueueMutex

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().

§ _audioQueueSize

size_t gnash::BufferedAudioStreamer::_audioQueueSize

Number of bytes in the audio queue, protected by _audioQueueMutex.

Referenced by fetch(), and push().

§ _auxStreamer

sound::InputStream* gnash::BufferedAudioStreamer::_auxStreamer

Referenced by push().

§ _soundHandler

sound::sound_handler* gnash::BufferedAudioStreamer::_soundHandler

The documentation for this class was generated from the following files: