JACK tools
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
4.4KB

  1. // ----------------------------------------------------------------------------
  2. //
  3. // Copyright (C) 2012 Fons Adriaensen <fons@linuxaudio.org>
  4. //
  5. // This program is free software; you can redistribute it and/or modify
  6. // it under the terms of the GNU General Public License as published by
  7. // the Free Software Foundation; either version 3 of the License, or
  8. // (at your option) any later version.
  9. //
  10. // This program is distributed in the hope that it will be useful,
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. // GNU General Public License for more details.
  14. //
  15. // You should have received a copy of the GNU General Public License
  16. // along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. //
  18. // ----------------------------------------------------------------------------
  19. #ifndef __LFQUEUE_H
  20. #define __LFQUEUE_H
  21. #include <stdint.h>
  22. #include <string.h>
  23. class Adata
  24. {
  25. public:
  26. int32_t _state;
  27. int32_t _nsamp;
  28. double _timer;
  29. };
  30. class Lfq_adata
  31. {
  32. public:
  33. Lfq_adata (int size);
  34. ~Lfq_adata (void);
  35. void reset (void) { _nwr = _nrd = 0; }
  36. int size (void) const { return _size; }
  37. int wr_avail (void) const { return _size - _nwr + _nrd; }
  38. Adata *wr_datap (void) { return _data + (_nwr & _mask); }
  39. void wr_commit (void) { _nwr++; }
  40. int rd_avail (void) const { return _nwr - _nrd; }
  41. Adata *rd_datap (void) { return _data + (_nrd & _mask); }
  42. void rd_commit (void) { _nrd++; }
  43. private:
  44. Adata *_data;
  45. int _size;
  46. int _mask;
  47. int _nwr;
  48. int _nrd;
  49. };
  50. class Jdata
  51. {
  52. public:
  53. int32_t _state;
  54. double _error;
  55. double _ratio;
  56. };
  57. class Lfq_jdata
  58. {
  59. public:
  60. Lfq_jdata (int size);
  61. ~Lfq_jdata (void);
  62. void reset (void) { _nwr = _nrd = 0; }
  63. int size (void) const { return _size; }
  64. int wr_avail (void) const { return _size - _nwr + _nrd; }
  65. Jdata *wr_datap (void) { return _data + (_nwr & _mask); }
  66. void wr_commit (void) { _nwr++; }
  67. int rd_avail (void) const { return _nwr - _nrd; }
  68. Jdata *rd_datap (void) { return _data + (_nrd & _mask); }
  69. void rd_commit (void) { _nrd++; }
  70. private:
  71. Jdata *_data;
  72. int _size;
  73. int _mask;
  74. int _nwr;
  75. int _nrd;
  76. };
  77. class Lfq_int32
  78. {
  79. public:
  80. Lfq_int32 (int size);
  81. ~Lfq_int32 (void);
  82. int size (void) const { return _size; }
  83. void reset (void) { _nwr = _nrd = 0; }
  84. int wr_avail (void) const { return _size - _nwr + _nrd; }
  85. int32_t *wr_datap (void) { return _data + (_nwr & _mask); }
  86. void wr_commit (void) { _nwr++; }
  87. int rd_avail (void) const { return _nwr - _nrd; }
  88. int32_t *rd_datap (void) { return _data + (_nrd & _mask); }
  89. void rd_commit (void) { _nrd++; }
  90. void wr_int32 (int32_t v) { _data [_nwr++ & _mask] = v; }
  91. void wr_uint32 (uint32_t v) { _data [_nwr++ & _mask] = v; }
  92. void wr_float (float v) { *(float *)(_data + (_nwr++ & _mask)) = v; }
  93. int32_t rd_int32 (void) { return _data [_nrd++ & _mask]; }
  94. int32_t rd_uint32 (void) { return _data [_nrd++ & _mask]; }
  95. float rd_float (void) { return *(float *)(_data + (_nrd++ & _mask)); }
  96. private:
  97. int32_t *_data;
  98. int _size;
  99. int _mask;
  100. int _nwr;
  101. int _nrd;
  102. };
  103. class Lfq_audio
  104. {
  105. public:
  106. Lfq_audio (int nsamp, int nchan);
  107. ~Lfq_audio (void);
  108. int size (void) const { return _size; }
  109. void reset (void)
  110. {
  111. _nwr = _nrd = 0;
  112. memset (_data, 0, _size * _nch * sizeof (float));
  113. }
  114. int nchan (void) const { return _nch; }
  115. int nwr (void) const { return _nwr; };
  116. int nrd (void) const { return _nrd; };
  117. int wr_avail (void) const { return _size - _nwr + _nrd; }
  118. int wr_linav (void) const { return _size - (_nwr & _mask); }
  119. float *wr_datap (void) { return _data + _nch * (_nwr & _mask); }
  120. void wr_commit (int k) { _nwr += k; }
  121. int rd_avail (void) const { return _nwr - _nrd; }
  122. int rd_linav (void) const { return _size - (_nrd & _mask); }
  123. float *rd_datap (void) { return _data + _nch * (_nrd & _mask); }
  124. void rd_commit (int k) { _nrd += k; }
  125. private:
  126. float *_data;
  127. int _size;
  128. int _mask;
  129. int _nch;
  130. int _nwr;
  131. int _nrd;
  132. };
  133. #endif