1 /*

2 * MLP codec common header file

3 * Copyright (c) 2007-2008 Ian Caulfield

4 *

5 * This file is part of FFmpeg.

6 *

7 * FFmpeg is free software; you can redistribute it and/or

8 * modify it under the terms of the GNU Lesser General Public

9 * License as published by the Free Software Foundation; either

10 * version 2.1 of the License, or (at your option) any later version.

11 *

12 * FFmpeg is distributed in the hope that it will be useful,

13 * but WITHOUT ANY WARRANTY; without even the implied warranty of

14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU

15 * Lesser General Public License for more details.

16 *

17 * You should have received a copy of the GNU Lesser General Public

18 * License along with FFmpeg; if not, write to the Free Software

19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA

20 */

22 #ifndef AVCODEC_MLP_H

23 #define AVCODEC_MLP_H

25 #include <stdint.h>

29 /** Maximum number of channels that can be decoded. */

30 #define MAX_CHANNELS 16

32 /** Maximum number of matrices used in decoding; most streams have one matrix

33 * per output channel, but some rematrix a channel (usually 0) more than once.

34 */

35 #define MAX_MATRICES 15

37 /** Maximum number of substreams that can be decoded. This could also be set

38 * higher, but I haven't seen any examples with more than two.

39 */

40 #define MAX_SUBSTREAMS 2

42 /** maximum sample frequency seen in files */

43 #define MAX_SAMPLERATE 192000

45 /** maximum number of audio samples within one access unit */

46 #define MAX_BLOCKSIZE (40 * (MAX_SAMPLERATE / 48000))

47 /** next power of two greater than MAX_BLOCKSIZE */

48 #define MAX_BLOCKSIZE_POW2 (64 * (MAX_SAMPLERATE / 48000))

50 /** number of allowed filters */

51 #define NUM_FILTERS 2

53 /** The maximum number of taps in either the IIR or FIR filter;

54 * I believe MLP actually specifies the maximum order for IIR filters as four,

55 * and that the sum of the orders of both filters must be <= 8.

56 */

57 #define MAX_FILTER_ORDER 8

59 /** Code that signals end of a stream. */

60 #define END_OF_STREAM 0xd234d234

62 #define FIR 0

63 #define IIR 1

65 /** filter data */

74 /** sample data coding information */

84 /** Tables defining the Huffman codes.

85 * There are three entropy coding methods used in MLP (four if you count

86 * "none" as a method). These use the same sequences for codes starting with

87 * 00 or 01, but have different codes starting with 1.

88 */

91 /** MLP uses checksums that seem to be based on the standard CRC algorithm, but

92 * are not (in implementation terms, the table lookup and XOR are reversed).

93 * We can implement this behavior using a standard av_crc on all but the

94 * last element, then XOR that with the last element.

95 */

99 /** Calculate an 8-bit checksum over a restart header -- a non-multiple-of-8

100 * number of bits, starting two bits into the first byte of buf.

101 */

104 /** XOR together all the bytes of a buffer.

105 * Does this belong in dspcontext?

106 */

113 /** XOR four bytes into one. */

115 {

119 }