Mercurial > cpython-lru_cache-weakref
annotate Modules/audioop.c @ 78069:a8aa77458e12 3.2
Add c_size_t and c_ssize_t to the ctypes summary table.
| author | Antoine Pitrou <solipsis@pitrou.net> |
|---|---|
| date | Thu, 12 Jul 2012 20:31:50 +0200 |
| parents | 77188bc37c74 |
| children | 104b17f8316b ce89dcba008f |
| rev | line source |
|---|---|
| 877 | 1 |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1420
diff
changeset
|
2 /* audioopmodule - Module to detect peak values in arrays */ |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1420
diff
changeset
|
3 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
4 #define PY_SSIZE_T_CLEAN |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
5 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
6 #include "Python.h" |
| 877 | 7 |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
8 #if SIZEOF_INT == 4 |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
9 typedef int Py_Int32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
10 typedef unsigned int Py_UInt32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
11 #else |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
12 #if SIZEOF_LONG == 4 |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
13 typedef long Py_Int32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
14 typedef unsigned long Py_UInt32; |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
15 #else |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
16 #error "No 4-byte integral type" |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
17 #endif |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
18 #endif |
|
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
19 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
20 typedef short PyInt16; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
21 |
|
1827
f5f3ddfec3c7
Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
22 #if defined(__CHAR_UNSIGNED__) |
|
f5f3ddfec3c7
Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
23 #if defined(signed) |
|
1746
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1420
diff
changeset
|
24 /* This module currently does not work on systems where only unsigned |
|
1940892d2fe3
Merge alpha100 branch back to main trunk
Guido van Rossum <guido@python.org>
parents:
1420
diff
changeset
|
25 characters are available. Take it out of Setup. Sorry. */ |
| 877 | 26 #endif |
|
1827
f5f3ddfec3c7
Makefile.pre.in: add $(OPT) to link command
Guido van Rossum <guido@python.org>
parents:
1746
diff
changeset
|
27 #endif |
| 877 | 28 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
29 /* Code shamelessly stolen from sox, 12.17.7, g711.c |
| 877 | 30 ** (c) Craig Reese, Joe Campbell and Jeff Poskanzer 1989 */ |
| 31 | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
32 /* From g711.c: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
33 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
34 * December 30, 1994: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
35 * Functions linear2alaw, linear2ulaw have been updated to correctly |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
36 * convert unquantized 16 bit values. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
37 * Tables for direct u- to A-law and A- to u-law conversions have been |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
38 * corrected. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
39 * Borge Lindberg, Center for PersonKommunikation, Aalborg University. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
40 * bli@cpk.auc.dk |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
41 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
42 */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
43 #define BIAS 0x84 /* define the add-in bias for 16 bit samples */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
44 #define CLIP 32635 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
45 #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
46 #define QUANT_MASK (0xf) /* Quantization field mask. */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
47 #define SEG_SHIFT (4) /* Left shift for segment number. */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
48 #define SEG_MASK (0x70) /* Segment field mask. */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
49 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
50 static PyInt16 seg_aend[8] = {0x1F, 0x3F, 0x7F, 0xFF, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
51 0x1FF, 0x3FF, 0x7FF, 0xFFF}; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
52 static PyInt16 seg_uend[8] = {0x3F, 0x7F, 0xFF, 0x1FF, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
53 0x3FF, 0x7FF, 0xFFF, 0x1FFF}; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
54 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
55 static PyInt16 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
56 search(PyInt16 val, PyInt16 *table, int size) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
57 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
58 int i; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
59 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
60 for (i = 0; i < size; i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
61 if (val <= *table++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
62 return (i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
63 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
64 return (size); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
65 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
66 #define st_ulaw2linear16(uc) (_st_ulaw2linear16[uc]) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
67 #define st_alaw2linear16(uc) (_st_alaw2linear16[uc]) |
| 877 | 68 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
69 static PyInt16 _st_ulaw2linear16[256] = { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
70 -32124, -31100, -30076, -29052, -28028, -27004, -25980, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
71 -24956, -23932, -22908, -21884, -20860, -19836, -18812, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
72 -17788, -16764, -15996, -15484, -14972, -14460, -13948, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
73 -13436, -12924, -12412, -11900, -11388, -10876, -10364, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
74 -9852, -9340, -8828, -8316, -7932, -7676, -7420, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
75 -7164, -6908, -6652, -6396, -6140, -5884, -5628, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
76 -5372, -5116, -4860, -4604, -4348, -4092, -3900, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
77 -3772, -3644, -3516, -3388, -3260, -3132, -3004, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
78 -2876, -2748, -2620, -2492, -2364, -2236, -2108, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
79 -1980, -1884, -1820, -1756, -1692, -1628, -1564, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
80 -1500, -1436, -1372, -1308, -1244, -1180, -1116, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
81 -1052, -988, -924, -876, -844, -812, -780, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
82 -748, -716, -684, -652, -620, -588, -556, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
83 -524, -492, -460, -428, -396, -372, -356, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
84 -340, -324, -308, -292, -276, -260, -244, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
85 -228, -212, -196, -180, -164, -148, -132, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
86 -120, -112, -104, -96, -88, -80, -72, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
87 -64, -56, -48, -40, -32, -24, -16, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
88 -8, 0, 32124, 31100, 30076, 29052, 28028, |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
89 27004, 25980, 24956, 23932, 22908, 21884, 20860, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
90 19836, 18812, 17788, 16764, 15996, 15484, 14972, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
91 14460, 13948, 13436, 12924, 12412, 11900, 11388, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
92 10876, 10364, 9852, 9340, 8828, 8316, 7932, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
93 7676, 7420, 7164, 6908, 6652, 6396, 6140, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
94 5884, 5628, 5372, 5116, 4860, 4604, 4348, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
95 4092, 3900, 3772, 3644, 3516, 3388, 3260, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
96 3132, 3004, 2876, 2748, 2620, 2492, 2364, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
97 2236, 2108, 1980, 1884, 1820, 1756, 1692, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
98 1628, 1564, 1500, 1436, 1372, 1308, 1244, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
99 1180, 1116, 1052, 988, 924, 876, 844, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
100 812, 780, 748, 716, 684, 652, 620, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
101 588, 556, 524, 492, 460, 428, 396, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
102 372, 356, 340, 324, 308, 292, 276, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
103 260, 244, 228, 212, 196, 180, 164, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
104 148, 132, 120, 112, 104, 96, 88, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
105 80, 72, 64, 56, 48, 40, 32, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
106 24, 16, 8, 0 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
107 }; |
| 877 | 108 |
| 109 /* | |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
110 * linear2ulaw() accepts a 14-bit signed integer and encodes it as u-law data |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
111 * stored in a unsigned char. This function should only be called with |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
112 * the data shifted such that it only contains information in the lower |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
113 * 14-bits. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
114 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
115 * In order to simplify the encoding process, the original linear magnitude |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
116 * is biased by adding 33 which shifts the encoding range from (0 - 8158) to |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
117 * (33 - 8191). The result can be seen in the following encoding table: |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
118 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
119 * Biased Linear Input Code Compressed Code |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
120 * ------------------------ --------------- |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
121 * 00000001wxyza 000wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
122 * 0000001wxyzab 001wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
123 * 000001wxyzabc 010wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
124 * 00001wxyzabcd 011wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
125 * 0001wxyzabcde 100wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
126 * 001wxyzabcdef 101wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
127 * 01wxyzabcdefg 110wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
128 * 1wxyzabcdefgh 111wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
129 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
130 * Each biased linear code has a leading 1 which identifies the segment |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
131 * number. The value of the segment number is equal to 7 minus the number |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
132 * of leading 0's. The quantization interval is directly available as the |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
133 * four bits wxyz. * The trailing bits (a - h) are ignored. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
134 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
135 * Ordinarily the complement of the resulting code word is used for |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
136 * transmission, and so the code word is complemented before it is returned. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
137 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
138 * For further information see John C. Bellamy's Digital Telephony, 1982, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
139 * John Wiley & Sons, pps 98-111 and 472-476. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
140 */ |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
141 static unsigned char |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
142 st_14linear2ulaw(PyInt16 pcm_val) /* 2's complement (14-bit range) */ |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
143 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
144 PyInt16 mask; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
145 PyInt16 seg; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
146 unsigned char uval; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
147 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
148 /* The original sox code does this in the calling function, not here */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
149 pcm_val = pcm_val >> 2; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
150 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
151 /* u-law inverts all bits */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
152 /* Get the sign and the magnitude of the value. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
153 if (pcm_val < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
154 pcm_val = -pcm_val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
155 mask = 0x7F; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
156 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
157 mask = 0xFF; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
158 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
159 if ( pcm_val > CLIP ) pcm_val = CLIP; /* clip the magnitude */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
160 pcm_val += (BIAS >> 2); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
161 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
162 /* Convert the scaled magnitude to segment number. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
163 seg = search(pcm_val, seg_uend, 8); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
164 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
165 /* |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
166 * Combine the sign, segment, quantization bits; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
167 * and complement the code word. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
168 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
169 if (seg >= 8) /* out of range, return maximum value. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
170 return (unsigned char) (0x7F ^ mask); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
171 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
172 uval = (unsigned char) (seg << 4) | ((pcm_val >> (seg + 1)) & 0xF); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
173 return (uval ^ mask); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
174 } |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
175 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
176 } |
| 877 | 177 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
178 static PyInt16 _st_alaw2linear16[256] = { |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
179 -5504, -5248, -6016, -5760, -4480, -4224, -4992, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
180 -4736, -7552, -7296, -8064, -7808, -6528, -6272, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
181 -7040, -6784, -2752, -2624, -3008, -2880, -2240, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
182 -2112, -2496, -2368, -3776, -3648, -4032, -3904, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
183 -3264, -3136, -3520, -3392, -22016, -20992, -24064, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
184 -23040, -17920, -16896, -19968, -18944, -30208, -29184, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
185 -32256, -31232, -26112, -25088, -28160, -27136, -11008, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
186 -10496, -12032, -11520, -8960, -8448, -9984, -9472, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
187 -15104, -14592, -16128, -15616, -13056, -12544, -14080, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
188 -13568, -344, -328, -376, -360, -280, -264, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
189 -312, -296, -472, -456, -504, -488, -408, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
190 -392, -440, -424, -88, -72, -120, -104, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
191 -24, -8, -56, -40, -216, -200, -248, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
192 -232, -152, -136, -184, -168, -1376, -1312, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
193 -1504, -1440, -1120, -1056, -1248, -1184, -1888, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
194 -1824, -2016, -1952, -1632, -1568, -1760, -1696, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
195 -688, -656, -752, -720, -560, -528, -624, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
196 -592, -944, -912, -1008, -976, -816, -784, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
197 -880, -848, 5504, 5248, 6016, 5760, 4480, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
198 4224, 4992, 4736, 7552, 7296, 8064, 7808, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
199 6528, 6272, 7040, 6784, 2752, 2624, 3008, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
200 2880, 2240, 2112, 2496, 2368, 3776, 3648, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
201 4032, 3904, 3264, 3136, 3520, 3392, 22016, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
202 20992, 24064, 23040, 17920, 16896, 19968, 18944, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
203 30208, 29184, 32256, 31232, 26112, 25088, 28160, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
204 27136, 11008, 10496, 12032, 11520, 8960, 8448, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
205 9984, 9472, 15104, 14592, 16128, 15616, 13056, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
206 12544, 14080, 13568, 344, 328, 376, 360, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
207 280, 264, 312, 296, 472, 456, 504, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
208 488, 408, 392, 440, 424, 88, 72, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
209 120, 104, 24, 8, 56, 40, 216, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
210 200, 248, 232, 152, 136, 184, 168, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
211 1376, 1312, 1504, 1440, 1120, 1056, 1248, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
212 1184, 1888, 1824, 2016, 1952, 1632, 1568, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
213 1760, 1696, 688, 656, 752, 720, 560, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
214 528, 624, 592, 944, 912, 1008, 976, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
215 816, 784, 880, 848 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
216 }; |
| 877 | 217 |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
218 /* |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
219 * linear2alaw() accepts an 13-bit signed integer and encodes it as A-law data |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
220 * stored in a unsigned char. This function should only be called with |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
221 * the data shifted such that it only contains information in the lower |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
222 * 13-bits. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
223 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
224 * Linear Input Code Compressed Code |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
225 * ------------------------ --------------- |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
226 * 0000000wxyza 000wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
227 * 0000001wxyza 001wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
228 * 000001wxyzab 010wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
229 * 00001wxyzabc 011wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
230 * 0001wxyzabcd 100wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
231 * 001wxyzabcde 101wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
232 * 01wxyzabcdef 110wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
233 * 1wxyzabcdefg 111wxyz |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
234 * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
235 * For further information see John C. Bellamy's Digital Telephony, 1982, |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
236 * John Wiley & Sons, pps 98-111 and 472-476. |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
237 */ |
|
2150
448435bfeadc
Made some more things static, and other cleanup for new naming scheme
Guido van Rossum <guido@python.org>
parents:
2061
diff
changeset
|
238 static unsigned char |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
239 st_linear2alaw(PyInt16 pcm_val) /* 2's complement (13-bit range) */ |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
240 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
241 PyInt16 mask; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
242 short seg; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
243 unsigned char aval; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
244 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
245 /* The original sox code does this in the calling function, not here */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
246 pcm_val = pcm_val >> 3; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
247 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
248 /* A-law using even bit inversion */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
249 if (pcm_val >= 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
250 mask = 0xD5; /* sign (7th) bit = 1 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
251 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
252 mask = 0x55; /* sign bit = 0 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
253 pcm_val = -pcm_val - 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
254 } |
| 877 | 255 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
256 /* Convert the scaled magnitude to segment number. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
257 seg = search(pcm_val, seg_aend, 8); |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
258 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
259 /* Combine the sign, segment, and quantization bits. */ |
| 877 | 260 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
261 if (seg >= 8) /* out of range, return maximum value. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
262 return (unsigned char) (0x7F ^ mask); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
263 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
264 aval = (unsigned char) seg << SEG_SHIFT; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
265 if (seg < 2) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
266 aval |= (pcm_val >> 1) & QUANT_MASK; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
267 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
268 aval |= (pcm_val >> seg) & QUANT_MASK; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
269 return (aval ^ mask); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
270 } |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
271 } |
| 877 | 272 /* End of code taken from sox */ |
| 273 | |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
274 /* Intel ADPCM step variation table */ |
|
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
275 static int indexTable[16] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
276 -1, -1, -1, -1, 2, 4, 6, 8, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
277 -1, -1, -1, -1, 2, 4, 6, 8, |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
278 }; |
|
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
279 |
|
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
280 static int stepsizeTable[89] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
281 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
282 19, 21, 23, 25, 28, 31, 34, 37, 41, 45, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
283 50, 55, 60, 66, 73, 80, 88, 97, 107, 118, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
284 130, 143, 157, 173, 190, 209, 230, 253, 279, 307, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
285 337, 371, 408, 449, 494, 544, 598, 658, 724, 796, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
286 876, 963, 1060, 1166, 1282, 1411, 1552, 1707, 1878, 2066, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
287 2272, 2499, 2749, 3024, 3327, 3660, 4026, 4428, 4871, 5358, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
288 5894, 6484, 7132, 7845, 8630, 9493, 10442, 11487, 12635, 13899, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
289 15289, 16818, 18500, 20350, 22385, 24623, 27086, 29794, 32767 |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
290 }; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
291 |
| 877 | 292 #define CHARP(cp, i) ((signed char *)(cp+i)) |
| 293 #define SHORTP(cp, i) ((short *)(cp+i)) | |
|
8129
1094ebbd3a45
Purported fixes for 64-bit platforms with help from John Jorgensen
Guido van Rossum <guido@python.org>
parents:
6543
diff
changeset
|
294 #define LONGP(cp, i) ((Py_Int32 *)(cp+i)) |
| 877 | 295 |
| 296 | |
| 297 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
298 static PyObject *AudioopError; |
| 877 | 299 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
300 static int |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
301 audioop_check_size(int size) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
302 { |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
303 if (size != 1 && size != 2 && size != 4) { |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
304 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4"); |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
305 return 0; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
306 } |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
307 else |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
308 return 1; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
309 } |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
310 |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
311 static int |
|
67347
3bf4d9f1660a
Issue #9566: use Py_ssize_t instead of int
Victor Stinner <victor.stinner@haypocalc.com>
parents:
62764
diff
changeset
|
312 audioop_check_parameters(Py_ssize_t len, int size) |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
313 { |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
314 if (!audioop_check_size(size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
315 return 0; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
316 if (len % size != 0) { |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
317 PyErr_SetString(AudioopError, "not a whole number of frames"); |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
318 return 0; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
319 } |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
320 return 1; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
321 } |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
322 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
323 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
324 audioop_getsample(PyObject *self, PyObject *args) |
| 877 | 325 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
326 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
327 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
328 int size, val = 0; |
| 877 | 329 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
330 if ( !PyArg_ParseTuple(args, "s#in:getsample", &cp, &len, &size, &i) ) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
331 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
332 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
333 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
334 if ( i < 0 || i >= len/size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
335 PyErr_SetString(AudioopError, "Index out of range"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
336 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
337 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
338 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
339 else if ( size == 2 ) val = (int)*SHORTP(cp, i*2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
340 else if ( size == 4 ) val = (int)*LONGP(cp, i*4); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
341 return PyLong_FromLong(val); |
| 877 | 342 } |
| 343 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
344 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
345 audioop_max(PyObject *self, PyObject *args) |
| 877 | 346 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
347 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
348 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
349 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
350 int max = 0; |
| 877 | 351 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
352 if ( !PyArg_ParseTuple(args, "s#i:max", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
353 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
354 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
355 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
356 for ( i=0; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
357 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
358 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
359 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
360 if ( val < 0 ) val = (-val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
361 if ( val > max ) max = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
362 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
363 return PyLong_FromLong(max); |
| 877 | 364 } |
| 365 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
366 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
367 audioop_minmax(PyObject *self, PyObject *args) |
| 1866 | 368 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
369 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
370 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
371 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
372 int min = 0x7fffffff, max = -0x7fffffff; |
| 1866 | 373 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
374 if (!PyArg_ParseTuple(args, "s#i:minmax", &cp, &len, &size)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
375 return NULL; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
376 if (!audioop_check_parameters(len, size)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
377 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
378 for (i = 0; i < len; i += size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
379 if (size == 1) val = (int) *CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
380 else if (size == 2) val = (int) *SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
381 else if (size == 4) val = (int) *LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
382 if (val > max) max = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
383 if (val < min) min = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
384 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
385 return Py_BuildValue("(ii)", min, max); |
| 1866 | 386 } |
| 387 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
388 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
389 audioop_avg(PyObject *self, PyObject *args) |
| 877 | 390 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
391 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
392 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
393 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
394 double avg = 0.0; |
| 877 | 395 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
396 if ( !PyArg_ParseTuple(args, "s#i:avg", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
397 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
398 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
399 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
400 for ( i=0; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
401 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
402 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
403 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
404 avg += val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
405 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
406 if ( len == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
407 val = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
408 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
409 val = (int)(avg / (double)(len/size)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
410 return PyLong_FromLong(val); |
| 877 | 411 } |
| 412 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
413 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
414 audioop_rms(PyObject *self, PyObject *args) |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
415 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
416 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
417 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
418 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
419 double sum_squares = 0.0; |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
420 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
421 if ( !PyArg_ParseTuple(args, "s#i:rms", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
422 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
423 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
424 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
425 for ( i=0; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
426 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
427 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
428 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
429 sum_squares += (double)val*(double)val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
430 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
431 if ( len == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
432 val = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
433 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
434 val = (int)sqrt(sum_squares / (double)(len/size)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
435 return PyLong_FromLong(val); |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
436 } |
|
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
437 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
438 static double _sum2(short *a, short *b, Py_ssize_t len) |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
439 { |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
440 Py_ssize_t i; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
441 double sum = 0.0; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
442 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
443 for( i=0; i<len; i++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
444 sum = sum + (double)a[i]*(double)b[i]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
445 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
446 return sum; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
447 } |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
448 |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
449 /* |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
450 ** Findfit tries to locate a sample within another sample. Its main use |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
451 ** is in echo-cancellation (to find the feedback of the output signal in |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
452 ** the input signal). |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
453 ** The method used is as follows: |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
454 ** |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
455 ** let R be the reference signal (length n) and A the input signal (length N) |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
456 ** with N > n, and let all sums be over i from 0 to n-1. |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
457 ** |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
458 ** Now, for each j in {0..N-n} we compute a factor fj so that -fj*R matches A |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
459 ** as good as possible, i.e. sum( (A[j+i]+fj*R[i])^2 ) is minimal. This |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
460 ** equation gives fj = sum( A[j+i]R[i] ) / sum(R[i]^2). |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
461 ** |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
462 ** Next, we compute the relative distance between the original signal and |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
463 ** the modified signal and minimize that over j: |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
464 ** vj = sum( (A[j+i]-fj*R[i])^2 ) / sum( A[j+i]^2 ) => |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
465 ** vj = ( sum(A[j+i]^2)*sum(R[i]^2) - sum(A[j+i]R[i])^2 ) / sum( A[j+i]^2 ) |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
466 ** |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
467 ** In the code variables correspond as follows: |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
468 ** cp1 A |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
469 ** cp2 R |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
470 ** len1 N |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
471 ** len2 n |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
472 ** aj_m1 A[j-1] |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
473 ** aj_lm1 A[j+n-1] |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
474 ** sum_ri_2 sum(R[i]^2) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
475 ** sum_aij_2 sum(A[i+j]^2) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
476 ** sum_aij_ri sum(A[i+j]R[i]) |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
477 ** |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
478 ** sum_ri is calculated once, sum_aij_2 is updated each step and sum_aij_ri |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
479 ** is completely recalculated each step. |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
480 */ |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
481 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
482 audioop_findfit(PyObject *self, PyObject *args) |
|
1223
5ae4a8cf79ef
Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents:
1213
diff
changeset
|
483 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
484 short *cp1, *cp2; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
485 Py_ssize_t len1, len2; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
486 Py_ssize_t j, best_j; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
487 double aj_m1, aj_lm1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
488 double sum_ri_2, sum_aij_2, sum_aij_ri, result, best_result, factor; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
489 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
490 /* Passing a short** for an 's' argument is correct only |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
491 if the string contents is aligned for interpretation |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
492 as short[]. Due to the definition of PyBytesObject, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
493 this is currently (Python 2.6) the case. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
494 if ( !PyArg_ParseTuple(args, "s#s#:findfit", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
495 (char**)&cp1, &len1, (char**)&cp2, &len2) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
496 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
497 if ( len1 & 1 || len2 & 1 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
498 PyErr_SetString(AudioopError, "Strings should be even-sized"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
499 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
500 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
501 len1 >>= 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
502 len2 >>= 1; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
503 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
504 if ( len1 < len2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
505 PyErr_SetString(AudioopError, "First sample should be longer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
506 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
507 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
508 sum_ri_2 = _sum2(cp2, cp2, len2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
509 sum_aij_2 = _sum2(cp1, cp1, len2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
510 sum_aij_ri = _sum2(cp1, cp2, len2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
511 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
512 result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) / sum_aij_2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
513 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
514 best_result = result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
515 best_j = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
516 j = 0; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
517 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
518 for ( j=1; j<=len1-len2; j++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
519 aj_m1 = (double)cp1[j-1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
520 aj_lm1 = (double)cp1[j+len2-1]; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
521 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
522 sum_aij_2 = sum_aij_2 + aj_lm1*aj_lm1 - aj_m1*aj_m1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
523 sum_aij_ri = _sum2(cp1+j, cp2, len2); |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
524 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
525 result = (sum_ri_2*sum_aij_2 - sum_aij_ri*sum_aij_ri) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
526 / sum_aij_2; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
527 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
528 if ( result < best_result ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
529 best_result = result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
530 best_j = j; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
531 } |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
532 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
533 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
534 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
535 factor = _sum2(cp1+best_j, cp2, len2) / sum_ri_2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
536 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
537 return Py_BuildValue("(nf)", best_j, factor); |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
538 } |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
539 |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
540 /* |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
541 ** findfactor finds a factor f so that the energy in A-fB is minimal. |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
542 ** See the comment for findfit for details. |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
543 */ |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
544 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
545 audioop_findfactor(PyObject *self, PyObject *args) |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
546 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
547 short *cp1, *cp2; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
548 Py_ssize_t len1, len2; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
549 double sum_ri_2, sum_aij_ri, result; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
550 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
551 if ( !PyArg_ParseTuple(args, "s#s#:findfactor", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
552 (char**)&cp1, &len1, (char**)&cp2, &len2) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
553 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
554 if ( len1 & 1 || len2 & 1 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
555 PyErr_SetString(AudioopError, "Strings should be even-sized"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
556 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
557 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
558 if ( len1 != len2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
559 PyErr_SetString(AudioopError, "Samples should be same size"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
560 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
561 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
562 len2 >>= 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
563 sum_ri_2 = _sum2(cp2, cp2, len2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
564 sum_aij_ri = _sum2(cp1, cp2, len2); |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
565 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
566 result = sum_aij_ri / sum_ri_2; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
567 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
568 return PyFloat_FromDouble(result); |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
569 } |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
570 |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
571 /* |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
572 ** findmax returns the index of the n-sized segment of the input sample |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
573 ** that contains the most energy. |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
574 */ |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
575 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
576 audioop_findmax(PyObject *self, PyObject *args) |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
577 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
578 short *cp1; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
579 Py_ssize_t len1, len2; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
580 Py_ssize_t j, best_j; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
581 double aj_m1, aj_lm1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
582 double result, best_result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
583 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
584 if ( !PyArg_ParseTuple(args, "s#n:findmax", |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
585 (char**)&cp1, &len1, &len2) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
586 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
587 if ( len1 & 1 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
588 PyErr_SetString(AudioopError, "Strings should be even-sized"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
589 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
590 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
591 len1 >>= 1; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
592 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
593 if ( len2 < 0 || len1 < len2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
594 PyErr_SetString(AudioopError, "Input sample should be longer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
595 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
596 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
597 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
598 result = _sum2(cp1, cp1, len2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
599 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
600 best_result = result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
601 best_j = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
602 j = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
603 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
604 for ( j=1; j<=len1-len2; j++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
605 aj_m1 = (double)cp1[j-1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
606 aj_lm1 = (double)cp1[j+len2-1]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
607 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
608 result = result + aj_lm1*aj_lm1 - aj_m1*aj_m1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
609 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
610 if ( result > best_result ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
611 best_result = result; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
612 best_j = j; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
613 } |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
614 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
615 } |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
616 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
617 return PyLong_FromSsize_t(best_j); |
|
1223
5ae4a8cf79ef
Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents:
1213
diff
changeset
|
618 } |
|
5ae4a8cf79ef
Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents:
1213
diff
changeset
|
619 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
620 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
621 audioop_avgpp(PyObject *self, PyObject *args) |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
622 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
623 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
624 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
625 int size, val = 0, prevval = 0, prevextremevalid = 0, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
626 prevextreme = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
627 double avg = 0.0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
628 int diff, prevdiff, extremediff, nextreme = 0; |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
629 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
630 if ( !PyArg_ParseTuple(args, "s#i:avgpp", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
631 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
632 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
633 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
634 /* Compute first delta value ahead. Also automatically makes us |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
635 ** skip the first extreme value |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
636 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
637 if ( size == 1 ) prevval = (int)*CHARP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
638 else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
639 else if ( size == 4 ) prevval = (int)*LONGP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
640 if ( size == 1 ) val = (int)*CHARP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
641 else if ( size == 2 ) val = (int)*SHORTP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
642 else if ( size == 4 ) val = (int)*LONGP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
643 prevdiff = val - prevval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
644 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
645 for ( i=size; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
646 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
647 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
648 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
649 diff = val - prevval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
650 if ( diff*prevdiff < 0 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
651 /* Derivative changed sign. Compute difference to last |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
652 ** extreme value and remember. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
653 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
654 if ( prevextremevalid ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
655 extremediff = prevval - prevextreme; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
656 if ( extremediff < 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
657 extremediff = -extremediff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
658 avg += extremediff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
659 nextreme++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
660 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
661 prevextremevalid = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
662 prevextreme = prevval; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
663 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
664 prevval = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
665 if ( diff != 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
666 prevdiff = diff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
667 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
668 if ( nextreme == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
669 val = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
670 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
671 val = (int)(avg / (double)nextreme); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
672 return PyLong_FromLong(val); |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
673 } |
|
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
674 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
675 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
676 audioop_maxpp(PyObject *self, PyObject *args) |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
677 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
678 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
679 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
680 int size, val = 0, prevval = 0, prevextremevalid = 0, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
681 prevextreme = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
682 int max = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
683 int diff, prevdiff, extremediff; |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
684 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
685 if ( !PyArg_ParseTuple(args, "s#i:maxpp", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
686 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
687 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
688 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
689 /* Compute first delta value ahead. Also automatically makes us |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
690 ** skip the first extreme value |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
691 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
692 if ( size == 1 ) prevval = (int)*CHARP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
693 else if ( size == 2 ) prevval = (int)*SHORTP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
694 else if ( size == 4 ) prevval = (int)*LONGP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
695 if ( size == 1 ) val = (int)*CHARP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
696 else if ( size == 2 ) val = (int)*SHORTP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
697 else if ( size == 4 ) val = (int)*LONGP(cp, size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
698 prevdiff = val - prevval; |
|
993
7ce1975f11a9
Added rms, maxpp and avgpp methods.
Jack Jansen <jack.jansen@cwi.nl>
parents:
909
diff
changeset
|
699 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
700 for ( i=size; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
701 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
702 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
703 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
704 diff = val - prevval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
705 if ( diff*prevdiff < 0 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
706 /* Derivative changed sign. Compute difference to |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
707 ** last extreme value and remember. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
708 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
709 if ( prevextremevalid ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
710 extremediff = prevval - prevextreme; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
711 if ( extremediff < 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
712 extremediff = -extremediff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
713 if ( extremediff > max ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
714 max = extremediff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
715 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
716 prevextremevalid = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
717 prevextreme = prevval; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
718 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
719 prevval = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
720 if ( diff != 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
721 prevdiff = diff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
722 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
723 return PyLong_FromLong(max); |
| 877 | 724 } |
| 725 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
726 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
727 audioop_cross(PyObject *self, PyObject *args) |
| 877 | 728 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
729 signed char *cp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
730 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
731 int size, val = 0; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
732 int prevval; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
733 Py_ssize_t ncross; |
| 877 | 734 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
735 if ( !PyArg_ParseTuple(args, "s#i:cross", &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
736 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
737 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
738 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
739 ncross = -1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
740 prevval = 17; /* Anything <> 0,1 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
741 for ( i=0; i<len; i+= size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
742 if ( size == 1 ) val = ((int)*CHARP(cp, i)) >> 7; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
743 else if ( size == 2 ) val = ((int)*SHORTP(cp, i)) >> 15; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
744 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 31; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
745 val = val & 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
746 if ( val != prevval ) ncross++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
747 prevval = val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
748 } |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
749 return PyLong_FromSsize_t(ncross); |
| 877 | 750 } |
| 751 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
752 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
753 audioop_mul(PyObject *self, PyObject *args) |
| 877 | 754 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
755 signed char *cp, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
756 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
757 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
758 double factor, fval, maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
759 PyObject *rv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
760 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
761 if ( !PyArg_ParseTuple(args, "s#id:mul", &cp, &len, &size, &factor ) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
762 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
763 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
764 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
765 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
766 if ( size == 1 ) maxval = (double) 0x7f; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
767 else if ( size == 2 ) maxval = (double) 0x7fff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
768 else if ( size == 4 ) maxval = (double) 0x7fffffff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
769 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
770 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
771 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
772 } |
| 877 | 773 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
774 rv = PyBytes_FromStringAndSize(NULL, len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
775 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
776 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
777 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
778 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
779 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
780 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
781 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
782 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
783 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
784 fval = (double)val*factor; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
785 if ( fval > maxval ) fval = maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
786 else if ( fval < -maxval ) fval = -maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
787 val = (int)fval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
788 if ( size == 1 ) *CHARP(ncp, i) = (signed char)val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
789 else if ( size == 2 ) *SHORTP(ncp, i) = (short)val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
790 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)val; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
791 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
792 return rv; |
| 877 | 793 } |
| 794 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
795 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
796 audioop_tomono(PyObject *self, PyObject *args) |
| 877 | 797 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
798 Py_buffer pcp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
799 signed char *cp, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
800 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
801 int size, val1 = 0, val2 = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
802 double fac1, fac2, fval, maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
803 PyObject *rv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
804 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
805 if ( !PyArg_ParseTuple(args, "s*idd:tomono", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
806 &pcp, &size, &fac1, &fac2 ) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
807 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
808 cp = pcp.buf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
809 len = pcp.len; |
|
62765
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
810 if (!audioop_check_parameters(len, size)) { |
|
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
811 PyBuffer_Release(&pcp); |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
812 return NULL; |
|
62765
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
813 } |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
814 if (((len / size) & 1) != 0) { |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
815 PyErr_SetString(AudioopError, "not a whole number of frames"); |
|
62765
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
816 PyBuffer_Release(&pcp); |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
817 return NULL; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
818 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
819 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
820 if ( size == 1 ) maxval = (double) 0x7f; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
821 else if ( size == 2 ) maxval = (double) 0x7fff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
822 else if ( size == 4 ) maxval = (double) 0x7fffffff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
823 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
824 PyBuffer_Release(&pcp); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
825 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
826 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
827 } |
| 877 | 828 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
829 rv = PyBytes_FromStringAndSize(NULL, len/2); |
|
62765
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
830 if ( rv == 0 ) { |
|
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
831 PyBuffer_Release(&pcp); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
832 return 0; |
|
62765
b67f720998a8
Merged revisions 82527 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
62737
diff
changeset
|
833 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
834 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
835 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
836 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
837 for ( i=0; i < len; i += size*2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
838 if ( size == 1 ) val1 = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
839 else if ( size == 2 ) val1 = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
840 else if ( size == 4 ) val1 = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
841 if ( size == 1 ) val2 = (int)*CHARP(cp, i+1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
842 else if ( size == 2 ) val2 = (int)*SHORTP(cp, i+2); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
843 else if ( size == 4 ) val2 = (int)*LONGP(cp, i+4); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
844 fval = (double)val1*fac1 + (double)val2*fac2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
845 if ( fval > maxval ) fval = maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
846 else if ( fval < -maxval ) fval = -maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
847 val1 = (int)fval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
848 if ( size == 1 ) *CHARP(ncp, i/2) = (signed char)val1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
849 else if ( size == 2 ) *SHORTP(ncp, i/2) = (short)val1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
850 else if ( size == 4 ) *LONGP(ncp, i/2)= (Py_Int32)val1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
851 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
852 PyBuffer_Release(&pcp); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
853 return rv; |
| 877 | 854 } |
| 855 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
856 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
857 audioop_tostereo(PyObject *self, PyObject *args) |
| 877 | 858 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
859 signed char *cp, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
860 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
861 int size, val1, val2, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
862 double fac1, fac2, fval, maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
863 PyObject *rv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
864 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
865 if ( !PyArg_ParseTuple(args, "s#idd:tostereo", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
866 &cp, &len, &size, &fac1, &fac2 ) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
867 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
868 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
869 return NULL; |
| 877 | 870 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
871 if ( size == 1 ) maxval = (double) 0x7f; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
872 else if ( size == 2 ) maxval = (double) 0x7fff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
873 else if ( size == 4 ) maxval = (double) 0x7fffffff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
874 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
875 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
876 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
877 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
878 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
879 if (len > PY_SSIZE_T_MAX/2) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
880 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
881 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
882 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
883 } |
|
48330
ac854cde3135
Merged revisions 64114 via svnmerge from
Amaury Forgeot d'Arc <amauryfa@gmail.com>
parents:
47580
diff
changeset
|
884 |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
885 rv = PyBytes_FromStringAndSize(NULL, len*2); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
886 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
887 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
888 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
889 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
890 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
891 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
892 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
893 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
894 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
895 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
896 fval = (double)val*fac1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
897 if ( fval > maxval ) fval = maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
898 else if ( fval < -maxval ) fval = -maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
899 val1 = (int)fval; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
900 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
901 fval = (double)val*fac2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
902 if ( fval > maxval ) fval = maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
903 else if ( fval < -maxval ) fval = -maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
904 val2 = (int)fval; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
905 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
906 if ( size == 1 ) *CHARP(ncp, i*2) = (signed char)val1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
907 else if ( size == 2 ) *SHORTP(ncp, i*2) = (short)val1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
908 else if ( size == 4 ) *LONGP(ncp, i*2) = (Py_Int32)val1; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
909 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
910 if ( size == 1 ) *CHARP(ncp, i*2+1) = (signed char)val2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
911 else if ( size == 2 ) *SHORTP(ncp, i*2+2) = (short)val2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
912 else if ( size == 4 ) *LONGP(ncp, i*2+4) = (Py_Int32)val2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
913 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
914 return rv; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
915 } |
|
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
916 |
|
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
917 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
918 audioop_add(PyObject *self, PyObject *args) |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
919 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
920 signed char *cp1, *cp2, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
921 Py_ssize_t len1, len2, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
922 int size, val1 = 0, val2 = 0, maxval, newval; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
923 PyObject *rv; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
924 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
925 if ( !PyArg_ParseTuple(args, "s#s#i:add", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
926 &cp1, &len1, &cp2, &len2, &size ) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
927 return 0; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
928 if (!audioop_check_parameters(len1, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
929 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
930 if ( len1 != len2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
931 PyErr_SetString(AudioopError, "Lengths should be the same"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
932 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
933 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
934 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
935 if ( size == 1 ) maxval = 0x7f; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
936 else if ( size == 2 ) maxval = 0x7fff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
937 else if ( size == 4 ) maxval = 0x7fffffff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
938 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
939 PyErr_SetString(AudioopError, "Size should be 1, 2 or 4"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
940 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
941 } |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
942 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
943 rv = PyBytes_FromStringAndSize(NULL, len1); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
944 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
945 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
946 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
947 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
948 for ( i=0; i < len1; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
949 if ( size == 1 ) val1 = (int)*CHARP(cp1, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
950 else if ( size == 2 ) val1 = (int)*SHORTP(cp1, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
951 else if ( size == 4 ) val1 = (int)*LONGP(cp1, i); |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
952 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
953 if ( size == 1 ) val2 = (int)*CHARP(cp2, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
954 else if ( size == 2 ) val2 = (int)*SHORTP(cp2, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
955 else if ( size == 4 ) val2 = (int)*LONGP(cp2, i); |
| 877 | 956 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
957 newval = val1 + val2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
958 /* truncate in case of overflow */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
959 if (newval > maxval) newval = maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
960 else if (newval < -maxval) newval = -maxval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
961 else if (size == 4 && (newval^val1) < 0 && (newval^val2) < 0) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
962 newval = val1 > 0 ? maxval : - maxval; |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
963 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
964 if ( size == 1 ) *CHARP(ncp, i) = (signed char)newval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
965 else if ( size == 2 ) *SHORTP(ncp, i) = (short)newval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
966 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)newval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
967 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
968 return rv; |
| 877 | 969 } |
| 970 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
971 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
972 audioop_bias(PyObject *self, PyObject *args) |
| 877 | 973 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
974 signed char *cp, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
975 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
976 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
977 PyObject *rv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
978 int bias; |
| 877 | 979 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
980 if ( !PyArg_ParseTuple(args, "s#ii:bias", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
981 &cp, &len, &size , &bias) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
982 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
983 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
984 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
985 return NULL; |
| 877 | 986 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
987 rv = PyBytes_FromStringAndSize(NULL, len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
988 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
989 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
990 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
991 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
992 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
993 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
994 if ( size == 1 ) val = (int)*CHARP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
995 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
996 else if ( size == 4 ) val = (int)*LONGP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
997 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
998 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(val+bias); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
999 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val+bias); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1000 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(val+bias); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1001 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1002 return rv; |
| 877 | 1003 } |
| 1004 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1005 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1006 audioop_reverse(PyObject *self, PyObject *args) |
|
1238
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1007 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1008 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1009 unsigned char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1010 Py_ssize_t len, i, j; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1011 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1012 PyObject *rv; |
|
1238
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1013 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1014 if ( !PyArg_ParseTuple(args, "s#i:reverse", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1015 &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1016 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1017 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1018 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1019 return NULL; |
|
1238
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1020 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1021 rv = PyBytes_FromStringAndSize(NULL, len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1022 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1023 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1024 ncp = (unsigned char *)PyBytes_AsString(rv); |
|
1238
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1025 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1026 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1027 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1028 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1029 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1030 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1031 j = len - i - size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1032 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1033 if ( size == 1 ) *CHARP(ncp, j) = (signed char)(val >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1034 else if ( size == 2 ) *SHORTP(ncp, j) = (short)(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1035 else if ( size == 4 ) *LONGP(ncp, j) = (Py_Int32)(val<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1036 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1037 return rv; |
|
1238
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1038 } |
|
d426c5d59254
Added audioop.reverse() which reverses an audio sample
Jack Jansen <jack.jansen@cwi.nl>
parents:
1224
diff
changeset
|
1039 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1040 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1041 audioop_lin2lin(PyObject *self, PyObject *args) |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1042 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1043 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1044 unsigned char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1045 Py_ssize_t len, i, j; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1046 int size, size2, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1047 PyObject *rv; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1048 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1049 if ( !PyArg_ParseTuple(args, "s#ii:lin2lin", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1050 &cp, &len, &size, &size2) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1051 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1052 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1053 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1054 return NULL; |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1055 if (!audioop_check_size(size2)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1056 return NULL; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1057 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1058 if (len/size > PY_SSIZE_T_MAX/size2) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1059 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1060 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1061 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1062 } |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1063 rv = PyBytes_FromStringAndSize(NULL, (len/size)*size2); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1064 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1065 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1066 ncp = (unsigned char *)PyBytes_AsString(rv); |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1067 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1068 for ( i=0, j=0; i < len; i += size, j += size2 ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1069 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1070 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1071 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1072 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1073 if ( size2 == 1 ) *CHARP(ncp, j) = (signed char)(val >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1074 else if ( size2 == 2 ) *SHORTP(ncp, j) = (short)(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1075 else if ( size2 == 4 ) *LONGP(ncp, j) = (Py_Int32)(val<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1076 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1077 return rv; |
|
1224
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1078 } |
|
7e27659eb2d9
This time really check in the new routines :-)
Jack Jansen <jack.jansen@cwi.nl>
parents:
1223
diff
changeset
|
1079 |
|
5555
989f4ff73429
fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
1080 static int |
|
13651
8a063423e0b7
Bunch of minor ANSIfications: 'void initfunc()' -> 'void initfunc(void)',
Thomas Wouters <thomas@python.org>
parents:
13519
diff
changeset
|
1081 gcd(int a, int b) |
|
5555
989f4ff73429
fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
1082 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1083 while (b > 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1084 int tmp = a % b; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1085 a = b; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1086 b = tmp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1087 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1088 return a; |
|
5555
989f4ff73429
fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
1089 } |
|
989f4ff73429
fixed ratecv to continue working if product of rates is bigger than 32 bits
Guido van Rossum <guido@python.org>
parents:
5287
diff
changeset
|
1090 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1091 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1092 audioop_ratecv(PyObject *self, PyObject *args) |
|
4987
1ded9438fa51
Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4879
diff
changeset
|
1093 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1094 char *cp, *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1095 Py_ssize_t len; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1096 int size, nchannels, inrate, outrate, weightA, weightB; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1097 int chan, d, *prev_i, *cur_i, cur_o; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1098 PyObject *state, *samps, *str, *rv = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1099 int bytes_per_frame; |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
1100 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1101 weightA = 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1102 weightB = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1103 if (!PyArg_ParseTuple(args, "s#iiiiO|ii:ratecv", &cp, &len, &size, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1104 &nchannels, &inrate, &outrate, &state, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1105 &weightA, &weightB)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1106 return NULL; |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1107 if (!audioop_check_size(size)) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1108 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1109 if (nchannels < 1) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1110 PyErr_SetString(AudioopError, "# of channels should be >= 1"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1111 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1112 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1113 bytes_per_frame = size * nchannels; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1114 if (bytes_per_frame / nchannels != size) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1115 /* This overflow test is rigorously correct because |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1116 both multiplicands are >= 1. Use the argument names |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1117 from the docs for the error msg. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1118 PyErr_SetString(PyExc_OverflowError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1119 "width * nchannels too big for a C int"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1120 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1121 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1122 if (weightA < 1 || weightB < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1123 PyErr_SetString(AudioopError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1124 "weightA should be >= 1, weightB should be >= 0"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1125 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1126 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1127 if (len % bytes_per_frame != 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1128 PyErr_SetString(AudioopError, "not a whole number of frames"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1129 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1130 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1131 if (inrate <= 0 || outrate <= 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1132 PyErr_SetString(AudioopError, "sampling rate not > 0"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1133 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1134 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1135 /* divide inrate and outrate by their greatest common divisor */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1136 d = gcd(inrate, outrate); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1137 inrate /= d; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1138 outrate /= d; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1139 |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1140 if ((size_t)nchannels > PY_SIZE_MAX/sizeof(int)) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1141 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1142 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1143 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1144 } |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1145 prev_i = (int *) malloc(nchannels * sizeof(int)); |
|
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1146 cur_i = (int *) malloc(nchannels * sizeof(int)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1147 if (prev_i == NULL || cur_i == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1148 (void) PyErr_NoMemory(); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1149 goto exit; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1150 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1151 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1152 len /= bytes_per_frame; /* # of frames */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1153 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1154 if (state == Py_None) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1155 d = -outrate; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1156 for (chan = 0; chan < nchannels; chan++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1157 prev_i[chan] = cur_i[chan] = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1158 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1159 else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1160 if (!PyArg_ParseTuple(state, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1161 "iO!;audioop.ratecv: illegal state argument", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1162 &d, &PyTuple_Type, &samps)) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1163 goto exit; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1164 if (PyTuple_Size(samps) != nchannels) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1165 PyErr_SetString(AudioopError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1166 "illegal state argument"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1167 goto exit; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1168 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1169 for (chan = 0; chan < nchannels; chan++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1170 if (!PyArg_ParseTuple(PyTuple_GetItem(samps, chan), |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1171 "ii:ratecv", &prev_i[chan], |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1172 &cur_i[chan])) |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1173 goto exit; |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1174 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1175 } |
|
21218
656c4cf5165f
SF bug 482574: audioop.ratecv crashes.
Tim Peters <tim.peters@gmail.com>
parents:
14375
diff
changeset
|
1176 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1177 /* str <- Space for the output buffer. */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1178 { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1179 /* There are len input frames, so we need (mathematically) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1180 ceiling(len*outrate/inrate) output frames, and each frame |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1181 requires bytes_per_frame bytes. Computing this |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1182 without spurious overflow is the challenge; we can |
|
61507
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1183 settle for a reasonable upper bound, though, in this |
|
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1184 case ceiling(len/inrate) * outrate. */ |
|
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1185 |
|
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1186 /* compute ceiling(len/inrate) without overflow */ |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1187 Py_ssize_t q = len > 0 ? 1 + (len - 1) / inrate : 0; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1188 if (outrate > PY_SSIZE_T_MAX / q / bytes_per_frame) |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1189 str = NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1190 else |
|
61507
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1191 str = PyBytes_FromStringAndSize(NULL, |
|
011940baefb0
Merged revisions 81079 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61480
diff
changeset
|
1192 q * outrate * bytes_per_frame); |
|
21280
3657befaba4f
audioop_ratecv() again: settle for a sloppier upper bound that's less
Tim Peters <tim.peters@gmail.com>
parents:
21239
diff
changeset
|
1193 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1194 if (str == NULL) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1195 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1196 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1197 goto exit; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1198 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1199 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1200 ncp = PyBytes_AsString(str); |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
1201 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1202 for (;;) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1203 while (d < 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1204 if (len == 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1205 samps = PyTuple_New(nchannels); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1206 if (samps == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1207 goto exit; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1208 for (chan = 0; chan < nchannels; chan++) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1209 PyTuple_SetItem(samps, chan, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1210 Py_BuildValue("(ii)", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1211 prev_i[chan], |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1212 cur_i[chan])); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1213 if (PyErr_Occurred()) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1214 goto exit; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1215 /* We have checked before that the length |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1216 * of the string fits into int. */ |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1217 len = (Py_ssize_t)(ncp - PyBytes_AsString(str)); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1218 rv = PyBytes_FromStringAndSize |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1219 (PyBytes_AsString(str), len); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1220 Py_DECREF(str); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1221 str = rv; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1222 if (str == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1223 goto exit; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1224 rv = Py_BuildValue("(O(iO))", str, d, samps); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1225 Py_DECREF(samps); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1226 Py_DECREF(str); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1227 goto exit; /* return rv */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1228 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1229 for (chan = 0; chan < nchannels; chan++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1230 prev_i[chan] = cur_i[chan]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1231 if (size == 1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1232 cur_i[chan] = ((int)*CHARP(cp, 0)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1233 else if (size == 2) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1234 cur_i[chan] = (int)*SHORTP(cp, 0); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1235 else if (size == 4) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1236 cur_i[chan] = ((int)*LONGP(cp, 0)) >> 16; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1237 cp += size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1238 /* implements a simple digital filter */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1239 cur_i[chan] = |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1240 (weightA * cur_i[chan] + |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1241 weightB * prev_i[chan]) / |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1242 (weightA + weightB); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1243 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1244 len--; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1245 d += outrate; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1246 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1247 while (d >= 0) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1248 for (chan = 0; chan < nchannels; chan++) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1249 cur_o = (prev_i[chan] * d + |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1250 cur_i[chan] * (outrate - d)) / |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1251 outrate; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1252 if (size == 1) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1253 *CHARP(ncp, 0) = (signed char)(cur_o >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1254 else if (size == 2) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1255 *SHORTP(ncp, 0) = (short)(cur_o); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1256 else if (size == 4) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1257 *LONGP(ncp, 0) = (Py_Int32)(cur_o<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1258 ncp += size; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1259 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1260 d -= inrate; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1261 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1262 } |
|
11256
26fbc80fadf2
Fixed memory leak in ratecv, in response to PR#72. By Sjoerd Mullender.
Guido van Rossum <guido@python.org>
parents:
9588
diff
changeset
|
1263 exit: |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1264 if (prev_i != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1265 free(prev_i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1266 if (cur_i != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1267 free(cur_i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1268 return rv; |
|
4987
1ded9438fa51
Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4879
diff
changeset
|
1269 } |
|
5095
11922a2ecacd
Changes by Sjoerd (reformatted).
Guido van Rossum <guido@python.org>
parents:
4987
diff
changeset
|
1270 |
|
4987
1ded9438fa51
Added Sjoerd's submitted 'ratecv' method. Made corrections for new names.
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4879
diff
changeset
|
1271 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1272 audioop_lin2ulaw(PyObject *self, PyObject *args) |
| 877 | 1273 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1274 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1275 unsigned char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1276 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1277 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1278 PyObject *rv; |
| 877 | 1279 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1280 if ( !PyArg_ParseTuple(args, "s#i:lin2ulaw", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1281 &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1282 return 0 ; |
| 877 | 1283 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1284 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1285 return NULL; |
| 877 | 1286 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1287 rv = PyBytes_FromStringAndSize(NULL, len/size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1288 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1289 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1290 ncp = (unsigned char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1291 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1292 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1293 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1294 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1295 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1296 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1297 *ncp++ = st_14linear2ulaw(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1298 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1299 return rv; |
| 877 | 1300 } |
| 1301 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1302 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1303 audioop_ulaw2lin(PyObject *self, PyObject *args) |
| 877 | 1304 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1305 unsigned char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1306 unsigned char cval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1307 signed char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1308 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1309 int size, val; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1310 PyObject *rv; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1311 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1312 if ( !PyArg_ParseTuple(args, "s#i:ulaw2lin", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1313 &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1314 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1315 |
|
74670
77188bc37c74
Issue #13806: The size check in audioop decompression functions was too strict and could reject valid compressed data.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
1316 if (!audioop_check_size(size)) |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1317 return NULL; |
| 877 | 1318 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1319 if (len > PY_SSIZE_T_MAX/size) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1320 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1321 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1322 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1323 } |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1324 rv = PyBytes_FromStringAndSize(NULL, len*size); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1325 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1326 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1327 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1328 |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1329 for ( i=0; i < len*size; i += size ) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1330 cval = *cp++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1331 val = st_ulaw2linear16(cval); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1332 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1333 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(val >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1334 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1335 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(val<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1336 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1337 return rv; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1338 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1339 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1340 static PyObject * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1341 audioop_lin2alaw(PyObject *self, PyObject *args) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1342 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1343 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1344 unsigned char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1345 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1346 int size, val = 0; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1347 PyObject *rv; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1348 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1349 if ( !PyArg_ParseTuple(args, "s#i:lin2alaw", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1350 &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1351 return 0; |
| 877 | 1352 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1353 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1354 return NULL; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1355 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1356 rv = PyBytes_FromStringAndSize(NULL, len/size); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1357 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1358 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1359 ncp = (unsigned char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1360 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1361 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1362 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1363 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1364 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1365 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1366 *ncp++ = st_linear2alaw(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1367 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1368 return rv; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1369 } |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1370 |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1371 static PyObject * |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1372 audioop_alaw2lin(PyObject *self, PyObject *args) |
|
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1373 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1374 unsigned char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1375 unsigned char cval; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1376 signed char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1377 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1378 int size, val; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1379 PyObject *rv; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1380 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1381 if ( !PyArg_ParseTuple(args, "s#i:alaw2lin", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1382 &cp, &len, &size) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1383 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1384 |
|
74670
77188bc37c74
Issue #13806: The size check in audioop decompression functions was too strict and could reject valid compressed data.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
1385 if (!audioop_check_size(size)) |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1386 return NULL; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1387 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1388 if (len > PY_SSIZE_T_MAX/size) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1389 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1390 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1391 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1392 } |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1393 rv = PyBytes_FromStringAndSize(NULL, len*size); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1394 if ( rv == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1395 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1396 ncp = (signed char *)PyBytes_AsString(rv); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1397 |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1398 for ( i=0; i < len*size; i += size ) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1399 cval = *cp++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1400 val = st_alaw2linear16(cval); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1401 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1402 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(val >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1403 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(val); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1404 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(val<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1405 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1406 return rv; |
| 877 | 1407 } |
| 1408 | |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1409 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1410 audioop_lin2adpcm(PyObject *self, PyObject *args) |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1411 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1412 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1413 signed char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1414 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1415 int size, val = 0, step, valpred, delta, |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1416 index, sign, vpdiff, diff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1417 PyObject *rv, *state, *str; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1418 int outputbuffer = 0, bufferstep; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1419 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1420 if ( !PyArg_ParseTuple(args, "s#iO:lin2adpcm", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1421 &cp, &len, &size, &state) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1422 return 0; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1423 |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1424 if (!audioop_check_parameters(len, size)) |
|
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1425 return NULL; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1426 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1427 str = PyBytes_FromStringAndSize(NULL, len/(size*2)); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1428 if ( str == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1429 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1430 ncp = (signed char *)PyBytes_AsString(str); |
|
1223
5ae4a8cf79ef
Added lin2lin, findmax, findfactor and fintfit routines
Jack Jansen <jack.jansen@cwi.nl>
parents:
1213
diff
changeset
|
1431 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1432 /* Decode state, should have (value, step) */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1433 if ( state == Py_None ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1434 /* First time, it seems. Set defaults */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1435 valpred = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1436 step = 7; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1437 index = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1438 } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1439 return 0; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1440 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1441 step = stepsizeTable[index]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1442 bufferstep = 1; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1443 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1444 for ( i=0; i < len; i += size ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1445 if ( size == 1 ) val = ((int)*CHARP(cp, i)) << 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1446 else if ( size == 2 ) val = (int)*SHORTP(cp, i); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1447 else if ( size == 4 ) val = ((int)*LONGP(cp, i)) >> 16; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1448 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1449 /* Step 1 - compute difference with previous value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1450 diff = val - valpred; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1451 sign = (diff < 0) ? 8 : 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1452 if ( sign ) diff = (-diff); |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1453 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1454 /* Step 2 - Divide and clamp */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1455 /* Note: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1456 ** This code *approximately* computes: |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1457 ** delta = diff*4/step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1458 ** vpdiff = (delta+0.5)*step/4; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1459 ** but in shift step bits are dropped. The net result of this |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1460 ** is that even if you have fast mul/div hardware you cannot |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1461 ** put it to good use since the fixup would be too expensive. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1462 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1463 delta = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1464 vpdiff = (step >> 3); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1465 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1466 if ( diff >= step ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1467 delta = 4; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1468 diff -= step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1469 vpdiff += step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1470 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1471 step >>= 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1472 if ( diff >= step ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1473 delta |= 2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1474 diff -= step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1475 vpdiff += step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1476 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1477 step >>= 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1478 if ( diff >= step ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1479 delta |= 1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1480 vpdiff += step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1481 } |
|
1180
1d6cbeb27096
Fixed various bugs in the adpcm routines
Jack Jansen <jack.jansen@cwi.nl>
parents:
993
diff
changeset
|
1482 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1483 /* Step 3 - Update previous value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1484 if ( sign ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1485 valpred -= vpdiff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1486 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1487 valpred += vpdiff; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1488 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1489 /* Step 4 - Clamp previous value to 16 bits */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1490 if ( valpred > 32767 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1491 valpred = 32767; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1492 else if ( valpred < -32768 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1493 valpred = -32768; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1494 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1495 /* Step 5 - Assemble value, update index and step values */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1496 delta |= sign; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1497 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1498 index += indexTable[delta]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1499 if ( index < 0 ) index = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1500 if ( index > 88 ) index = 88; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1501 step = stepsizeTable[index]; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1502 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1503 /* Step 6 - Output value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1504 if ( bufferstep ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1505 outputbuffer = (delta << 4) & 0xf0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1506 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1507 *ncp++ = (delta & 0x0f) | outputbuffer; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1508 } |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1509 bufferstep = !bufferstep; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1510 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1511 rv = Py_BuildValue("(O(ii))", str, valpred, index); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1512 Py_DECREF(str); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1513 return rv; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1514 } |
|
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1515 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1516 static PyObject * |
|
13519
070e41f2697b
ANSI-fication
Peter Schneider-Kamp <nowonder@nowonder.de>
parents:
13256
diff
changeset
|
1517 audioop_adpcm2lin(PyObject *self, PyObject *args) |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1518 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1519 signed char *cp; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1520 signed char *ncp; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1521 Py_ssize_t len, i; |
|
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1522 int size, valpred, step, delta, index, sign, vpdiff; |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1523 PyObject *rv, *str, *state; |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1524 int inputbuffer = 0, bufferstep; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1525 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1526 if ( !PyArg_ParseTuple(args, "s#iO:adpcm2lin", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1527 &cp, &len, &size, &state) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1528 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1529 |
|
74670
77188bc37c74
Issue #13806: The size check in audioop decompression functions was too strict and could reject valid compressed data.
Antoine Pitrou <solipsis@pitrou.net>
parents:
68257
diff
changeset
|
1530 if (!audioop_check_size(size)) |
|
62737
7184421f83b5
Merged revisions 82495 via svnmerge from
Victor Stinner <victor.stinner@haypocalc.com>
parents:
61507
diff
changeset
|
1531 return NULL; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1532 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1533 /* Decode state, should have (value, step) */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1534 if ( state == Py_None ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1535 /* First time, it seems. Set defaults */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1536 valpred = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1537 step = 7; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1538 index = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1539 } else if ( !PyArg_ParseTuple(state, "ii", &valpred, &index) ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1540 return 0; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1541 |
|
61509
9c321aaeef12
Issue #8657: Make the audioop module PY_SSIZE_T_CLEAN.
Mark Dickinson <dickinsm@gmail.com>
parents:
61507
diff
changeset
|
1542 if (len > (PY_SSIZE_T_MAX/2)/size) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1543 PyErr_SetString(PyExc_MemoryError, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1544 "not enough memory for output buffer"); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1545 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1546 } |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1547 str = PyBytes_FromStringAndSize(NULL, len*size*2); |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1548 if ( str == 0 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1549 return 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1550 ncp = (signed char *)PyBytes_AsString(str); |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1551 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1552 step = stepsizeTable[index]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1553 bufferstep = 0; |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1554 |
|
61480
20ae83821ef0
Merged revisions 81045 via svnmerge from
Mark Dickinson <dickinsm@gmail.com>
parents:
61466
diff
changeset
|
1555 for ( i=0; i < len*size*2; i += size ) { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1556 /* Step 1 - get the delta value and compute next index */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1557 if ( bufferstep ) { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1558 delta = inputbuffer & 0xf; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1559 } else { |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1560 inputbuffer = *cp++; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1561 delta = (inputbuffer >> 4) & 0xf; |
|
37879
f731859e9b3b
Merge p3yk branch with the trunk up to revision 45595. This breaks a fair
Thomas Wouters <thomas@python.org>
parents:
36861
diff
changeset
|
1562 } |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1563 |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1564 bufferstep = !bufferstep; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1565 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1566 /* Step 2 - Find new index value (for later) */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1567 index += indexTable[delta]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1568 if ( index < 0 ) index = 0; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1569 if ( index > 88 ) index = 88; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1570 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1571 /* Step 3 - Separate sign and magnitude */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1572 sign = delta & 8; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1573 delta = delta & 7; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1574 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1575 /* Step 4 - Compute difference and new predicted value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1576 /* |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1577 ** Computes 'vpdiff = (delta+0.5)*step/4', but see comment |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1578 ** in adpcm_coder. |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1579 */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1580 vpdiff = step >> 3; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1581 if ( delta & 4 ) vpdiff += step; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1582 if ( delta & 2 ) vpdiff += step>>1; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1583 if ( delta & 1 ) vpdiff += step>>2; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1584 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1585 if ( sign ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1586 valpred -= vpdiff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1587 else |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1588 valpred += vpdiff; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1589 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1590 /* Step 5 - clamp output value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1591 if ( valpred > 32767 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1592 valpred = 32767; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1593 else if ( valpred < -32768 ) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1594 valpred = -32768; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1595 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1596 /* Step 6 - Update step value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1597 step = stepsizeTable[index]; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1598 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1599 /* Step 6 - Output value */ |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1600 if ( size == 1 ) *CHARP(ncp, i) = (signed char)(valpred >> 8); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1601 else if ( size == 2 ) *SHORTP(ncp, i) = (short)(valpred); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1602 else if ( size == 4 ) *LONGP(ncp, i) = (Py_Int32)(valpred<<16); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1603 } |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1604 |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1605 rv = Py_BuildValue("(O(ii))", str, valpred, index); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1606 Py_DECREF(str); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1607 return rv; |
|
909
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1608 } |
|
4da0b7dae796
Added conversions to/from ADPCM(-4); renamed adpcm to adpcm3 (what it
Guido van Rossum <guido@python.org>
parents:
905
diff
changeset
|
1609 |
|
4879
4514023160b4
Renamed, reindented. (was already partially complete)
Roger E. Masse <rmasse@newcnri.cnri.reston.va.us>
parents:
4600
diff
changeset
|
1610 static PyMethodDef audioop_methods[] = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1611 { "max", audioop_max, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1612 { "minmax", audioop_minmax, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1613 { "avg", audioop_avg, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1614 { "maxpp", audioop_maxpp, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1615 { "avgpp", audioop_avgpp, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1616 { "rms", audioop_rms, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1617 { "findfit", audioop_findfit, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1618 { "findmax", audioop_findmax, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1619 { "findfactor", audioop_findfactor, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1620 { "cross", audioop_cross, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1621 { "mul", audioop_mul, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1622 { "add", audioop_add, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1623 { "bias", audioop_bias, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1624 { "ulaw2lin", audioop_ulaw2lin, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1625 { "lin2ulaw", audioop_lin2ulaw, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1626 { "alaw2lin", audioop_alaw2lin, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1627 { "lin2alaw", audioop_lin2alaw, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1628 { "lin2lin", audioop_lin2lin, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1629 { "adpcm2lin", audioop_adpcm2lin, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1630 { "lin2adpcm", audioop_lin2adpcm, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1631 { "tomono", audioop_tomono, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1632 { "tostereo", audioop_tostereo, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1633 { "getsample", audioop_getsample, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1634 { "reverse", audioop_reverse, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1635 { "ratecv", audioop_ratecv, METH_VARARGS }, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1636 { 0, 0 } |
| 877 | 1637 }; |
| 1638 | |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1639 |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1640 static struct PyModuleDef audioopmodule = { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1641 PyModuleDef_HEAD_INIT, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1642 "audioop", |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1643 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1644 -1, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1645 audioop_methods, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1646 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1647 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1648 NULL, |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1649 NULL |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1650 }; |
|
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1651 |
|
24471
f66b3a3509c7
Excise DL_EXPORT/DL_IMPORT from Modules/*. Required adding a prototype
Mark Hammond <mhammond@skippinet.com.au>
parents:
21757
diff
changeset
|
1652 PyMODINIT_FUNC |
|
47580
94f64f11fdd0
Implement PEP 3121: new module initialization and finalization API.
Martin v. Löwis <martin@v.loewis.de>
parents:
47301
diff
changeset
|
1653 PyInit_audioop(void) |
| 877 | 1654 { |
|
61466
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1655 PyObject *m, *d; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1656 m = PyModule_Create(&audioopmodule); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1657 if (m == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1658 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1659 d = PyModule_GetDict(m); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1660 if (d == NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1661 return NULL; |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1662 AudioopError = PyErr_NewException("audioop.error", NULL, NULL); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1663 if (AudioopError != NULL) |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1664 PyDict_SetItemString(d,"error",AudioopError); |
|
cab14be0ada1
Recorded merge of revisions 81029 via svnmerge from
Antoine Pitrou <solipsis@pitrou.net>
parents:
54104
diff
changeset
|
1665 return m; |
| 877 | 1666 } |
