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 "a WavPack file stream",block_data_size,block_samples,channel_count;
10OUTPUT "a set of decoding paramters";
11VAR block_data_size "block data size";
12VAR block_samples "block samples";
13VAR channel_count "channel count";
14VAR metadata_function "metadata function";
15VAR nondecoder_data "nondecoder data";
16VAR actual_size_1_less "actual size 1 less";
17VAR sub_block_size "sub block size";
18VAR decorrelation_term_count "term count";
19VAR decorrelation_terms "decorrelation terms";
20VAR decorrelation_deltas "decorrelation deltas";
21VAR decorrelation_weights "decorrelation weights";
22VAR decorrelation_samples "decorrelation samples";
23VAR entropies "entropy";
24VAR residuals "residuals";
25VAR zero_bits "zero bits";
26VAR one_bits "one bits";
27VAR duplicate_bits "duplicate bits";
28FUNC read_decorrelation_terms "read decorrelation terms" "wavpack:read_decorrelation_terms";
29FUNC read_decorrelation_weights "read decorrelation weights" "wavpack:read_decorrelation_weights";
30FUNC read_decorrelation_samples "read decorrelation samples" "wavpack:read_decorrelation_samples";
31FUNC read_entropy_variables "read entropy variables" "wavpack:read_entropy_variables";
32FUNC read_extended_integers "read extended integers" "wavpack:read_extended_integers";
33FUNC read_bitstream "read bitstream" "wavpack:read_bitstream";
34while block_data_size > 0 {
35    metadata_function <- read 5 unsigned;
36    nondecoder_data <- read 1 unsigned;
37    actual_size_1_less <- read 1 unsigned;
38    if (read 1 unsigned) == 0 /*large sub block*/ {
39        sub_block_size <- (read 8 unsigned) * 2 - actual_size_1_less;
40    } else {
41        sub_block_size <- (read 24 unsigned) * 2 - actual_size_1_less;
42    }
43    if nondecoder_data == 0 {
44        switch metadata_function {
45            case 2 {
46                decorrelation_term_count,
47                decorrelation_terms,
48                decorrelation_deltas <-
49                read_decorrelation_terms(sub_block_size);
50            }
51            case 3 {
52                decorrelation_weights <-
53                read_decorrelation_weights(sub_block_size,
54                                           channel_count,
55                                           decorrelation_term_count);
56            }
57            case 4 {
58                decorrelation_samples <-
59                read_decorrelation_samples(sub_block_size,
60                                           channel_count,
61                                           decorrelation_term_count,
62                                           decorrelation_terms);
63            }
64            case 5 {
65                entropies <-
66                read_entropy_variables(sub_block_size,
67                                       channel_count);
68            }
69            case 9 {
70                zero_bits,one_bits,duplicate_bits <-
71                read_extended_integers();
72            }
73            case 10 {
74                residuals <-
75                read_bitstream(block_samples,
76                               channel_count,
77                               entropies);
78
79            }
80            default {
81                skip sub_block_size bytes;
82            }
83        }
84    } else {
85        skip sub_block_size bytes;
86    }
87    if actual_size_1_less == 1 {
88        skip 1 bytes;
89    }
90}
91return decorrelation_term_count,
92decorrelation_terms,
93decorrelation_deltas,
94decorrelation_weights,
95decorrelation_samples,
96residuals,
97zero_bits,one_bits,duplicate_bits;