From 85e20fa6d486910c40c19f2a4b616384f1613d3d Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Thu, 20 Dec 2018 17:21:19 +0100 Subject: [PATCH] [io] add helpers to check source output sizes --- src/io/ioutils.c | 39 +++++++++++++++++++++++++++++++++++++++ src/io/ioutils.h | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 69 insertions(+), 4 deletions(-) diff --git a/src/io/ioutils.c b/src/io/ioutils.c index 7828bebb..f785b361 100644 --- a/src/io/ioutils.c +++ b/src/io/ioutils.c @@ -53,6 +53,45 @@ aubio_io_validate_channels(const char_t *kind, const char_t *path, uint_t channe } uint_t +aubio_source_validate_input_length(const char_t *kind, const char_t *path, + uint_t hop_size, uint_t read_data_length) +{ + uint_t length = hop_size; + if (hop_size < read_data_length) { + AUBIO_WRN("%s: partial read from %s, trying to read %d frames, but" + " hop_size is %d\n", kind, path, read_data_length, hop_size); + } else if (hop_size > read_data_length) { + AUBIO_WRN("%s: partial read from %s, trying to read %d frames into" + " a buffer of length %d\n", kind, path, hop_size, read_data_length); + length = read_data_length; + } + return length; +} + +uint_t +aubio_source_validate_input_channels(const char_t *kind, const char_t *path, + uint_t source_channels, uint_t read_data_height) +{ + uint_t channels = source_channels; + if (read_data_height < source_channels) { + AUBIO_WRN("%s: partial read from %s, trying to read %d channels," + " but found output of height %d\n", kind, path, source_channels, + read_data_height); + channels = read_data_height; + } else if (read_data_height > source_channels) { + // do not show a warning when trying to read into more channels than + // the input source. +#if 0 + AUBIO_WRN("%s: partial read from %s, trying to read %d channels," + " but found output of height %d\n", kind, path, source_channels, + read_data_height); +#endif + channels = source_channels; + } + return channels; +} + +uint_t aubio_sink_validate_input_length(const char_t *kind, const char_t *path, uint_t max_size, uint_t write_data_length, uint_t write) { diff --git a/src/io/ioutils.h b/src/io/ioutils.h index 1db7b19b..995f2d20 100644 --- a/src/io/ioutils.h +++ b/src/io/ioutils.h @@ -53,12 +53,38 @@ uint_t aubio_io_validate_samplerate(const char_t *kind, const char_t *path, uint_t aubio_io_validate_channels(const char_t *kind, const char_t *path, uint_t channels); -/** validate length of input +/** validate length of source output + + \param kind the object kind to report on + \param path the path to report on + \param hop_size number of frames to be read + \param read_data_length actual length of input + + \return hop_size or the maximum number of frames that can be written +*/ +uint_t +aubio_source_validate_input_length(const char_t *kind, const char_t *path, + uint_t hop_size, uint_t read_data_length); + +/** validate height of source output + + \param kind the object kind to report on + \param path the path to report on + \param source_channels maximum number of channels that can be written + \param read_data_height actual height of input + + \return write_data_height or the maximum number of channels +*/ +uint_t +aubio_source_validate_input_channels(const char_t *kind, const char_t *path, + uint_t source_channels, uint_t read_data_height); + +/** validate length of sink input \param kind the object kind to report on \param path the path to report on \param max_size maximum number of frames that can be written - \param write_data_length actual length of input vector/matrix + \param write_data_length actual length of input \param write number of samples asked \return write or the maximum number of frames that can be written @@ -67,11 +93,11 @@ uint_t aubio_sink_validate_input_length(const char_t *kind, const char_t *path, uint_t max_size, uint_t write_data_length, uint_t write); -/** validate height of input +/** validate height of sink input \param kind the object kind to report on \param path the path to report on - \param max_size maximum number of channels that can be written + \param sink_channels maximum number of channels that can be written \param write_data_height actual height of input matrix \return write_data_height or the maximum number of channels -- 2.11.0