mirror of
https://github.com/jart/cosmopolitan.git
synced 2025-07-07 03:38:31 +00:00
Backporting METH_FASTCALL from Python 3.7 (#317)
* dict copy speedup refer to bpo-31179 or python/cpython@boa7a037b8fde * __build_class__() uses METH_FASTCALL refer python/cpython@69de71b255 refer python/cpython@773dc6dd06 a single test related to __prepare__ fails. * type_prepare uses METH_FASTCALL refer python/cpython@d526cfe546 refer python/cpython@80ab22fa2c the prepare-related test still fails. It's just related to the error message format though. * separate into ParseStack and ParseStackAndKeywords refer python/cpython@6518a93cb1 refer python/cpython@3e1fad6913 refer python/cpython@c0083fc47d * Add _PyArg_NoStackKeywords refer python/cpython@29d39cc8f5 * _PyStack_UnpackDict now returns int refer python/cpython@998c20962c * METH_FASTCALL changes to .inc files done via python's Argument Clinic tool, refer python/cpython@259f0e4437 * Added _PyArg_UnpackStack refer python/cpython@fe54dda08 * Argument Clinic FASTCALL again refer python/cpython@0c4a828ca * Argument Clinic for ordered dictionary object refer python/cpython@b05cbac052 * speed up getargs refer python/cpython@1741441649 * FASTCALL for sorted, next, and getattr refer python/cpython@5a60ecaa7a refer python/cpython@fda6d0acf0 refer python/cpython@84b388bb80 * Optimize methoddescr_call refer python/cpython@2a1b676d1f refer python/cpython@c52572319c refer python/cpython@35ecebe165 refer python/cpython@8128d5a491 * cleanup _PyMethodDef_RawFastCallDict refer python/cpython@0a2e46835d refer python/cpython@98ccba8344 refer python/cpython@c89ef828cf refer python/cpython@250e4b0063 * print now uses METH_FASTCALL refer python/cpython@c3858bd7c6 refer python/cpython@bd584f169f refer python/cpython@06d34393c2 * _struct module now uses Argument Clinic refer python/cpython@3f2d10132d * make deque methods faster refer python/cpython@dd407d5006 * recursive calls in PyObject_Call refer python/cpython@7399a05965 only partially ported, because RawFastCallKeywords hasn't been ported * add macros refer python/cpython@68a001dd59 * all tests pass in MODE=dbg * convert some internal functions to FASTCALL __import__ might need to be changed later, if it is possible to backport the METH_FASTCALL | METH_KEYWORDS flag distinction later. * speed up unpickling refer python/cpython@bee09aecc2 * added _PyMethodDef_RawFastCallKeywords refer python/cpython@7399a05965 * PyCFunction_Call performance refer python/cpython@12c5838dae * avoid PyMethodObject in slots main change in python/cpython@516b98161a test_exceptions changed in python/cpython@331bbe6aaa type_settattro changed in python/cpython@193f7e094f _PyObject_CallFunctionVa changed in python/cpython@fe4ff83049 * fix refcount error found in MODE=dbg all tests now pass in MODE=dbg
This commit is contained in:
parent
6f658f058b
commit
7fe9e70117
71 changed files with 4154 additions and 2450 deletions
267
third_party/python/Modules/clinic/audioop.inc
vendored
267
third_party/python/Modules/clinic/audioop.inc
vendored
|
@ -2,7 +2,6 @@
|
|||
/*[clinic input]
|
||||
preserve
|
||||
[clinic start generated code]*/
|
||||
#include "third_party/python/Include/abstract.h"
|
||||
|
||||
PyDoc_STRVAR(audioop_getsample__doc__,
|
||||
"getsample($module, fragment, width, index, /)\n"
|
||||
|
@ -11,24 +10,28 @@ PyDoc_STRVAR(audioop_getsample__doc__,
|
|||
"Return the value of sample index from the fragment.");
|
||||
|
||||
#define AUDIOOP_GETSAMPLE_METHODDEF \
|
||||
{"getsample", (PyCFunction)audioop_getsample, METH_VARARGS, audioop_getsample__doc__},
|
||||
{"getsample", (PyCFunction)audioop_getsample, METH_FASTCALL, audioop_getsample__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_getsample_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
Py_ssize_t index);
|
||||
|
||||
static PyObject *
|
||||
audioop_getsample(PyObject *module, PyObject *args)
|
||||
audioop_getsample(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
Py_ssize_t index;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*in:getsample",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*in:getsample",
|
||||
&fragment, &width, &index)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("getsample", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_getsample_impl(module, &fragment, width, index);
|
||||
|
||||
exit:
|
||||
|
@ -47,22 +50,26 @@ PyDoc_STRVAR(audioop_max__doc__,
|
|||
"Return the maximum of the absolute value of all samples in a fragment.");
|
||||
|
||||
#define AUDIOOP_MAX_METHODDEF \
|
||||
{"max", (PyCFunction)audioop_max, METH_VARARGS, audioop_max__doc__},
|
||||
{"max", (PyCFunction)audioop_max, METH_FASTCALL, audioop_max__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_max_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_max(PyObject *module, PyObject *args)
|
||||
audioop_max(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:max",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:max",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("max", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_max_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -81,22 +88,26 @@ PyDoc_STRVAR(audioop_minmax__doc__,
|
|||
"Return the minimum and maximum values of all samples in the sound fragment.");
|
||||
|
||||
#define AUDIOOP_MINMAX_METHODDEF \
|
||||
{"minmax", (PyCFunction)audioop_minmax, METH_VARARGS, audioop_minmax__doc__},
|
||||
{"minmax", (PyCFunction)audioop_minmax, METH_FASTCALL, audioop_minmax__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_minmax_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_minmax(PyObject *module, PyObject *args)
|
||||
audioop_minmax(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:minmax",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:minmax",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("minmax", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_minmax_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -115,22 +126,26 @@ PyDoc_STRVAR(audioop_avg__doc__,
|
|||
"Return the average over all samples in the fragment.");
|
||||
|
||||
#define AUDIOOP_AVG_METHODDEF \
|
||||
{"avg", (PyCFunction)audioop_avg, METH_VARARGS, audioop_avg__doc__},
|
||||
{"avg", (PyCFunction)audioop_avg, METH_FASTCALL, audioop_avg__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_avg_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_avg(PyObject *module, PyObject *args)
|
||||
audioop_avg(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:avg",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:avg",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("avg", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_avg_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -149,22 +164,26 @@ PyDoc_STRVAR(audioop_rms__doc__,
|
|||
"Return the root-mean-square of the fragment, i.e. sqrt(sum(S_i^2)/n).");
|
||||
|
||||
#define AUDIOOP_RMS_METHODDEF \
|
||||
{"rms", (PyCFunction)audioop_rms, METH_VARARGS, audioop_rms__doc__},
|
||||
{"rms", (PyCFunction)audioop_rms, METH_FASTCALL, audioop_rms__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_rms_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_rms(PyObject *module, PyObject *args)
|
||||
audioop_rms(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:rms",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:rms",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("rms", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_rms_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -183,23 +202,27 @@ PyDoc_STRVAR(audioop_findfit__doc__,
|
|||
"Try to match reference as well as possible to a portion of fragment.");
|
||||
|
||||
#define AUDIOOP_FINDFIT_METHODDEF \
|
||||
{"findfit", (PyCFunction)audioop_findfit, METH_VARARGS, audioop_findfit__doc__},
|
||||
{"findfit", (PyCFunction)audioop_findfit, METH_FASTCALL, audioop_findfit__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_findfit_impl(PyObject *module, Py_buffer *fragment,
|
||||
Py_buffer *reference);
|
||||
|
||||
static PyObject *
|
||||
audioop_findfit(PyObject *module, PyObject *args)
|
||||
audioop_findfit(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
Py_buffer reference = {NULL, NULL};
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*y*:findfit",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*y*:findfit",
|
||||
&fragment, &reference)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("findfit", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_findfit_impl(module, &fragment, &reference);
|
||||
|
||||
exit:
|
||||
|
@ -222,23 +245,27 @@ PyDoc_STRVAR(audioop_findfactor__doc__,
|
|||
"Return a factor F such that rms(add(fragment, mul(reference, -F))) is minimal.");
|
||||
|
||||
#define AUDIOOP_FINDFACTOR_METHODDEF \
|
||||
{"findfactor", (PyCFunction)audioop_findfactor, METH_VARARGS, audioop_findfactor__doc__},
|
||||
{"findfactor", (PyCFunction)audioop_findfactor, METH_FASTCALL, audioop_findfactor__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_findfactor_impl(PyObject *module, Py_buffer *fragment,
|
||||
Py_buffer *reference);
|
||||
|
||||
static PyObject *
|
||||
audioop_findfactor(PyObject *module, PyObject *args)
|
||||
audioop_findfactor(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
Py_buffer reference = {NULL, NULL};
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*y*:findfactor",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*y*:findfactor",
|
||||
&fragment, &reference)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("findfactor", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_findfactor_impl(module, &fragment, &reference);
|
||||
|
||||
exit:
|
||||
|
@ -261,23 +288,27 @@ PyDoc_STRVAR(audioop_findmax__doc__,
|
|||
"Search fragment for a slice of specified number of samples with maximum energy.");
|
||||
|
||||
#define AUDIOOP_FINDMAX_METHODDEF \
|
||||
{"findmax", (PyCFunction)audioop_findmax, METH_VARARGS, audioop_findmax__doc__},
|
||||
{"findmax", (PyCFunction)audioop_findmax, METH_FASTCALL, audioop_findmax__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_findmax_impl(PyObject *module, Py_buffer *fragment,
|
||||
Py_ssize_t length);
|
||||
|
||||
static PyObject *
|
||||
audioop_findmax(PyObject *module, PyObject *args)
|
||||
audioop_findmax(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
Py_ssize_t length;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*n:findmax",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*n:findmax",
|
||||
&fragment, &length)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("findmax", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_findmax_impl(module, &fragment, length);
|
||||
|
||||
exit:
|
||||
|
@ -296,22 +327,26 @@ PyDoc_STRVAR(audioop_avgpp__doc__,
|
|||
"Return the average peak-peak value over all samples in the fragment.");
|
||||
|
||||
#define AUDIOOP_AVGPP_METHODDEF \
|
||||
{"avgpp", (PyCFunction)audioop_avgpp, METH_VARARGS, audioop_avgpp__doc__},
|
||||
{"avgpp", (PyCFunction)audioop_avgpp, METH_FASTCALL, audioop_avgpp__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_avgpp_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_avgpp(PyObject *module, PyObject *args)
|
||||
audioop_avgpp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:avgpp",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:avgpp",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("avgpp", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_avgpp_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -330,22 +365,26 @@ PyDoc_STRVAR(audioop_maxpp__doc__,
|
|||
"Return the maximum peak-peak value in the sound fragment.");
|
||||
|
||||
#define AUDIOOP_MAXPP_METHODDEF \
|
||||
{"maxpp", (PyCFunction)audioop_maxpp, METH_VARARGS, audioop_maxpp__doc__},
|
||||
{"maxpp", (PyCFunction)audioop_maxpp, METH_FASTCALL, audioop_maxpp__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_maxpp_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_maxpp(PyObject *module, PyObject *args)
|
||||
audioop_maxpp(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:maxpp",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:maxpp",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("maxpp", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_maxpp_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -364,22 +403,26 @@ PyDoc_STRVAR(audioop_cross__doc__,
|
|||
"Return the number of zero crossings in the fragment passed as an argument.");
|
||||
|
||||
#define AUDIOOP_CROSS_METHODDEF \
|
||||
{"cross", (PyCFunction)audioop_cross, METH_VARARGS, audioop_cross__doc__},
|
||||
{"cross", (PyCFunction)audioop_cross, METH_FASTCALL, audioop_cross__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_cross_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_cross(PyObject *module, PyObject *args)
|
||||
audioop_cross(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:cross",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:cross",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("cross", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_cross_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -398,24 +441,28 @@ PyDoc_STRVAR(audioop_mul__doc__,
|
|||
"Return a fragment that has all samples in the original fragment multiplied by the floating-point value factor.");
|
||||
|
||||
#define AUDIOOP_MUL_METHODDEF \
|
||||
{"mul", (PyCFunction)audioop_mul, METH_VARARGS, audioop_mul__doc__},
|
||||
{"mul", (PyCFunction)audioop_mul, METH_FASTCALL, audioop_mul__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_mul_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
double factor);
|
||||
|
||||
static PyObject *
|
||||
audioop_mul(PyObject *module, PyObject *args)
|
||||
audioop_mul(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
double factor;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*id:mul",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*id:mul",
|
||||
&fragment, &width, &factor)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("mul", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_mul_impl(module, &fragment, width, factor);
|
||||
|
||||
exit:
|
||||
|
@ -434,14 +481,14 @@ PyDoc_STRVAR(audioop_tomono__doc__,
|
|||
"Convert a stereo fragment to a mono fragment.");
|
||||
|
||||
#define AUDIOOP_TOMONO_METHODDEF \
|
||||
{"tomono", (PyCFunction)audioop_tomono, METH_VARARGS, audioop_tomono__doc__},
|
||||
{"tomono", (PyCFunction)audioop_tomono, METH_FASTCALL, audioop_tomono__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_tomono_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
double lfactor, double rfactor);
|
||||
|
||||
static PyObject *
|
||||
audioop_tomono(PyObject *module, PyObject *args)
|
||||
audioop_tomono(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
|
@ -449,10 +496,14 @@ audioop_tomono(PyObject *module, PyObject *args)
|
|||
double lfactor;
|
||||
double rfactor;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*idd:tomono",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*idd:tomono",
|
||||
&fragment, &width, &lfactor, &rfactor)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("tomono", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_tomono_impl(module, &fragment, width, lfactor, rfactor);
|
||||
|
||||
exit:
|
||||
|
@ -471,14 +522,14 @@ PyDoc_STRVAR(audioop_tostereo__doc__,
|
|||
"Generate a stereo fragment from a mono fragment.");
|
||||
|
||||
#define AUDIOOP_TOSTEREO_METHODDEF \
|
||||
{"tostereo", (PyCFunction)audioop_tostereo, METH_VARARGS, audioop_tostereo__doc__},
|
||||
{"tostereo", (PyCFunction)audioop_tostereo, METH_FASTCALL, audioop_tostereo__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_tostereo_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
double lfactor, double rfactor);
|
||||
|
||||
static PyObject *
|
||||
audioop_tostereo(PyObject *module, PyObject *args)
|
||||
audioop_tostereo(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
|
@ -486,10 +537,14 @@ audioop_tostereo(PyObject *module, PyObject *args)
|
|||
double lfactor;
|
||||
double rfactor;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*idd:tostereo",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*idd:tostereo",
|
||||
&fragment, &width, &lfactor, &rfactor)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("tostereo", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_tostereo_impl(module, &fragment, width, lfactor, rfactor);
|
||||
|
||||
exit:
|
||||
|
@ -508,24 +563,28 @@ PyDoc_STRVAR(audioop_add__doc__,
|
|||
"Return a fragment which is the addition of the two samples passed as parameters.");
|
||||
|
||||
#define AUDIOOP_ADD_METHODDEF \
|
||||
{"add", (PyCFunction)audioop_add, METH_VARARGS, audioop_add__doc__},
|
||||
{"add", (PyCFunction)audioop_add, METH_FASTCALL, audioop_add__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_add_impl(PyObject *module, Py_buffer *fragment1,
|
||||
Py_buffer *fragment2, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_add(PyObject *module, PyObject *args)
|
||||
audioop_add(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment1 = {NULL, NULL};
|
||||
Py_buffer fragment2 = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*y*i:add",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*y*i:add",
|
||||
&fragment1, &fragment2, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("add", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_add_impl(module, &fragment1, &fragment2, width);
|
||||
|
||||
exit:
|
||||
|
@ -548,23 +607,27 @@ PyDoc_STRVAR(audioop_bias__doc__,
|
|||
"Return a fragment that is the original fragment with a bias added to each sample.");
|
||||
|
||||
#define AUDIOOP_BIAS_METHODDEF \
|
||||
{"bias", (PyCFunction)audioop_bias, METH_VARARGS, audioop_bias__doc__},
|
||||
{"bias", (PyCFunction)audioop_bias, METH_FASTCALL, audioop_bias__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_bias_impl(PyObject *module, Py_buffer *fragment, int width, int bias);
|
||||
|
||||
static PyObject *
|
||||
audioop_bias(PyObject *module, PyObject *args)
|
||||
audioop_bias(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
int bias;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*ii:bias",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*ii:bias",
|
||||
&fragment, &width, &bias)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("bias", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_bias_impl(module, &fragment, width, bias);
|
||||
|
||||
exit:
|
||||
|
@ -583,22 +646,26 @@ PyDoc_STRVAR(audioop_reverse__doc__,
|
|||
"Reverse the samples in a fragment and returns the modified fragment.");
|
||||
|
||||
#define AUDIOOP_REVERSE_METHODDEF \
|
||||
{"reverse", (PyCFunction)audioop_reverse, METH_VARARGS, audioop_reverse__doc__},
|
||||
{"reverse", (PyCFunction)audioop_reverse, METH_FASTCALL, audioop_reverse__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_reverse_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_reverse(PyObject *module, PyObject *args)
|
||||
audioop_reverse(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:reverse",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:reverse",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("reverse", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_reverse_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -617,22 +684,26 @@ PyDoc_STRVAR(audioop_byteswap__doc__,
|
|||
"Convert big-endian samples to little-endian and vice versa.");
|
||||
|
||||
#define AUDIOOP_BYTESWAP_METHODDEF \
|
||||
{"byteswap", (PyCFunction)audioop_byteswap, METH_VARARGS, audioop_byteswap__doc__},
|
||||
{"byteswap", (PyCFunction)audioop_byteswap, METH_FASTCALL, audioop_byteswap__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_byteswap_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_byteswap(PyObject *module, PyObject *args)
|
||||
audioop_byteswap(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:byteswap",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:byteswap",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("byteswap", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_byteswap_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -651,24 +722,28 @@ PyDoc_STRVAR(audioop_lin2lin__doc__,
|
|||
"Convert samples between 1-, 2-, 3- and 4-byte formats.");
|
||||
|
||||
#define AUDIOOP_LIN2LIN_METHODDEF \
|
||||
{"lin2lin", (PyCFunction)audioop_lin2lin, METH_VARARGS, audioop_lin2lin__doc__},
|
||||
{"lin2lin", (PyCFunction)audioop_lin2lin, METH_FASTCALL, audioop_lin2lin__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2lin_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
int newwidth);
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2lin(PyObject *module, PyObject *args)
|
||||
audioop_lin2lin(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
int newwidth;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*ii:lin2lin",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*ii:lin2lin",
|
||||
&fragment, &width, &newwidth)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("lin2lin", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_lin2lin_impl(module, &fragment, width, newwidth);
|
||||
|
||||
exit:
|
||||
|
@ -688,7 +763,7 @@ PyDoc_STRVAR(audioop_ratecv__doc__,
|
|||
"Convert the frame rate of the input fragment.");
|
||||
|
||||
#define AUDIOOP_RATECV_METHODDEF \
|
||||
{"ratecv", (PyCFunction)audioop_ratecv, METH_VARARGS, audioop_ratecv__doc__},
|
||||
{"ratecv", (PyCFunction)audioop_ratecv, METH_FASTCALL, audioop_ratecv__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
|
@ -696,7 +771,7 @@ audioop_ratecv_impl(PyObject *module, Py_buffer *fragment, int width,
|
|||
int weightA, int weightB);
|
||||
|
||||
static PyObject *
|
||||
audioop_ratecv(PyObject *module, PyObject *args)
|
||||
audioop_ratecv(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
|
@ -708,10 +783,14 @@ audioop_ratecv(PyObject *module, PyObject *args)
|
|||
int weightA = 1;
|
||||
int weightB = 0;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*iiiiO|ii:ratecv",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*iiiiO|ii:ratecv",
|
||||
&fragment, &width, &nchannels, &inrate, &outrate, &state, &weightA, &weightB)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("ratecv", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_ratecv_impl(module, &fragment, width, nchannels, inrate, outrate, state, weightA, weightB);
|
||||
|
||||
exit:
|
||||
|
@ -730,22 +809,26 @@ PyDoc_STRVAR(audioop_lin2ulaw__doc__,
|
|||
"Convert samples in the audio fragment to u-LAW encoding.");
|
||||
|
||||
#define AUDIOOP_LIN2ULAW_METHODDEF \
|
||||
{"lin2ulaw", (PyCFunction)audioop_lin2ulaw, METH_VARARGS, audioop_lin2ulaw__doc__},
|
||||
{"lin2ulaw", (PyCFunction)audioop_lin2ulaw, METH_FASTCALL, audioop_lin2ulaw__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2ulaw_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2ulaw(PyObject *module, PyObject *args)
|
||||
audioop_lin2ulaw(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:lin2ulaw",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:lin2ulaw",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("lin2ulaw", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_lin2ulaw_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -764,22 +847,26 @@ PyDoc_STRVAR(audioop_ulaw2lin__doc__,
|
|||
"Convert sound fragments in u-LAW encoding to linearly encoded sound fragments.");
|
||||
|
||||
#define AUDIOOP_ULAW2LIN_METHODDEF \
|
||||
{"ulaw2lin", (PyCFunction)audioop_ulaw2lin, METH_VARARGS, audioop_ulaw2lin__doc__},
|
||||
{"ulaw2lin", (PyCFunction)audioop_ulaw2lin, METH_FASTCALL, audioop_ulaw2lin__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_ulaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_ulaw2lin(PyObject *module, PyObject *args)
|
||||
audioop_ulaw2lin(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:ulaw2lin",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:ulaw2lin",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("ulaw2lin", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_ulaw2lin_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -798,22 +885,26 @@ PyDoc_STRVAR(audioop_lin2alaw__doc__,
|
|||
"Convert samples in the audio fragment to a-LAW encoding.");
|
||||
|
||||
#define AUDIOOP_LIN2ALAW_METHODDEF \
|
||||
{"lin2alaw", (PyCFunction)audioop_lin2alaw, METH_VARARGS, audioop_lin2alaw__doc__},
|
||||
{"lin2alaw", (PyCFunction)audioop_lin2alaw, METH_FASTCALL, audioop_lin2alaw__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2alaw_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2alaw(PyObject *module, PyObject *args)
|
||||
audioop_lin2alaw(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*i:lin2alaw",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:lin2alaw",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("lin2alaw", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_lin2alaw_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
|
@ -832,26 +923,34 @@ PyDoc_STRVAR(audioop_alaw2lin__doc__,
|
|||
"Convert sound fragments in a-LAW encoding to linearly encoded sound fragments.");
|
||||
|
||||
#define AUDIOOP_ALAW2LIN_METHODDEF \
|
||||
{"alaw2lin", (PyCFunction)audioop_alaw2lin, METH_VARARGS, audioop_alaw2lin__doc__},
|
||||
{"alaw2lin", (PyCFunction)audioop_alaw2lin, METH_FASTCALL, audioop_alaw2lin__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_alaw2lin_impl(PyObject *module, Py_buffer *fragment, int width);
|
||||
|
||||
static PyObject *
|
||||
audioop_alaw2lin(PyObject *module, PyObject *args)
|
||||
audioop_alaw2lin(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
if (!PyArg_ParseTuple(args, "y*i:alaw2lin", &fragment, &width)) {
|
||||
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*i:alaw2lin",
|
||||
&fragment, &width)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("alaw2lin", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_alaw2lin_impl(module, &fragment, width);
|
||||
|
||||
exit:
|
||||
/* Cleanup for fragment */
|
||||
if (fragment.obj) {
|
||||
PyBuffer_Release(&fragment);
|
||||
}
|
||||
|
||||
return return_value;
|
||||
}
|
||||
|
||||
|
@ -862,24 +961,28 @@ PyDoc_STRVAR(audioop_lin2adpcm__doc__,
|
|||
"Convert samples to 4 bit Intel/DVI ADPCM encoding.");
|
||||
|
||||
#define AUDIOOP_LIN2ADPCM_METHODDEF \
|
||||
{"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_VARARGS, audioop_lin2adpcm__doc__},
|
||||
{"lin2adpcm", (PyCFunction)audioop_lin2adpcm, METH_FASTCALL, audioop_lin2adpcm__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2adpcm_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
PyObject *state);
|
||||
|
||||
static PyObject *
|
||||
audioop_lin2adpcm(PyObject *module, PyObject *args)
|
||||
audioop_lin2adpcm(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
PyObject *state;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*iO:lin2adpcm",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*iO:lin2adpcm",
|
||||
&fragment, &width, &state)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("lin2adpcm", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_lin2adpcm_impl(module, &fragment, width, state);
|
||||
|
||||
exit:
|
||||
|
@ -898,24 +1001,28 @@ PyDoc_STRVAR(audioop_adpcm2lin__doc__,
|
|||
"Decode an Intel/DVI ADPCM coded fragment to a linear fragment.");
|
||||
|
||||
#define AUDIOOP_ADPCM2LIN_METHODDEF \
|
||||
{"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_VARARGS, audioop_adpcm2lin__doc__},
|
||||
{"adpcm2lin", (PyCFunction)audioop_adpcm2lin, METH_FASTCALL, audioop_adpcm2lin__doc__},
|
||||
|
||||
static PyObject *
|
||||
audioop_adpcm2lin_impl(PyObject *module, Py_buffer *fragment, int width,
|
||||
PyObject *state);
|
||||
|
||||
static PyObject *
|
||||
audioop_adpcm2lin(PyObject *module, PyObject *args)
|
||||
audioop_adpcm2lin(PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames)
|
||||
{
|
||||
PyObject *return_value = NULL;
|
||||
Py_buffer fragment = {NULL, NULL};
|
||||
int width;
|
||||
PyObject *state;
|
||||
|
||||
if (!PyArg_ParseTuple(args, "y*iO:adpcm2lin",
|
||||
if (!_PyArg_ParseStack(args, nargs, "y*iO:adpcm2lin",
|
||||
&fragment, &width, &state)) {
|
||||
goto exit;
|
||||
}
|
||||
|
||||
if (!_PyArg_NoStackKeywords("adpcm2lin", kwnames)) {
|
||||
goto exit;
|
||||
}
|
||||
return_value = audioop_adpcm2lin_impl(module, &fragment, width, state);
|
||||
|
||||
exit:
|
||||
|
@ -926,4 +1033,4 @@ exit:
|
|||
|
||||
return return_value;
|
||||
}
|
||||
/*[clinic end generated code: output=e0ab74c3fa57c39c input=a9049054013a1b77]*/
|
||||
/*[clinic end generated code: output=ee7c63ec28a11b78 input=a9049054013a1b77]*/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue