]> git.sesse.net Git - vlc/commitdiff
Uses correct buffer size with OSS output
authorRafaël Carré <funman@videolan.org>
Thu, 30 Nov 2006 14:39:52 +0000 (14:39 +0000)
committerRafaël Carré <funman@videolan.org>
Thu, 30 Nov 2006 14:39:52 +0000 (14:39 +0000)
modules/audio_output/oss.c

index 856247bc36427cc33ebcbdf21d029e6c0d4c0483..299a82b641167a519fd1df48fc36de316dd4d29d 100644 (file)
@@ -80,7 +80,7 @@ struct aout_sys_t
 
 /* This must be a power of 2. */
 #define FRAME_SIZE 1024
-#define FRAME_COUNT 4
+#define FRAME_COUNT 32
 
 /*****************************************************************************
  * Local prototypes
@@ -104,7 +104,7 @@ static mtime_t BufferDuration( aout_instance_t * p_aout );
 
 vlc_module_begin();
     set_shortname( "OSS" );
-    set_description( _("Linux OSS audio output") );
+    set_description( _("UNIX OSS audio output") );
 
     set_category( CAT_AUDIO );
     set_subcategory( SUBCAT_AUDIO_AOUT );
@@ -472,9 +472,9 @@ static int Open( vlc_object_t *p_this )
 
         /* i_fragment = xxxxyyyy where: xxxx        is fragtotal
          *                              1 << yyyy   is fragsize */
-        i_fragments = 0;
-        i_frame_size = FRAME_SIZE * p_aout->output.output.i_bytes_per_frame;
-        while( i_frame_size >>= 1 )
+        i_frame_size = ((uint64_t)p_aout->output.output.i_bytes_per_frame * p_aout->output.output.i_rate * 65536) / (48000 * 2 * 2) / FRAME_COUNT;
+        i_fragments = 4;
+        while( i_fragments < 12 && (1U << i_fragments) < i_frame_size )
         {
             ++i_fragments;
         }