/[rdesktop]/sourceforge.net/trunk/rdesktop/rdpsnd_dsp.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /sourceforge.net/trunk/rdesktop/rdpsnd_dsp.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1258 by stargo, Sun Sep 17 14:41:16 2006 UTC revision 1263 by stargo, Sun Sep 17 18:08:51 2006 UTC
# Line 35  rdpsnd_dsp_softvol_set(uint16 left, uint Line 35  rdpsnd_dsp_softvol_set(uint16 left, uint
35          DEBUG(("rdpsnd_dsp_softvol_set: left: %u, right: %u\n", left, right));          DEBUG(("rdpsnd_dsp_softvol_set: left: %u, right: %u\n", left, right));
36  }  }
37    
38  inline void  void
39  rdpsnd_dsp_softvol(unsigned char *inbuffer, unsigned char *outbuffer, unsigned int size,  rdpsnd_dsp_softvol(unsigned char *buffer, unsigned int size, WAVEFORMATEX * format)
                    WAVEFORMATEX * format)  
40  {  {
41          unsigned int factor_left, factor_right;          unsigned int factor_left, factor_right;
42          unsigned char *posin = inbuffer;          unsigned char *posin = buffer;
43          unsigned char *posout = outbuffer;          unsigned char *posout = buffer;
44    
45            if ((softvol_left == MAX_VOLUME) && (softvol_right == MAX_VOLUME))
46                    return;
47    
48          factor_left = (softvol_left * 256) / 65535;          factor_left = (softvol_left * 256) / 65535;
49          factor_right = (softvol_right * 256) / 65535;          factor_right = (softvol_right * 256) / 65535;
# Line 53  rdpsnd_dsp_softvol(unsigned char *inbuff Line 55  rdpsnd_dsp_softvol(unsigned char *inbuff
55    
56          if (format->wBitsPerSample == 8)          if (format->wBitsPerSample == 8)
57          {          {
58                  char val;                  sint8 val;
59    
60                  while (posout < outbuffer + size)                  while (posout < buffer + size)
61                  {                  {
62                          /* Left */                          /* Left */
63                          val = *posin++;                          val = *posin++;
# Line 70  rdpsnd_dsp_softvol(unsigned char *inbuff Line 72  rdpsnd_dsp_softvol(unsigned char *inbuff
72          }          }
73          else          else
74          {          {
75                  short val;                  sint16 val;
76    
77                  while (posout < outbuffer + size)                  while (posout < buffer + size)
78                  {                  {
79                          /* Left */                          /* Left */
80                          val = *posin++;                          val = *posin++;
# Line 90  rdpsnd_dsp_softvol(unsigned char *inbuff Line 92  rdpsnd_dsp_softvol(unsigned char *inbuff
92                  }                  }
93          }          }
94    
95          DEBUG(("using softvol with shifts left: %d, right: %d (%d/%d)\n", factor_left, factor_right,          DEBUG(("using softvol with factors left: %d, right: %d (%d/%d)\n", factor_left,
96                 format->wBitsPerSample, format->nChannels));                 factor_right, format->wBitsPerSample, format->nChannels));
97  }  }
98    
99  unsigned char *  void
100  rdpsnd_dsp_process(unsigned char *inbuffer, unsigned int size, struct audio_driver *current_driver,  rdpsnd_dsp_swapbytes(unsigned char *buffer, unsigned int size, WAVEFORMATEX * format)
                    WAVEFORMATEX * format)  
101  {  {
102          unsigned char *outbuffer;          int i;
103            uint8 swap;
104    
105          outbuffer = xmalloc(size);          if (format->wBitsPerSample == 8)
106                    return;
107    
108          /* Software volume control */          for (i = 0; i < size; i += 2)
         if (current_driver->wave_out_volume == rdpsnd_dsp_softvol_set)  
         {  
                 rdpsnd_dsp_softvol(inbuffer, outbuffer, size, format);  
         }  
         else  
109          {          {
110                  memcpy(outbuffer, inbuffer, size);                  swap = *(buffer + i);
111                    *(buffer + i) = *(buffer + i + 1);
112                    *(buffer + i + 1) = swap;
113          }          }
114    }
115    
116    
117    STREAM
118    rdpsnd_dsp_process(STREAM s, struct audio_driver *current_driver, WAVEFORMATEX * format)
119    {
120            static struct stream out;
121    
122            /* softvol and byteswap do not change the amount of data they
123               return, so they can operate on the input-stream */
124            if (current_driver->wave_out_volume == rdpsnd_dsp_softvol_set)
125                    rdpsnd_dsp_softvol(s->data, s->size, format);
126    
127    #ifdef B_ENDIAN
128            if (current_driver->need_byteswap_on_be)
129                    rdpsnd_dsp_swapbytes(s->data, s->size, format);
130    #endif
131    
132            /* FIXME: where do we lose the 4 bytes referenced here? */
133            out.data = xmalloc(s->size - 4);
134    
135            memcpy(out.data, s->data + 4, s->size - 4);
136    
137            out.size = s->size - 4;
138            out.p = out.data;
139            out.end = out.p + out.size;
140    
141          return outbuffer;          return &out;
142  }  }

Legend:
Removed from v.1258  
changed lines
  Added in v.1263

  ViewVC Help
Powered by ViewVC 1.1.26