jack2 codebase
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.

149 lines
4.9KB

  1. /*
  2. Copyright (C) 2008 Grame
  3. This program is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with this program; if not, write to the Free Software
  13. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. */
  15. #if defined(HAVE_CONFIG_H)
  16. #include "config.h"
  17. #endif
  18. #include "JackAudioAdapter.h"
  19. #include <stdio.h>
  20. namespace Jack
  21. {
  22. #ifdef JACK_MONITOR
  23. void MeasureTable::Write(int time1, int time2, float r1, float r2, int pos1, int pos2)
  24. {
  25. int pos = (++fCount) % TABLE_MAX;
  26. fTable[pos].time1 = time1;
  27. fTable[pos].time2 = time2;
  28. fTable[pos].r1 = r1;
  29. fTable[pos].r2 = r2;
  30. fTable[pos].pos1 = pos1;
  31. fTable[pos].pos2 = pos2;
  32. }
  33. void MeasureTable::Save()
  34. {
  35. char buffer[1024];
  36. FILE* file = fopen("JackAudioAdapter.log", "w");
  37. int max = (fCount) % TABLE_MAX - 1;
  38. for (int i = 1; i < max; i++)
  39. {
  40. fprintf(file, "%d \t %d \t %d \t %f \t %f \t %d \t %d \n",
  41. fTable[i].delta, fTable[i+1].time1 - fTable[i].time1,
  42. fTable[i+1].time2 - fTable[i].time2,
  43. fTable[i].r1, fTable[i].r2, fTable[i].pos1, fTable[i].pos2);
  44. }
  45. fclose(file);
  46. // Adapter timing 1
  47. file = fopen("AdapterTiming1.plot", "w");
  48. fprintf(file, "set multiplot\n");
  49. fprintf(file, "set grid\n");
  50. fprintf(file, "set title \"Audio adapter timing\"\n");
  51. fprintf(file, "set xlabel \"audio cycles\"\n");
  52. fprintf(file, "set ylabel \"frames\"\n");
  53. fprintf(file, "plot ");
  54. sprintf(buffer, "\"JackAudioAdapter.log\" using 2 title \"Consumer interrupt period\" with lines,");
  55. fprintf(file, buffer);
  56. sprintf(buffer, "\"JackAudioAdapter.log\" using 3 title \"Producer interrupt period\" with lines");
  57. fprintf(file, buffer);
  58. fclose(file);
  59. // Adapter timing 2
  60. file = fopen("AdapterTiming2.plot", "w");
  61. fprintf(file, "set multiplot\n");
  62. fprintf(file, "set grid\n");
  63. fprintf(file, "set title \"Audio adapter timing\"\n");
  64. fprintf(file, "set xlabel \"audio cycles\"\n");
  65. fprintf(file, "set ylabel \"resampling ratio\"\n");
  66. fprintf(file, "plot ");
  67. sprintf(buffer, "\"JackAudioAdapter.log\" using 4 title \"Ratio 1\" with lines,");
  68. fprintf(file, buffer);
  69. sprintf(buffer, "\"JackAudioAdapter.log\" using 5 title \"Ratio 2\" with lines");
  70. fprintf(file, buffer);
  71. fclose(file);
  72. // Adapter timing 3
  73. file = fopen("AdapterTiming3.plot", "w");
  74. fprintf(file, "set multiplot\n");
  75. fprintf(file, "set grid\n");
  76. fprintf(file, "set title \"Audio adapter timing\"\n");
  77. fprintf(file, "set xlabel \"audio cycles\"\n");
  78. fprintf(file, "set ylabel \"frames\"\n");
  79. fprintf(file, "plot ");
  80. sprintf(buffer, "\"JackAudioAdapter.log\" using 6 title \"Frames position in consumer ringbuffer\" with lines,");
  81. fprintf(file, buffer);
  82. sprintf(buffer, "\"JackAudioAdapter.log\" using 7 title \"Frames position in producer ringbuffer\" with lines");
  83. fprintf(file, buffer);
  84. fclose(file);
  85. }
  86. #endif
  87. void JackAudioAdapterInterface::ResetRingBuffers()
  88. {
  89. int i;
  90. for (i = 0; i < fCaptureChannels; i++)
  91. fCaptureRingBuffer[i]->Reset();
  92. for (i = 0; i < fPlaybackChannels; i++)
  93. fPlaybackRingBuffer[i]->Reset();
  94. }
  95. void JackAudioAdapterInterface::ResampleFactor ( jack_nframes_t& frame1, jack_nframes_t& frame2 )
  96. {
  97. jack_time_t time = jack_get_time();
  98. if ( !fRunning )
  99. {
  100. // Init DLL
  101. fRunning = true;
  102. fHostDLL.Init ( time );
  103. fAdaptedDLL.Init ( time );
  104. frame1 = 1;
  105. frame2 = 1;
  106. }
  107. else
  108. {
  109. // DLL
  110. fAdaptedDLL.IncFrame(time);
  111. jack_nframes_t time1 = fHostDLL.Time2Frames(time);
  112. jack_nframes_t time2 = fAdaptedDLL.Time2Frames(time);
  113. frame1 = time1;
  114. frame2 = time2;
  115. jack_log("JackAudioAdapterInterface::ResampleFactor time1 = %ld time2 = %ld src_ratio_input = %f src_ratio_output = %f",
  116. long(time1), long(time2), double(time1) / double(time2), double(time2) / double(time1));
  117. }
  118. }
  119. int JackAudioAdapterInterface::Open()
  120. {
  121. return 0;
  122. }
  123. int JackAudioAdapterInterface::Close()
  124. {
  125. return 0;
  126. }
  127. } // namespace