~ubuntu-branches/ubuntu/hoary/kdemultimedia/hoary

« back to all changes in this revision

Viewing changes to mpeglib/lib/splay/mpeglayer1.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Martin Schulze
  • Date: 2003-01-22 15:00:51 UTC
  • Revision ID: james.westby@ubuntu.com-20030122150051-uihwkdoxf15mi1tn
Tags: upstream-2.2.2
ImportĀ upstreamĀ versionĀ 2.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* MPEG/WAVE Sound library
 
2
 
 
3
   (C) 1997 by Jung woo-jae */
 
4
 
 
5
// Mpeglayer1.cc
 
6
// It's for MPEG Layer 1
 
7
 
 
8
 
 
9
 
 
10
#include "mpegsound.h"
 
11
#include "synthesis.h"
 
12
 
 
13
// Tables for layer 1
 
14
static const REAL factortable[15] = 
 
15
{
 
16
  0.0, 
 
17
  (1.0/2.0)    * (4.0/3.0),         (1.0/4.0)     * (8.0/7.0),
 
18
  (1.0/8.0)    * (16.0/15.0),       (1.0/16.0)    * (32.0/31.0),
 
19
  (1.0/32.0)   * (64.0/63.0),       (1.0/64.0)    * (128.0/127.0),
 
20
  (1.0/128.0)  * (256.0/255.0),     (1.0/256.0)   * (512.0/511.0),
 
21
  (1.0/512.0)  * (1024.0/1023.0),   (1.0/1024.0)  * (2048.0/2047.0),
 
22
  (1.0/2048.0) * (4096.0/4095.0),   (1.0/4096.0)  * (8192.0/8191.0),
 
23
  (1.0/8192.0) * (16384.0/16383.0), (1.0/16384.0) * (32768.0/32767.0)
 
24
};
 
25
 
 
26
static const REAL offsettable[15] = 
 
27
{
 
28
  0.0, 
 
29
  ((1.0/2.0)-1.0)    * (4.0/3.0),         ((1.0/4.0)-1.0)     * (8.0/7.0), 
 
30
  ((1.0/8.0)-1.0)    * (16.0/15.0),       ((1.0/16.0)-1.0)    * (32.0/31.0),
 
31
  ((1.0/32.0)-1.0)   * (64.0/63.0),       ((1.0/64.0)-1.0)    * (128.0/127.0),
 
32
  ((1.0/128.0)-1.0)  * (256.0/255.0),     ((1.0/256.0)-1.0)   * (512.0/511.0),
 
33
  ((1.0/512.0)-1.0)  * (1024.0/1023.0),   ((1.0/1024.0)-1.0)  * (2048.0/2047.0),
 
34
  ((1.0/2048.0)-1.0) * (4096.0/4095.0),   ((1.0/4096.0)-1.0)  * (8192.0/8191.0),
 
35
  ((1.0/8192.0)-1.0) * (16384.0/16383.0), ((1.0/16384.0)-1.0) * (32768.0/32767.0)
 
36
};
 
37
 
 
38
// Mpeg layer 1
 
39
void Mpegtoraw::extractlayer1(void)
 
40
{
 
41
  int inputstereo=mpegAudioHeader->getInputstereo();
 
42
  int stereobound=mpegAudioHeader->getStereobound();
 
43
  REAL fraction[MAXCHANNEL][MAXSUBBAND];
 
44
  REAL scalefactor[MAXCHANNEL][MAXSUBBAND];
 
45
 
 
46
  int bitalloc[MAXCHANNEL][MAXSUBBAND],
 
47
      sample[MAXCHANNEL][MAXSUBBAND];
 
48
 
 
49
  register int i,j;
 
50
  int s=stereobound,l;
 
51
 
 
52
 
 
53
// Bitalloc
 
54
  for(i=0;i<s;i++)
 
55
  {
 
56
    bitalloc[LS][i]=getbits(4);
 
57
    bitalloc[RS][i]=getbits(4);
 
58
  }
 
59
  for(;i<MAXSUBBAND;i++)
 
60
    bitalloc[LS][i]=
 
61
    bitalloc[RS][i]=getbits(4);
 
62
 
 
63
// Scale index
 
64
  if(inputstereo)
 
65
    for(i=0;i<MAXSUBBAND;i++)
 
66
    {
 
67
      if(bitalloc[LS][i])scalefactor[LS][i]=scalefactorstable[getbits(6)];
 
68
      if(bitalloc[RS][i])scalefactor[RS][i]=scalefactorstable[getbits(6)];
 
69
    }
 
70
  else
 
71
    for(i=0;i<MAXSUBBAND;i++)
 
72
      if(bitalloc[LS][i])scalefactor[LS][i]=scalefactorstable[getbits(6)];
 
73
 
 
74
  for(l=0;l<SCALEBLOCK;l++)
 
75
  {
 
76
    // Sample
 
77
    for(i=0;i<s;i++)
 
78
    {
 
79
      if((j=bitalloc[LS][i]))sample[LS][i]=getbits(j+1);
 
80
      if((j=bitalloc[RS][i]))sample[RS][i]=getbits(j+1);
 
81
    }
 
82
    for(;i<MAXSUBBAND;i++)
 
83
      if((j=bitalloc[LS][i]))sample[LS][i]=sample[RS][i]=getbits(j+1);
 
84
 
 
85
 
 
86
    // Fraction
 
87
    if(lOutputStereo)
 
88
      for(i=0;i<MAXSUBBAND;i++)
 
89
      {
 
90
        if((j=bitalloc[LS][i]))
 
91
          fraction[LS][i]=(REAL(sample[LS][i])*factortable[j]+offsettable[j])
 
92
                          *scalefactor[LS][i];
 
93
        else fraction[LS][i]=0.0;
 
94
        if((j=bitalloc[RS][i]))
 
95
          fraction[RS][i]=(REAL(sample[RS][i])*factortable[j]+offsettable[j])
 
96
                          *scalefactor[RS][i];
 
97
        else fraction[RS][i]=0.0;
 
98
      }
 
99
    else
 
100
      for(i=0;i<MAXSUBBAND;i++)
 
101
        if((j=bitalloc[LS][i]))
 
102
          fraction[LS][i]=(REAL(sample[LS][i])*factortable[j]+offsettable[j])
 
103
                          *scalefactor[LS][i];
 
104
        else fraction[LS][i]=0.0;
 
105
 
 
106
    synthesis->doSynth(lDownSample,lOutputStereo,
 
107
                       fraction[LS],fraction[RS]);
 
108
  }
 
109
}