[pulseaudio-discuss] [PATCH 1/4] resampler-test: Add zero padding.
Peter Meerwald
pmeerw at pmeerw.net
Wed Dec 11 08:05:08 PST 2013
just nitpicking...
> For the resampler test we create 10 samples and run them through a
> resampler and then we try to run run the resampler backwards. This
run run
> crashes if our original 10 samples are not enough to produce any output
> on the original run.
>
> This patch adds additional zero padding to our original 10 samples. This
> way all resample methods produce enough output to run the resampler
> backwards.
> ---
> src/tests/resampler-test.c | 40 ++++++++++++++++++++++++++++++++--------
> 1 file changed, 32 insertions(+), 8 deletions(-)
>
> diff --git a/src/tests/resampler-test.c b/src/tests/resampler-test.c
> index 566b69f..84c21ad 100644
> --- a/src/tests/resampler-test.c
> +++ b/src/tests/resampler-test.c
> @@ -40,6 +40,12 @@
> #include <pulsecore/sample-util.h>
> #include <pulsecore/core-util.h>
>
> +/* The size of the padding is determined by running the resampler
"was determined" makes it clear that the code does not actively check for
crashes
> + * test with different padding values and watching if it crashes.
> + * As it turns out src-sinc-best-quality needs a huge amount of
> + * samples. At least 278 samples are needed so round it up to 280 */
> +#define PADDING 280
> +
> static void dump_block(const char *label, const pa_sample_spec *ss, const pa_memchunk *chunk) {
> void *d;
> unsigned i;
> @@ -57,7 +63,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_ALAW: {
> uint8_t *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++)
> + for (i = 0; i < 10; i++)
probably better to do PA_MIN(chunk->length / pa_frame_size(ss), 10)
> printf(" 0x%02x ", *(u++));
>
> break;
> @@ -67,7 +73,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_S16RE: {
> uint16_t *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++)
> + for (i = 0; i < 10; i++)
> printf(" 0x%04x ", *(u++));
>
> break;
> @@ -77,7 +83,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_S32RE: {
> uint32_t *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++)
> + for (i = 0; i < 10; i++)
> printf("0x%08x ", *(u++));
>
> break;
> @@ -87,7 +93,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_S24_32RE: {
> uint32_t *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++)
> + for (i = 0; i < 10; i++)
> printf("0x%08x ", *(u++));
>
> break;
> @@ -97,7 +103,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_FLOAT32RE: {
> float *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++) {
> + for (i = 0; i < 10; i++) {
> printf("%4.3g ", ss->format == PA_SAMPLE_FLOAT32NE ? *u : PA_FLOAT32_SWAP(*u));
> u++;
> }
> @@ -109,7 +115,7 @@ static void dump_block(const char *label, const pa_sample_spec *ss, const pa_mem
> case PA_SAMPLE_S24BE: {
> uint8_t *u = d;
>
> - for (i = 0; i < chunk->length / pa_frame_size(ss); i++) {
> + for (i = 0; i < 10; i++) {
> printf(" 0x%06x ", PA_READ24NE(u));
> u += pa_frame_size(ss);
> }
> @@ -131,7 +137,7 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> void *d;
> unsigned i;
>
> - pa_assert_se(r = pa_memblock_new(pool, pa_frame_size(ss) * 10));
> + pa_assert_se(r = pa_memblock_new(pool, pa_frame_size(ss) * (10 + PADDING)));
> d = pa_memblock_acquire(r);
a
memset(d, 0, pa_frame_size(ss) * (10 + PADDING))
would safe a lot of trouble
>
> switch (ss->format) {
> @@ -151,6 +157,10 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> u[7] = 0xF0;
> u[8] = 0x20;
> u[9] = 0x21;
> +
> + for (i = 10; i < 10 + PADDING; i++)
> + u[i] = 0x00;
> +
> break;
> }
>
> @@ -168,6 +178,9 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> u[7] = 0xF000;
> u[8] = 0x20;
> u[9] = 0x21;
> +
> + for (i = 10; i < 10 + PADDING; i++)
> + u[i] = 0x0000;
> break;
> }
>
> @@ -185,6 +198,10 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> u[7] = 0xF0000008;
> u[8] = 0x200009;
> u[9] = 0x21000A;
> +
> + for (i = 10; i < 10 + PADDING; i++)
> + u[i] = 0x00000000;
> +
> break;
> }
>
> @@ -220,8 +237,11 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> u[8] = -0.555f;
> u[9] = -.123f;
>
> + for (i = 10; i < 10 + PADDING; i++)
> + u[i] = 0.0f;
> +
> if (ss->format == PA_SAMPLE_FLOAT32RE)
> - for (i = 0; i < 10; i++)
> + for (i = 0; i < 10 + PADDING; i++)
> u[i] = PA_FLOAT32_SWAP(u[i]);
>
> break;
> @@ -241,6 +261,10 @@ static pa_memblock* generate_block(pa_mempool *pool, const pa_sample_spec *ss) {
> PA_WRITE24NE(u+21, 0xF00008);
> PA_WRITE24NE(u+24, 0x2009);
> PA_WRITE24NE(u+27, 0x210A);
> +
> + for (i = 30; i < 30 + (PADDING * 3); i+=3)
> + PA_WRITE24NE(u+i, 0x000000);
> +
> break;
> }
>
>
--
Peter Meerwald
+43-664-2444418 (mobile)
More information about the pulseaudio-discuss
mailing list