diff src/audacious/output.c @ 4259:92642f860860

- added template for src_flow - vis_flow can work now with FMT_FLOAT, but disabled pending src stuff refactoring
author Eugene Zagidullin <e.asphyx@gmail.com>
date Sat, 09 Feb 2008 01:05:36 +0300
parents 8157686b8115
children 2b7a74fce100 a41fb6bc632a
line wrap: on
line diff
--- a/src/audacious/output.c	Fri Feb 08 22:21:56 2008 +0300
+++ b/src/audacious/output.c	Sat Feb 09 01:05:36 2008 +0300
@@ -45,6 +45,7 @@
 #include "visualization.h"
 
 #include "libSAD.h"
+#include "util.h"
 
 #include <math.h>
 
@@ -83,54 +84,8 @@
     .written_time = get_written_time,
 };
 
-static const struct {
-    AFormat afmt;
-    SAD_sample_format sadfmt;
-} format_table[] = {
-    {FMT_U8, SAD_SAMPLE_U8},
-    {FMT_S8, SAD_SAMPLE_S8},
-
-    {FMT_S16_LE, SAD_SAMPLE_S16_LE},
-    {FMT_S16_BE, SAD_SAMPLE_S16_BE},
-    {FMT_S16_NE, SAD_SAMPLE_S16},
-
-    {FMT_U16_LE, SAD_SAMPLE_U16_LE},
-    {FMT_U16_BE, SAD_SAMPLE_U16_BE},
-    {FMT_U16_NE, SAD_SAMPLE_U16},
-
-    {FMT_S24_LE, SAD_SAMPLE_S24_LE},
-    {FMT_S24_BE, SAD_SAMPLE_S24_BE},
-    {FMT_S24_NE, SAD_SAMPLE_S24},
-    
-    {FMT_U24_LE, SAD_SAMPLE_U24_LE},
-    {FMT_U24_BE, SAD_SAMPLE_U24_BE},
-    {FMT_U24_NE, SAD_SAMPLE_U24},
-
-    {FMT_S32_LE, SAD_SAMPLE_S32_LE},
-    {FMT_S32_BE, SAD_SAMPLE_S32_BE},
-    {FMT_S32_NE, SAD_SAMPLE_S32},
-    
-    {FMT_U32_LE, SAD_SAMPLE_U32_LE},
-    {FMT_U32_BE, SAD_SAMPLE_U32_BE},
-    {FMT_U32_NE, SAD_SAMPLE_U32},
-    
-    {FMT_FLOAT, SAD_SAMPLE_FLOAT},
-    {FMT_FIXED32, SAD_SAMPLE_FIXED32},
-};
-
 static void apply_replaygain_info (ReplayGainInfo *rg_info);
 
-static SAD_sample_format
-sadfmt_from_afmt(AFormat fmt)
-{
-    int i;
-    for (i = 0; i < sizeof(format_table) / sizeof(format_table[0]); i++) {
-        if (format_table[i].afmt == fmt) return format_table[i].sadfmt;
-    }
-
-    return -1;
-}
-
 OutputPlugin *
 get_current_output_plugin(void)
 {
@@ -606,25 +561,30 @@
               )
 {
     static Flow *postproc_flow = NULL;
+    static Flow *legacy_flow = NULL;
     OutputPlugin *op = playback->output;
     gint writeoffs;
 
     if (length <= 0) return;
     gint time = playback->output->written_time();
 
+    if (legacy_flow == NULL)
+    {
+        legacy_flow = flow_new();
+        flow_link_element(legacy_flow, iir_flow);
+        flow_link_element(legacy_flow, effect_flow);
+        flow_link_element(legacy_flow, volumecontrol_flow);
+    }
+    
     if (postproc_flow == NULL)
     {
         postproc_flow = flow_new();
-        flow_link_element(postproc_flow, iir_flow);
-        flow_link_element(postproc_flow, effect_flow);
         flow_link_element(postproc_flow, vis_flow);
-        flow_link_element(postproc_flow, volumecontrol_flow);
     }
 
 #ifdef USE_SRC
     if(src_state != NULL)
       {
-        /*int lrLength = length / nch;*/
         int lrLength = length / FMT_SIZEOF(fmt);
         int overLrLength = (int)floor(lrLength*(src_data.src_ratio+1));
 	if(lengthOfSrcIn < lrLength)
@@ -641,8 +601,11 @@
 	    srcOut = (float*)malloc(sizeof(float)*overLrLength);
 	    wOut = (short int*)malloc(FMT_SIZEOF(op_state.fmt) * overLrLength);
 	  }
-        /*src_short_to_float_array((short int*)ptr, srcIn, lrLength);*/
+        
         SAD_dither_process_buffer(sad_state_to_float, ptr, srcIn, lrLength / nch);
+        /*flow_execute(postproc_flow, time, &srcIn, lrLength * sizeof(float), FMT_FLOAT, op_state.rate, nch);*/ /*FIXME*/
+
+
         src_data.data_in = srcIn;
         src_data.data_out = srcOut;
         src_data.end_of_input = 0;
@@ -654,7 +617,6 @@
           }
         else
           {
-            /*src_float_to_short_array(srcOut, wOut, src_data.output_frames_gen*2);*/
             SAD_dither_process_buffer(sad_state_from_float, srcOut, wOut, src_data.output_frames_gen);
             ptr = wOut;
             length = src_data.output_frames_gen *  op_state.nch * FMT_SIZEOF(op_state.fmt);
@@ -676,9 +638,9 @@
     
     if (op_state.fmt == FMT_S16_NE || (op_state.fmt == FMT_S16_LE && G_BYTE_ORDER == G_LITTLE_ENDIAN) ||
                                       (op_state.fmt == FMT_S16_BE && G_BYTE_ORDER == G_BIG_ENDIAN)) {
-        length = flow_execute(postproc_flow, time, &ptr, length, op_state.fmt, op_state.rate, op_state.nch);
+        length = flow_execute(legacy_flow, time, &ptr, length, op_state.fmt, op_state.rate, op_state.nch);
     } else {
-        AUDDBG("postproc_flow can deal only with S16_NE streams\n"); /*FIXME*/
+        AUDDBG("legacy_flow can deal only with S16_NE streams\n"); /*FIXME*/
     }
 
     writeoffs = 0;