]> git.sesse.net Git - vlc/blobdiff - src/audio_output/common.c
Don't print a message a malloc failed.
[vlc] / src / audio_output / common.c
index fe1887571eaaa495dab22e072946175829363065..fe041c5008d157a6b5dd1495e35721f4470cf098 100644 (file)
@@ -28,7 +28,7 @@
 # include "config.h"
 #endif
 
-#include <vlc/vlc.h>
+#include <vlc_common.h>
 #include <vlc_aout.h>
 #include "aout_internal.h"
 
@@ -36,6 +36,9 @@
  * Instances management (internal and external)
  */
 
+/* Local functions */
+static void aout_Destructor( vlc_object_t * p_this );
+
 /*****************************************************************************
  * aout_New: initialize aout structure
  *****************************************************************************/
@@ -52,9 +55,9 @@ aout_instance_t * __aout_New( vlc_object_t * p_parent )
     }
 
     /* Initialize members. */
-    vlc_mutex_init( p_parent, &p_aout->input_fifos_lock );
-    vlc_mutex_init( p_parent, &p_aout->mixer_lock );
-    vlc_mutex_init( p_parent, &p_aout->output_fifo_lock );
+    vlc_mutex_init( &p_aout->input_fifos_lock );
+    vlc_mutex_init( &p_aout->mixer_lock );
+    vlc_mutex_init( &p_aout->output_fifo_lock );
     p_aout->i_nb_inputs = 0;
     p_aout->mixer.f_multiplier = 1.0;
     p_aout->mixer.b_error = 1;
@@ -62,25 +65,23 @@ aout_instance_t * __aout_New( vlc_object_t * p_parent )
     p_aout->output.b_starving = 1;
 
     var_Create( p_aout, "intf-change", VLC_VAR_BOOL );
-    val.b_bool = VLC_TRUE;
+    val.b_bool = true;
     var_Set( p_aout, "intf-change", val );
 
+    vlc_object_set_destructor( p_aout, aout_Destructor );
+
     return p_aout;
 }
 
 /*****************************************************************************
- * aout_Delete: destroy aout structure
+ * aout_Destructor: destroy aout structure
  *****************************************************************************/
-void aout_Delete( aout_instance_t * p_aout )
+static void aout_Destructor( vlc_object_t * p_this )
 {
-    var_Destroy( p_aout, "intf-change" );
-
+    aout_instance_t * p_aout = (aout_instance_t *)p_this;
     vlc_mutex_destroy( &p_aout->input_fifos_lock );
     vlc_mutex_destroy( &p_aout->mixer_lock );
     vlc_mutex_destroy( &p_aout->output_fifo_lock );
-
-    /* Free structure. */
-    vlc_object_release( p_aout );
 }
 
 
@@ -108,52 +109,54 @@ unsigned int aout_FormatNbChannels( const audio_sample_format_t * p_format )
 }
 
 /*****************************************************************************
- * aout_FormatPrepare : compute the number of bytes per frame & frame length
+ * aout_BitsPerSample : get the number of bits per sample
  *****************************************************************************/
-void aout_FormatPrepare( audio_sample_format_t * p_format )
+unsigned int aout_BitsPerSample( vlc_fourcc_t i_format )
 {
-    int i_result;
-
-    switch ( p_format->i_format )
+    switch( i_format )
     {
     case VLC_FOURCC('u','8',' ',' '):
     case VLC_FOURCC('s','8',' ',' '):
-        i_result = 1;
-        break;
+        return 8;
 
     case VLC_FOURCC('u','1','6','l'):
     case VLC_FOURCC('s','1','6','l'):
     case VLC_FOURCC('u','1','6','b'):
     case VLC_FOURCC('s','1','6','b'):
-        i_result = 2;
-        break;
+        return 16;
 
     case VLC_FOURCC('u','2','4','l'):
     case VLC_FOURCC('s','2','4','l'):
     case VLC_FOURCC('u','2','4','b'):
     case VLC_FOURCC('s','2','4','b'):
-        i_result = 3;
-        break;
+        return 24;
 
     case VLC_FOURCC('f','l','3','2'):
     case VLC_FOURCC('f','i','3','2'):
-        i_result = 4;
-        break;
-
-    case VLC_FOURCC('s','p','d','i'):
-    case VLC_FOURCC('s','p','d','b'): /* Big endian spdif output */
-    case VLC_FOURCC('a','5','2',' '):
-    case VLC_FOURCC('d','t','s',' '):
-    case VLC_FOURCC('m','p','g','a'):
-    case VLC_FOURCC('m','p','g','3'):
+        return 32;
+
+    case VLC_FOURCC('f','l','6','4'):
+        return 64;
+
     default:
         /* For these formats the caller has to indicate the parameters
          * by hand. */
-        return;
+        return 0;
     }
+}
 
-    p_format->i_bytes_per_frame = i_result * aout_FormatNbChannels( p_format );
-    p_format->i_frame_length = 1;
+/*****************************************************************************
+ * aout_FormatPrepare : compute the number of bytes per frame & frame length
+ *****************************************************************************/
+void aout_FormatPrepare( audio_sample_format_t * p_format )
+{
+    p_format->i_bitspersample = aout_BitsPerSample( p_format->i_format );
+    if( p_format->i_bitspersample > 0 )
+    {
+        p_format->i_bytes_per_frame = ( p_format->i_bitspersample / 8 )
+                                    * aout_FormatNbChannels( p_format );
+        p_format->i_frame_length = 1;
+    }
 }
 
 /*****************************************************************************
@@ -491,10 +494,10 @@ int aout_CheckChannelReorder( const uint32_t *pi_chan_order_in,
                               uint32_t i_channel_mask,
                               int i_channels, int *pi_chan_table )
 {
-    vlc_bool_t b_chan_reorder = VLC_FALSE;
+    bool b_chan_reorder = false;
     int i, j, k, l;
 
-    if( i_channels > AOUT_CHAN_MAX ) return VLC_FALSE;
+    if( i_channels > AOUT_CHAN_MAX ) return false;
 
     for( i = 0, j = 0; pi_chan_order_in[i]; i++ )
     {
@@ -510,7 +513,7 @@ int aout_CheckChannelReorder( const uint32_t *pi_chan_order_in,
 
     for( i = 0; i < i_channels; i++ )
     {
-        if( pi_chan_table[i] != i ) b_chan_reorder = VLC_TRUE;
+        if( pi_chan_table[i] != i ) b_chan_reorder = true;
     }
 
     return b_chan_reorder;