jdk/src/share/classes/com/sun/media/sound/AudioFloatFormatConverter.java
changeset 6502 13b20559a04a
parent 5506 202f599c92aa
child 6505 b1faae5e44a3
equal deleted inserted replaced
6501:684810d882b3 6502:13b20559a04a
   173             if (sourceChannels == 1) {
   173             if (sourceChannels == 1) {
   174                 int cs = targetChannels;
   174                 int cs = targetChannels;
   175                 for (int c = 0; c < targetChannels; c++) {
   175                 for (int c = 0; c < targetChannels; c++) {
   176                     for (int i = 0, ix = off + c; i < len2; i++, ix += cs) {
   176                     for (int i = 0, ix = off + c; i < len2; i++, ix += cs) {
   177                         b[ix] = conversion_buffer[i];
   177                         b[ix] = conversion_buffer[i];
   178                         ;
       
   179                     }
   178                     }
   180                 }
   179                 }
   181             } else if (targetChannels == 1) {
   180             } else if (targetChannels == 1) {
   182                 int cs = sourceChannels;
   181                 int cs = sourceChannels;
   183                 for (int i = 0, ix = off; i < len2; i += cs, ix++) {
   182                 for (int i = 0, ix = off; i < len2; i += cs, ix++) {
   184                     b[ix] = conversion_buffer[i];
   183                     b[ix] = conversion_buffer[i];
   185                 }
   184                 }
   186                 for (int c = 1; c < sourceChannels; c++) {
   185                 for (int c = 1; c < sourceChannels; c++) {
   187                     for (int i = c, ix = off; i < len2; i += cs, ix++) {
   186                     for (int i = c, ix = off; i < len2; i += cs, ix++) {
   188                         b[ix] += conversion_buffer[i];
   187                         b[ix] += conversion_buffer[i];
   189                         ;
       
   190                     }
   188                     }
   191                 }
   189                 }
   192                 float vol = 1f / ((float) sourceChannels);
   190                 float vol = 1f / ((float) sourceChannels);
   193                 for (int i = 0, ix = off; i < len2; i += cs, ix++) {
   191                 for (int i = 0, ix = off; i < len2; i += cs, ix++) {
   194                     b[ix] *= vol;
   192                     b[ix] *= vol;
   388             }
   386             }
   389             if (ibuffer_len == -1)
   387             if (ibuffer_len == -1)
   390                 return -1;
   388                 return -1;
   391             if (len < 0)
   389             if (len < 0)
   392                 return 0;
   390                 return 0;
       
   391             int offlen = off + len;
   393             int remain = len / nrofchannels;
   392             int remain = len / nrofchannels;
   394             int destPos = 0;
   393             int destPos = 0;
   395             int in_end = ibuffer_len;
   394             int in_end = ibuffer_len;
   396             while (remain > 0) {
   395             while (remain > 0) {
   397                 if (ibuffer_len >= 0) {
   396                 if (ibuffer_len >= 0) {
   421                 remain -= destPos - preDestPos;
   420                 remain -= destPos - preDestPos;
   422             }
   421             }
   423             for (int c = 0; c < nrofchannels; c++) {
   422             for (int c = 0; c < nrofchannels; c++) {
   424                 int ix = 0;
   423                 int ix = 0;
   425                 float[] buff = cbuffer[c];
   424                 float[] buff = cbuffer[c];
   426                 for (int i = c; i < b.length; i += nrofchannels) {
   425                 for (int i = c + off; i < offlen; i += nrofchannels) {
   427                     b[i] = buff[ix++];
   426                     b[i] = buff[ix++];
   428                 }
   427                 }
   429             }
   428             }
   430             return len - remain * nrofchannels;
   429             return len - remain * nrofchannels;
   431         }
   430         }
   445             }
   444             }
   446 
   445 
   447         }
   446         }
   448 
   447 
   449         public long skip(long len) throws IOException {
   448         public long skip(long len) throws IOException {
   450             if (len > 0)
   449             if (len < 0)
   451                 return 0;
   450                 return 0;
   452             if (skipbuffer == null)
   451             if (skipbuffer == null)
   453                 skipbuffer = new float[1024 * targetFormat.getFrameSize()];
   452                 skipbuffer = new float[1024 * targetFormat.getFrameSize()];
   454             float[] l_skipbuffer = skipbuffer;
   453             float[] l_skipbuffer = skipbuffer;
   455             long remain = len;
   454             long remain = len;