]> git.sesse.net Git - vlc/blobdiff - include/audio_output.h
* Header cleaning: filled all empty authors fields, added CVS $Id stuff.
[vlc] / include / audio_output.h
index 6f4cfd2ddc5750eb37bccb788fda3ca64c4df1e7..71309dd2a1094609c354ecd0d3db81b8756ede0f 100644 (file)
@@ -2,9 +2,9 @@
  * audio_output.h : audio output thread interface
  *****************************************************************************
  * Copyright (C) 1999, 2000 VideoLAN
+ * $Id: audio_output.h,v 1.31 2001/03/21 13:42:33 sam Exp $
  *
- * Authors:
- * Michel Kaempf <maxx@via.ecp.fr>
+ * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * - Créer un flag destroy dans les fifos audio pour indiquer au thread audio
  *   qu'il peut libérer la mémoire occupée par le buffer de la fifo lorsqu'il
  *   le désire (fin du son ou fin du thread)
- * - Redéplacer les #define dans config.h
  *
  */
 
-/*
- * Defines => "config.h"
- */
-
-/* Default output device. You probably should not change this. */
-#define AOUT_DEFAULT_DEVICE     "/dev/dsp"
-
-/* Default audio output format (AOUT_FMT_S16_NE = Native Endianess) */
-#define AOUT_DEFAULT_FORMAT     AOUT_FMT_S16_NE
-
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_S8 */
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_U8 */
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_S16_BE */
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_S16_LE */
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_U16_BE */
-/* #define AOUT_DEFAULT_FORMAT     AOUT_FMT_U16_LE */
-
-
-/* Default stereo mode (0 stands for mono, 1 for stereo) */
-#define AOUT_DEFAULT_STEREO     1
-/* #define AOUT_DEFAULT_STEREO     0 */
-
-/* Audio output rate, in Hz */
-#define AOUT_MIN_RATE           22050 /* XXX?? */
-#define AOUT_DEFAULT_RATE       44100
-#define AOUT_MAX_RATE           48000
-
-
-/* Volume (default 256) */
-#define VOL     256
-#define VOLSTEP 5
-#define VOLMAX  765
-
-/* Number of audio output frames contained in an audio output fifo.
- * (AOUT_FIFO_SIZE + 1) must be a power of 2, in order to optimise the
- * %(AOUT_FIFO_SIZE + 1) operation with an &AOUT_FIFO_SIZE.
- * With 511 we have at least 511*384/2/48000=2 seconds of sound */
-#define AOUT_FIFO_SIZE          511
-
-/* Maximum number of audio fifos. The value of AOUT_MAX_FIFOS should be a power
- * of two, in order to optimize the '/AOUT_MAX_FIFOS' and '*AOUT_MAX_FIFOS'
- * operations with '>>' and '<<' (gcc changes this at compilation-time) */
-#define AOUT_MAX_FIFOS          2
-
-/* Duration (in microseconds) of an audio output buffer should be :
- * - short, in order to be able to play a new song very quickly (especially a
- *   song from the interface)
- * - long, in order to perform the buffer calculations as few as possible */
-#define AOUT_BUFFER_DURATION    100000
-
 /*
  * Macros
  */
  * order to avoid rounding problems and heavy computations, as the function
  * that handles this structure only uses additions.
  *****************************************************************************/
-typedef struct
+typedef struct aout_increment_s
 {
     /* The remainder is used to keep track of the fractional part of the
      * index. */
@@ -124,11 +73,12 @@ typedef struct
 /*****************************************************************************
  * aout_fifo_t
  *****************************************************************************/
-typedef struct
+typedef struct aout_fifo_s
 {
     /* See the fifo types below */
     int                 i_type;
     boolean_t           b_die;
+    int                 i_fifo;      /* Just to keep track of the fifo index */
 
     int                 i_channels;
     boolean_t           b_stereo;
@@ -171,16 +121,13 @@ typedef struct
 /*****************************************************************************
  * aout_thread_t : audio output thread descriptor
  *****************************************************************************/
-typedef int  (aout_sys_open_t)           ( p_aout_thread_t p_aout );
-typedef int  (aout_sys_reset_t)          ( p_aout_thread_t p_aout );
-typedef int  (aout_sys_setformat_t)      ( p_aout_thread_t p_aout );
-typedef int  (aout_sys_setchannels_t)    ( p_aout_thread_t p_aout );
-typedef int  (aout_sys_setrate_t)        ( p_aout_thread_t p_aout );
-typedef long (aout_sys_getbufinfo_t)     ( p_aout_thread_t p_aout,
-                                           long l_buffer_limit );
-typedef void (aout_sys_playsamples_t)    ( p_aout_thread_t p_aout,
-                                           byte_t *buffer, int i_size );
-typedef void (aout_sys_close_t)          ( p_aout_thread_t p_aout );
+typedef int  (aout_open_t)       ( p_aout_thread_t p_aout );
+typedef int  (aout_setformat_t)  ( p_aout_thread_t p_aout );
+typedef long (aout_getbufinfo_t) ( p_aout_thread_t p_aout,
+                                   long l_buffer_limit );
+typedef void (aout_play_t)       ( p_aout_thread_t p_aout,
+                                   byte_t *buffer, int i_size );
+typedef void (aout_close_t)      ( p_aout_thread_t p_aout );
 
 typedef struct aout_thread_s
 {
@@ -191,15 +138,13 @@ typedef struct aout_thread_s
     vlc_mutex_t         fifos_lock;
     aout_fifo_t         fifo[ AOUT_MAX_FIFOS ];
 
-    /* Plugins */
-    aout_sys_open_t *           p_sys_open;
-    aout_sys_reset_t *          p_sys_reset;
-    aout_sys_setformat_t *      p_sys_setformat;
-    aout_sys_setchannels_t *    p_sys_setchannels;
-    aout_sys_setrate_t *        p_sys_setrate;
-    aout_sys_getbufinfo_t *     p_sys_getbufinfo;
-    aout_sys_playsamples_t *    p_sys_playsamples;
-    aout_sys_close_t *          p_sys_close;
+    /* Plugin used and shortcuts to access its capabilities */
+    struct module_s *   p_module;
+    aout_open_t *       pf_open;
+    aout_setformat_t *  pf_setformat;
+    aout_getbufinfo_t * pf_getbufinfo;
+    aout_play_t *       pf_play;
+    aout_close_t *      pf_close;
 
     void *              buffer;
     /* The s32 buffer is used to mix all the audio fifos together before
@@ -248,18 +193,21 @@ typedef struct aout_thread_s
 #define AOUT_FMT_U16_LE      0x00000080                 /* Little endian U16 */
 #define AOUT_FMT_U16_BE      0x00000100                    /* Big endian U16 */
 
-#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define AOUT_FMT_S16_NE      AOUT_FMT_S16_LE
-#elif __BYTE_ORDER == __BIG_ENDIAN
+#ifdef WORDS_BIGENDIAN
 #define AOUT_FMT_S16_NE      AOUT_FMT_S16_BE
+#else
+#define AOUT_FMT_S16_NE      AOUT_FMT_S16_LE
 #endif
 
 /*****************************************************************************
  * Prototypes
  *****************************************************************************/
 aout_thread_t * aout_CreateThread       ( int *pi_status );
-void            aout_DestroyThread      ( aout_thread_t *p_aout, int *pi_status );
+void            aout_DestroyThread      ( aout_thread_t *p_aout,
+                                          int *pi_status );
 
-
-aout_fifo_t *   aout_CreateFifo         ( aout_thread_t *p_aout, aout_fifo_t *p_fifo );
+aout_fifo_t *   aout_CreateFifo         ( aout_thread_t *p_aout,
+                                          aout_fifo_t *p_fifo );
 void            aout_DestroyFifo        ( aout_fifo_t *p_fifo );
+void            aout_FreeFifo           ( aout_fifo_t *p_fifo );
+