]> git.sesse.net Git - vlc/blobdiff - src/audio_output/audio_output.c
* Mandatory step for video output IV and the audio output quality
[vlc] / src / audio_output / audio_output.c
index e4fa2bb5d4f23e2b5e83ece5086b8e497fda5bd8..6ad459b7d0662b41253a30ed844b67722c3592c6 100644 (file)
@@ -2,6 +2,7 @@
  * audio_output.c : audio output thread
  *****************************************************************************
  * Copyright (C) 1999, 2000, 2001 VideoLAN
+ * $Id: audio_output.c,v 1.59 2001/05/01 04:18:18 sam Exp $
  *
  * Authors: Michel Kaempf <maxx@via.ecp.fr>
  *
@@ -38,6 +39,9 @@
 #include "defs.h"
 
 #include <unistd.h>                                              /* getpid() */
+#ifdef WIN32                   /* getpid() for win32 is located in process.h */
+#include <process.h>
+#endif
 
 #include <stdio.h>                                           /* "intf_msg.h" */
 #include <stdlib.h>                            /* calloc(), malloc(), free() */
@@ -78,8 +82,7 @@ aout_thread_t *aout_CreateThread( int *pi_status )
     }
 
     /* Choose the best module */
-    p_aout->p_module = module_Need( p_main->p_bank,
-                                    MODULE_CAPABILITY_AOUT, NULL );
+    p_aout->p_module = module_Need( MODULE_CAPABILITY_AOUT, NULL );
 
     if( p_aout->p_module == NULL )
     {
@@ -101,7 +104,7 @@ aout_thread_t *aout_CreateThread( int *pi_status )
      */
     if ( p_aout->pf_open( p_aout ) )
     {
-        module_Unneed( p_main->p_bank, p_aout->p_module );
+        module_Unneed( p_aout->p_module );
         free( p_aout );
         return( NULL );
     }
@@ -110,24 +113,32 @@ aout_thread_t *aout_CreateThread( int *pi_status )
     {
         intf_ErrMsg( "aout error: null sample rate" );
         p_aout->pf_close( p_aout );
-        module_Unneed( p_main->p_bank, p_aout->p_module );
+        module_Unneed( p_aout->p_module );
         free( p_aout );
         return( NULL );
     }
 
-    p_aout->b_stereo = ( p_aout->i_channels == 2 ) ? 1 : 0; /* FIXME: only works
-                                                   for i_channels == 1 or 2 ??*/
+    /* special setting for ac3 pass-through mode */
+    if( main_GetIntVariable( AOUT_SPDIF_VAR, 0 ) )
+    {
+        p_aout->i_format   = AOUT_FMT_AC3;
+        p_aout->i_channels = 1;
+        p_aout->l_rate = 48000;
+    }
+
+    /* FIXME: only works for i_channels == 1 or 2 ?? */
+    p_aout->b_stereo = ( p_aout->i_channels == 2 ) ? 1 : 0;
 
     if ( p_aout->pf_setformat( p_aout ) )
     {
         p_aout->pf_close( p_aout );
-        module_Unneed( p_main->p_bank, p_aout->p_module );
+        module_Unneed( p_aout->p_module );
         free( p_aout );
         return( NULL );
     }
 
     /* Initialize the volume level */
-    p_aout->vol = VOLUME_DEFAULT;
+    p_aout->i_vol = VOLUME_DEFAULT;
     
     /* FIXME: maybe it would be cleaner to change SpawnThread prototype
      * see vout to handle status correctly ?? however, it is not critical since
@@ -135,7 +146,7 @@ aout_thread_t *aout_CreateThread( int *pi_status )
     if( aout_SpawnThread( p_aout ) )
     {
         p_aout->pf_close( p_aout );
-        module_Unneed( p_main->p_bank, p_aout->p_module );
+        module_Unneed( p_aout->p_module );
         free( p_aout );
         return( NULL );
     }
@@ -205,8 +216,13 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
             l_bytes = 1 * sizeof(s16) * p_aout->l_units;
             aout_thread = (void *)aout_S16MonoThread;
             break;
+        case AOUT_FMT_AC3:
+            intf_WarnMsg( 2, "aout info: ac3 pass-through thread" );
+            l_bytes = 0;
+            aout_thread = (void *)aout_SpdifThread;
+            break;
 
-                default:
+        default:
             intf_ErrMsg( "aout error: unknown audio output format (%i)",
                          p_aout->i_format );
             return( -1 );
@@ -242,7 +258,6 @@ static int aout_SpawnThread( aout_thread_t * p_aout )
             l_bytes = 2 * sizeof(s16) * p_aout->l_units;
             aout_thread = (void *)aout_S16StereoThread;
             break;
-
         default:
             intf_ErrMsg( "aout error: unknown audio output format %i",
                          p_aout->i_format );
@@ -321,7 +336,7 @@ void aout_DestroyThread( aout_thread_t * p_aout, int *pi_status )
     p_aout->pf_close( p_aout );
 
     /* Release the aout module */
-    module_Unneed( p_main->p_bank, p_aout->p_module );
+    module_Unneed( p_aout->p_module );
 
     /* Free structure */
     free( p_aout );