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
2004-08-13 16:05:03 +00:00
by the Free Software Foundation ; either version 2 of the License ,
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
* All sample cache related routines */
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-01-27 03:05:40 +01:00
pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here (pa_volume_t) -1 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-01-27 03:05:40 +01:00
pa_volume_t volume /**< Volume to play this sample with. Starting with 0.9.15 you may pass here (pa_volume_t) -1 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