]> git.sesse.net Git - vlc/commitdiff
headphone: fix memory allocation
authorIlkka Ollakka <ileoo@videolan.org>
Sat, 22 Mar 2014 11:51:56 +0000 (13:51 +0200)
committerIlkka Ollakka <ileoo@videolan.org>
Sat, 22 Mar 2014 11:56:34 +0000 (13:56 +0200)
Don't just set i_buffer to higher than it was with allocation.

could Ref #10445

modules/audio_filter/channel_mixer/headphone.c

index 92c1a3b24b8a9702e54deb2f25d3b94101794002..73180dd242240a990e71442573146c7f7a560571 100644 (file)
@@ -105,7 +105,7 @@ struct atomic_operation_t
 struct filter_sys_t
 {
     size_t i_overflow_buffer_size;/* in bytes */
-    uint8_t * p_overflow_buffer;
+    float * p_overflow_buffer;
     unsigned int i_nb_atomic_operations;
     struct atomic_operation_t * p_atomic_operations;
 };
@@ -315,7 +315,7 @@ static int Init( vlc_object_t *p_this, struct filter_sys_t * p_data
                 = p_data->p_atomic_operations[i].i_delay * 2 * sizeof (float);
         }
     }
-    p_data->p_overflow_buffer = malloc( p_data->i_overflow_buffer_size );
+    p_data->p_overflow_buffer = (float *)malloc( p_data->i_overflow_buffer_size );
     if( p_data->p_overflow_buffer == NULL )
     {
         free( p_data->p_atomic_operations );
@@ -337,9 +337,9 @@ static void DoWork( filter_t * p_filter,
     int i_output_nb = aout_FormatNbChannels( &p_filter->fmt_out.audio );
 
     float * p_in = (float*) p_in_buf->p_buffer;
-    uint8_t * p_out;
-    uint8_t * p_overflow;
-    uint8_t * p_slide;
+    float * p_out;
+    float * p_overflow;
+    float * p_slide;
 
     size_t i_overflow_size;     /* in bytes */
     size_t i_out_size;          /* in bytes */
@@ -351,10 +351,7 @@ static void DoWork( filter_t * p_filter,
     unsigned int i_delay;
     double d_amplitude_factor;
 
-    /* out buffer characterisitcs */
-    p_out_buf->i_nb_samples = p_in_buf->i_nb_samples;
-    p_out_buf->i_buffer = p_in_buf->i_buffer * i_output_nb / i_input_nb;
-    p_out = p_out_buf->p_buffer;
+    p_out = (float *)p_out_buf->p_buffer;
     i_out_size = p_out_buf->i_buffer;
 
     /* Slide the overflow buffer */
@@ -506,9 +503,9 @@ static block_t *Convert( filter_t *p_filter, block_t *p_block )
         return NULL;
     }
 
-    size_t i_out_size = p_block->i_nb_samples *
-      p_filter->fmt_out.audio.i_bitspersample/8 *
-        aout_FormatNbChannels( &(p_filter->fmt_out.audio) );
+    size_t i_out_size = p_block->i_buffer *
+        aout_FormatNbChannels( &(p_filter->fmt_out.audio) ) /
+        aout_FormatNbChannels( &(p_filter->fmt_in.audio) );
 
     block_t *p_out = block_Alloc( i_out_size );
     if( !p_out )