Ejemplo n.º 1
0
void resampler_process(rarch_resampler_t *re, struct resampler_data *data)
{
   double r_step = 1.0 / data->ratio;
   size_t processed_out = 0;

   size_t in_frames = data->input_frames;
   const float *in_data = data->data_in;
   float *out_data = data->data_out;

   for (size_t i = 0; i < in_frames; i++)
   {
      while (re->r_frac <= 1.0)
      {
         re->r_frac += r_step;
         for (unsigned i = 0; i < CHANNELS; i++)
         {
            float res = hermite_kernel((float)re->r_frac, 
                  re->chan_data[i][0], re->chan_data[i][1], re->chan_data[i][2], re->chan_data[i][3]);
            *out_data++ = res;
         }
         processed_out++;
      }

      re->r_frac -= 1.0;
      for (unsigned i = 0; i < CHANNELS; i++)
      {
         re->chan_data[i][0] = re->chan_data[i][1];
         re->chan_data[i][1] = re->chan_data[i][2];
         re->chan_data[i][2] = re->chan_data[i][3];
         re->chan_data[i][3] = *in_data++;
      }
   }

   data->output_frames = processed_out;
}
Ejemplo n.º 2
0
static void resampler_hermite_process(void *re_, struct resampler_data *data)
{
   rarch_hermite_resampler_t *re = (rarch_hermite_resampler_t*)re_;
   double r_step = 1.0 / data->ratio;
   size_t processed_out = 0;

   size_t in_frames = data->input_frames;
   const float *in_data = data->data_in;
   float *out_data = data->data_out;

   size_t i = 0;
   while (i < in_frames)
   {
      while (re->r_frac >= 1.0 && i < in_frames)
      {
         re->r_frac -= 1.0;
         for (unsigned c = 0; c < CHANNELS; c++)
         {
            re->chan_data[c][0] = re->chan_data[c][1];
            re->chan_data[c][1] = re->chan_data[c][2];
            re->chan_data[c][2] = re->chan_data[c][3];
            re->chan_data[c][3] = *in_data++;
         }
         i++;
      }

      while (re->r_frac <= 1.0)
      {
         re->r_frac += r_step;
         for (unsigned c = 0; c < CHANNELS; c++)
         {
            float res = hermite_kernel((float)re->r_frac, 
                  re->chan_data[c][0], re->chan_data[c][1],
                  re->chan_data[c][2], re->chan_data[c][3]);
            *out_data++ = res;
         }
         processed_out++;
      }
   }

   data->output_frames = processed_out;
}