[io] add helpers to check source output sizes
authorPaul Brossier <piem@piem.org>
Thu, 20 Dec 2018 16:21:19 +0000 (17:21 +0100)
committerPaul Brossier <piem@piem.org>
Thu, 20 Dec 2018 16:21:19 +0000 (17:21 +0100)
src/io/ioutils.c
src/io/ioutils.h

index 7828beb..f785b36 100644 (file)
@@ -53,6 +53,45 @@ aubio_io_validate_channels(const char_t *kind, const char_t *path, uint_t channe
 }
 
 uint_t
 }
 
 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)
 {
 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)
 {
index 1db7b19..995f2d2 100644 (file)
@@ -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);
 
 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 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
   \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);
 
 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 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
   \param write_data_height actual height of input matrix
 
   \return write_data_height or the maximum number of channels