FastLED 3.9.15
Loading...
Searching...
No Matches

◆ UnpackSFMPEG1()

static void fl::third_party::UnpackSFMPEG1 ( BitStreamInfo * bsi,
SideInfoSub * sis,
ScaleFactorInfoSub * sfis,
int32_t * scfsi,
int gr,
ScaleFactorInfoSub * sfisGr0 )
static

Definition at line 85 of file scalfact.hpp.

86{
87 int sfb;
88 int slen0, slen1;
89
90 /* these can be 0, so make sure GetBits(bsi, 0) returns 0 (no >> 32 or anything) */
91 slen0 = (int)SFLenTab[sis->sfCompress][0];
92 slen1 = (int)SFLenTab[sis->sfCompress][1];
93
94 if (sis->blockType == 2) {
95 /* short block, type 2 (implies winSwitchFlag == 1) */
96 if (sis->mixedBlock) {
97 /* do long block portion */
98 for (sfb = 0; sfb < 8; sfb++)
99 sfis->l[sfb] = (char)GetBits(bsi, slen0);
100 sfb = 3;
101 } else {
102 /* all short blocks */
103 sfb = 0;
104 }
105
106 for ( ; sfb < 6; sfb++) {
107 sfis->s[sfb][0] = (char)GetBits(bsi, slen0);
108 sfis->s[sfb][1] = (char)GetBits(bsi, slen0);
109 sfis->s[sfb][2] = (char)GetBits(bsi, slen0);
110 }
111
112 for ( ; sfb < 12; sfb++) {
113 sfis->s[sfb][0] = (char)GetBits(bsi, slen1);
114 sfis->s[sfb][1] = (char)GetBits(bsi, slen1);
115 sfis->s[sfb][2] = (char)GetBits(bsi, slen1);
116 }
117
118 /* last sf band not transmitted */
119 sfis->s[12][0] = sfis->s[12][1] = sfis->s[12][2] = 0;
120 } else {
121 /* long blocks, type 0, 1, or 3 */
122 if(gr == 0) {
123 /* first granule */
124 for (sfb = 0; sfb < 11; sfb++)
125 sfis->l[sfb] = (char)GetBits(bsi, slen0);
126 for (sfb = 11; sfb < 21; sfb++)
127 sfis->l[sfb] = (char)GetBits(bsi, slen1);
128 return;
129 } else {
130 /* second granule
131 * scfsi: 0 = different scalefactors for each granule, 1 = copy sf's from granule 0 into granule 1
132 * for block type == 2, scfsi is always 0
133 */
134 sfb = 0;
135 if(scfsi[0]) for( ; sfb < 6 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
136 else for( ; sfb < 6 ; sfb++) sfis->l[sfb] = (char)GetBits(bsi, slen0);
137 if(scfsi[1]) for( ; sfb <11 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
138 else for( ; sfb <11 ; sfb++) sfis->l[sfb] = (char)GetBits(bsi, slen0);
139 if(scfsi[2]) for( ; sfb <16 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
140 else for( ; sfb <16 ; sfb++) sfis->l[sfb] = (char)GetBits(bsi, slen1);
141 if(scfsi[3]) for( ; sfb <21 ; sfb++) sfis->l[sfb] = sfisGr0->l[sfb];
142 else for( ; sfb <21 ; sfb++) sfis->l[sfb] = (char)GetBits(bsi, slen1);
143 }
144 /* last sf band not transmitted */
145 sfis->l[21] = 0;
146 sfis->l[22] = 0;
147 }
148}
static const char SFLenTab[16][2]
Definition scalfact.hpp:51
uint32_t GetBits(BitStreamInfo *bsi, int32_t nBits) FL_NOEXCEPT

References FL_NOEXCEPT, GetBits(), and SFLenTab.

Referenced by UnpackScaleFactors().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: