2006-02-16 23:11:28 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# ifndef fooscachehfoo 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# define fooscachehfoo 
 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/***
 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-19 21:53:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  This  file  is  part  of  PulseAudio . 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-04 13:43:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2007-02-13 15:35:19 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  Copyright  2004 - 2006  Lennart  Poettering 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  Copyright  2006  Pierre  Ossman  < ossman @ cendio . se >  for  Cendio  AB 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-06-19 21:53:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  PulseAudio  is  free  software ;  you  can  redistribute  it  and / or  modify 
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 14:58:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  it  under  the  terms  of  the  GNU  Lesser  General  Public  License  as  published 
							 
						 
					
						
							
								
									
										
										
										
											2009-03-03 20:23:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  by  the  Free  Software  Foundation ;  either  version  2.1  of  the  License , 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  or  ( at  your  option )  any  later  version . 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-04 13:43:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-06-19 21:53:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  PulseAudio  is  distributed  in  the  hope  that  it  will  be  useful ,  but 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  WITHOUT  ANY  WARRANTY ;  without  even  the  implied  warranty  of 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  MERCHANTABILITY  or  FITNESS  FOR  A  PARTICULAR  PURPOSE .  See  the  GNU 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  General  Public  License  for  more  details . 
							 
						 
					
						
							
								
									
										
										
										
											2007-01-04 13:43:45 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-11-14 14:58:54 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  You  should  have  received  a  copy  of  the  GNU  Lesser  General  Public  License 
							 
						 
					
						
							
								
									
										
										
										
											2006-06-19 21:53:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								  along  with  PulseAudio ;  if  not ,  write  to  the  Free  Software 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								  Foundation ,  Inc . ,  59  Temple  Place ,  Suite  330 ,  Boston ,  MA  02111 - 1307 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								  USA . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								* * */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <sys/types.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-06-19 21:53:48 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <pulse/context.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <pulse/stream.h> 
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# include  <pulse/cdecl.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2009-01-27 02:36:42 +01:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								# include  <pulse/version.h> 
 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2006-04-13 13:45:38 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** \page scache Sample Cache
 
							 
						 
					
						
							
								
									
										
										
										
											2006-04-09 19:31:09 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ section  overv_sec  Overview 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  The  sample  cache  provides  a  simple  way  of  overcoming  high  network  latencies 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  and  reducing  bandwidth .  Instead  of  streaming  a  sound  precisely  when  it 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  should  be  played ,  it  is  stored  on  the  server  and  only  the  command  to  start 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  playing  it  needs  to  be  sent . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ section  create_sec  Creation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  To  create  a  sample ,  the  normal  stream  API  is  used  ( see  \ ref  streams ) .  The 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  function  pa_stream_connect_upload ( )  will  make  sure  the  stream  is  stored  as 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  a  sample  on  the  server . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  To  complete  the  upload ,  pa_stream_finish_upload ( )  is  called  and  the  sample 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  will  receive  the  same  name  as  the  stream .  If  the  upload  should  be  aborted , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  simply  call  pa_stream_disconnect ( ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ section  play_sec  Playing  samples 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  To  play  back  a  sample ,  simply  call  pa_context_play_sample ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ code 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  pa_operation  * o ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  o  =  pa_context_play_sample ( my_context , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             " sample2 " ,        // Name of my sample
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             NULL ,             // Use default sink
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             PA_VOLUME_NORM ,   // Full volume
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             NULL ,             // Don't need a callback
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             NULL 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *                             ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  if  ( o ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *      pa_operation_unref ( o ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ endcode 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  \ section  rem_sec  Removing  samples 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  When  a  sample  is  no  longer  needed ,  it  should  be  removed  on  the  server  to 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  save  resources .  The  sample  is  deleted  using  pa_context_remove_sample ( ) . 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-08-14 20:25:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** \file
 
							 
						 
					
						
							
								
									
										
										
										
											2010-10-03 13:41:27 -05:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								 *  All  sample  cache  related  routines 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 * 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  See  also  \ subpage  scache 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 */ 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-08-14 20:25:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								PA_C_DECL_BEGIN 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-15 23:34:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** Callback prototype for pa_context_play_sample_with_proplist(). The
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  idx  value  is  the  index  of  the  sink  input  object ,  or 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  PA_INVALID_INDEX  on  failure .  \ since  0.9 .11  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								typedef  void  ( * pa_context_play_sample_cb_t ) ( pa_context  * c ,  uint32_t  idx ,  void  * userdata ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-08-14 20:25:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** Make this stream a sample upload stream */ 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-20 22:41:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								int  pa_stream_connect_upload ( pa_stream  * s ,  size_t  length ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-15 23:34:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** Finish the sample upload, the stream name will become the sample
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  name .  You  cancel  a  sample  upload  by  issuing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  pa_stream_disconnect ( )  */ 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-20 22:41:02 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								int  pa_stream_finish_upload ( pa_stream  * s ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-15 23:34:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** Remove a sample from the sample cache. Returns an operation object which may be used to cancel the operation while it is running */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								pa_operation *  pa_context_remove_sample ( pa_context  * c ,  const  char  * name ,  pa_context_success_cb_t  cb ,  void  * userdata ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								/** Play a sample from the sample cache to the specified device. If
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  the  latter  is  NULL  use  the  default  sink .  Returns  an  operation 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  object  */ 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-20 17:09:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								pa_operation *  pa_context_play_sample ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        pa_context  * c                /**< Context */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  char  * name             /**< Name of the sample to play */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  char  * dev              /**< Sink to play this sample on */ , 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-07 19:53:39 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        pa_volume_t  volume           /**< Volume to play this sample with. Starting with 0.9.15 you may pass here PA_VOLUME_INVALID which will leave the decision about the volume to the server side which is a good idea. */  , 
							 
						 
					
						
							
								
									
										
										
										
											2006-02-20 17:09:39 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        pa_context_success_cb_t  cb   /**< Call this function after successfully starting playback, or NULL */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        void  * userdata               /**< Userdata to pass to the callback */ ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2008-05-15 23:34:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								/** Play a sample from the sample cache to the specified device,
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  allowing  specification  of  a  property  list  for  the  playback 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  stream .  If  the  latter  is  NULL  use  the  default  sink .  Returns  an 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								 *  operation  object .  \ since  0.9 .11  */ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								pa_operation *  pa_context_play_sample_with_proplist ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        pa_context  * c                    /**< Context */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  char  * name                 /**< Name of the sample to play */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        const  char  * dev                  /**< Sink to play this sample on */ , 
							 
						 
					
						
							
								
									
										
										
										
											2009-09-07 19:53:39 +02:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        pa_volume_t  volume               /**< Volume to play this sample with. Starting with 0.9.15 you may pass here PA_VOLUME_INVALID which will leave the decision about the volume to the server side which is a good idea.  */  , 
							 
						 
					
						
							
								
									
										
										
										
											2008-05-15 23:34:41 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								        pa_proplist  * proplist            /**< Property list for this sound. The property list of the cached entry will be merged into this property list */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        pa_context_play_sample_cb_t  cb   /**< Call this function after successfully starting playback, or NULL */ , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								        void  * userdata                   /**< Userdata to pass to the callback */ ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2004-08-14 20:25:32 +00:00 
										
									 
								 
							 
							
								
									
										 
									 
								
							 
							
								 
							 
							
							
								PA_C_DECL_END 
							 
						 
					
						
							
								
									
										
										
										
											2004-08-13 16:05:03 +00:00 
										
									 
								 
							 
							
								
							 
							
								 
							 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							 
							
							
								# endif