1#This work is licensed under the
2#Creative Commons Attribution-Share Alike 3.0 United States License.
3#To view a copy of this license, visit
4#http://creativecommons.org/licenses/by-sa/3.0/us/ or send a letter to
5#Creative Commons,
6#171 Second Street, Suite 300,
7#San Francisco, California, 94105, USA.
8
9INPUT block_samples,channel_count,residuals,decorrelation_term_count,
10decorrelation_terms,decorrelation_deltas,decorrelation_weights,
11decorrelation_samples;
12OUTPUT "a list of decorrelated samples per channel";
13VAR block_samples "block samples";
14VAR channel_count "channel count";
15VAR decorrelation_term_count "term count";
16VAR decorrelation_terms "terms";
17VAR decorrelation_deltas "deltas";
18VAR decorrelation_weights "weights";
19VAR decorrelation_samples "samples";
20VAR residuals "residuals";
21VAR pass "pass";
22FUNC decorrelate_1ch "decorrelate 1 channel" "wavpack:decorr_pass_1ch";
23FUNC decorrelate_2ch "decorrelate 2 channels" "wavpack:decorr_pass_2ch";
24if channel_count == 1 {
25    pass[0] <- residuals[0];
26    for p <- 0 to decorrelation_term_count {
27        pass[0] <- decorrelate_1ch(block_samples,
28                                   pass[0],
29                                   decorrelation_terms[p],
30                                   decorrelation_deltas[p],
31                                   decorrelation_weights[p][0],
32                                   decorrelation_samples[p][0]);
33    }
34    return pass[0];
35} else {
36   pass[0] <- residuals[0];
37   pass[1] <- residuals[1];
38   for p <- 0 to decorrelation_term_count {
39       pass[0],pass[1] <- decorrelate_2ch(block_samples,
40                                          pass,
41                                          decorrelation_terms[p],
42                                          decorrelation_deltas[p],
43                                          decorrelation_weights[p],
44                                          decorrelation_samples[p]);
45   }
46   return pass[0],pass[1];
47}
48