/[svn]/libgig/trunk/src/gig.cpp
ViewVC logotype

Diff of /libgig/trunk/src/gig.cpp

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

revision 371 by persson, Thu Feb 10 19:16:31 2005 UTC revision 372 by persson, Fri Feb 11 18:58:07 2005 UTC
# Line 52  namespace gig { namespace { Line 52  namespace gig { namespace {
52      }      }
53    
54      void Decompress16(int compressionmode, const unsigned char* params,      void Decompress16(int compressionmode, const unsigned char* params,
55                        int srcStep, const unsigned char* pSrc, int16_t* pDst,                        int srcStep, int dstStep,
56                          const unsigned char* pSrc, int16_t* pDst,
57                        unsigned long currentframeoffset,                        unsigned long currentframeoffset,
58                        unsigned long copysamples)                        unsigned long copysamples)
59      {      {
# Line 61  namespace gig { namespace { Line 62  namespace gig { namespace {
62                  pSrc += currentframeoffset * srcStep;                  pSrc += currentframeoffset * srcStep;
63                  while (copysamples) {                  while (copysamples) {
64                      *pDst = get16(pSrc);                      *pDst = get16(pSrc);
65                      pDst += 2;                      pDst += dstStep;
66                      pSrc += srcStep;                      pSrc += srcStep;
67                      copysamples--;                      copysamples--;
68                  }                  }
# Line 80  namespace gig { namespace { Line 81  namespace gig { namespace {
81                      dy -= int8_t(*pSrc);                      dy -= int8_t(*pSrc);
82                      y  -= dy;                      y  -= dy;
83                      *pDst = y;                      *pDst = y;
84                      pDst += 2;                      pDst += dstStep;
85                      pSrc += srcStep;                      pSrc += srcStep;
86                      copysamples--;                      copysamples--;
87                  }                  }
# Line 89  namespace gig { namespace { Line 90  namespace gig { namespace {
90      }      }
91    
92      void Decompress24(int compressionmode, const unsigned char* params,      void Decompress24(int compressionmode, const unsigned char* params,
93                        const unsigned char* pSrc, int16_t* pDst,                        int dstStep, const unsigned char* pSrc, int16_t* pDst,
94                        unsigned long currentframeoffset,                        unsigned long currentframeoffset,
95                        unsigned long copysamples)                        unsigned long copysamples)
96      {      {
# Line 121  namespace gig { namespace { Line 122  namespace gig { namespace {
122  #define COPY_ONE(x)                             \  #define COPY_ONE(x)                             \
123          SKIP_ONE(x);                            \          SKIP_ONE(x);                            \
124          *pDst = y >> 9;                         \          *pDst = y >> 9;                         \
125          pDst += 2          pDst += dstStep
126    
127          switch (compressionmode) {          switch (compressionmode) {
128              case 2: // 24 bit uncompressed              case 2: // 24 bit uncompressed
129                  pSrc += currentframeoffset * 3;                  pSrc += currentframeoffset * 3;
130                  while (copysamples) {                  while (copysamples) {
131                      *pDst = get24(pSrc) >> 8;                      *pDst = get24(pSrc) >> 8;
132                      pDst += 2;                      pDst += dstStep;
133                      pSrc += 3;                      pSrc += 3;
134                      copysamples--;                      copysamples--;
135                  }                  }
# Line 831  namespace gig { namespace { Line 832  namespace gig { namespace {
832                              const unsigned char* const param_r = pSrc;                              const unsigned char* const param_r = pSrc;
833                              if (mode_r != 2) pSrc += 12;                              if (mode_r != 2) pSrc += 12;
834    
835                              Decompress24(mode_l, param_l, pSrc, pDst, skipsamples, copysamples);                              Decompress24(mode_l, param_l, 2, pSrc, pDst, skipsamples, copysamples);
836                              Decompress24(mode_r, param_r, pSrc + rightChannelOffset, pDst + 1,                              Decompress24(mode_r, param_r, 2, pSrc + rightChannelOffset, pDst + 1,
837                                           skipsamples, copysamples);                                           skipsamples, copysamples);
838                              pDst += copysamples << 1;                              pDst += copysamples << 1;
839                          }                          }
840                          else { // Mono                          else { // Mono
841                              Decompress24(mode_l, param_l, pSrc, pDst, skipsamples, copysamples);                              Decompress24(mode_l, param_l, 1, pSrc, pDst, skipsamples, copysamples);
842                              pDst += copysamples;                              pDst += copysamples;
843                          }                          }
844                      }                      }
# Line 850  namespace gig { namespace { Line 851  namespace gig { namespace {
851                              if (mode_r) pSrc += 4;                              if (mode_r) pSrc += 4;
852    
853                              step = (2 - mode_l) + (2 - mode_r);                              step = (2 - mode_l) + (2 - mode_r);
854                              Decompress16(mode_l, param_l, step, pSrc, pDst, skipsamples, copysamples);                              Decompress16(mode_l, param_l, step, 2, pSrc, pDst, skipsamples, copysamples);
855                              Decompress16(mode_r, param_r, step, pSrc + (2 - mode_l), pDst + 1,                              Decompress16(mode_r, param_r, step, 2, pSrc + (2 - mode_l), pDst + 1,
856                                           skipsamples, copysamples);                                           skipsamples, copysamples);
857                              pDst += copysamples << 1;                              pDst += copysamples << 1;
858                          }                          }
859                          else { // Mono                          else { // Mono
860                              step = 2 - mode_l;                              step = 2 - mode_l;
861                              Decompress16(mode_l, param_l, step, pSrc, pDst, skipsamples, copysamples);                              Decompress16(mode_l, param_l, step, 1, pSrc, pDst, skipsamples, copysamples);
862                              pDst += copysamples;                              pDst += copysamples;
863                          }                          }
864                      }                      }

Legend:
Removed from v.371  
changed lines
  Added in v.372

  ViewVC Help
Powered by ViewVC