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.

41 lines
959B

  1. #include <cassert>
  2. #include "JackALSARawMidiSendQueue.h"
  3. #include "JackMidiUtil.h"
  4. using Jack::JackALSARawMidiSendQueue;
  5. JackALSARawMidiSendQueue::JackALSARawMidiSendQueue(snd_rawmidi_t *rawmidi)
  6. {
  7. this->rawmidi = rawmidi;
  8. blocked = false;
  9. }
  10. Jack::JackMidiWriteQueue::EnqueueResult
  11. JackALSARawMidiSendQueue::EnqueueEvent(jack_nframes_t time, size_t size,
  12. jack_midi_data_t *buffer)
  13. {
  14. assert(size == 1);
  15. if (time > GetCurrentFrame()) {
  16. return EVENT_EARLY;
  17. }
  18. ssize_t result = snd_rawmidi_write(rawmidi, buffer, 1);
  19. switch (result) {
  20. case 1:
  21. blocked = false;
  22. return OK;
  23. case -EWOULDBLOCK:
  24. blocked = true;
  25. return BUFFER_FULL;
  26. }
  27. jack_error("JackALSARawMidiSendQueue::EnqueueEvent - snd_rawmidi_write: "
  28. "%s", snd_strerror(result));
  29. return EN_ERROR;
  30. }
  31. bool
  32. JackALSARawMidiSendQueue::IsBlocked()
  33. {
  34. return blocked;
  35. }