Пример #1
0
/**
 * Pulseaudio callback when new data is available.
 */
static void
stream_read_callback (pa_stream * s,
		      size_t length,
		      void *userdata)
{
  const void *data;

  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
	      "Got %u/%u bytes of PCM data\n",
	      length,
	      pcm_length);

  GNUNET_assert (NULL != s);
  GNUNET_assert (length > 0);
  if (stdio_event)
    mainloop_api->io_enable (stdio_event, PA_IO_EVENT_OUTPUT);

  if (pa_stream_peek (s, (const void **) &data, &length) < 0)
  {
    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
		_("pa_stream_peek() failed: %s\n"),
		pa_strerror (pa_context_errno (context)));
    quit (1);
    return;
  }
  GNUNET_assert (NULL != data);
  GNUNET_assert (length > 0);
  if (NULL != transmit_buffer)
  {
    transmit_buffer = pa_xrealloc (transmit_buffer,
				   transmit_buffer_length + length);
    memcpy (&transmit_buffer[transmit_buffer_length],
	    data,
	    length);
    transmit_buffer_length += length;
  }
  else
  {
    transmit_buffer = pa_xmalloc (length);
    memcpy (transmit_buffer, data, length);
    transmit_buffer_length = length;
    transmit_buffer_index = 0;
  }
  pa_stream_drop (s);
  packetizer ();
}
Пример #2
0
 channel_ptr channel_builder::build( void ) {
   static channel_deleter deleter;
   channel* chan = nullptr;
   do {
     codex::threading::lock_guard< codex::threading::mutex > guard(_lock);
     if ( !_channels.empty() ) {
       chan = _channels.back();
       _channels.pop_back();
     }
   } while (0);
   if (chan== nullptr ) {
     chan = new channel();
   }
   chan->add_ref();
   channel_ptr ptr( chan , deleter );
   ptr->set_builder( this );
   ptr->set_loop( &loop());
   ptr->set_packetizer( packetizer());
   auto handler0 = handler();
   handler0->channel_ptr(ptr);
   ptr->set_handler( handler0 );
   return ptr;
 }