PjsuaMediaPort.hpp 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef MUMSI_PJSUAMEDIAPORT_HPP
  2. #define MUMSI_PJSUAMEDIAPORT_HPP
  3. //todo wywalić i wrzucić do nagłówka z definicjami
  4. #include "AbstractCommunicator.hpp"
  5. #include <pjmedia.h>
  6. #include <sndfile.hh>
  7. #include <log4cpp/Category.hh>
  8. #include <string>
  9. #include <stdexcept>
  10. namespace pjsua {
  11. constexpr int SAMPLING_RATE = 48000;
  12. inline pj_str_t toPjString(std::string str) {
  13. return pj_str(const_cast<char *>(str.c_str()));
  14. }
  15. class Exception : public std::runtime_error {
  16. public:
  17. Exception(const char *title, pj_status_t status) : std::runtime_error(title) {
  18. //todo status code
  19. }
  20. };
  21. pj_status_t MediaPort_getFrame(pjmedia_port *port, pjmedia_frame *frame);
  22. pj_status_t MediaPort_putFrame(pjmedia_port *port, pjmedia_frame *frame);
  23. class PjsuaMediaPort {
  24. public:
  25. PjsuaMediaPort(
  26. SoundSampleQueue<SOUND_SAMPLE_TYPE> &inputQueue,
  27. SoundSampleQueue<SOUND_SAMPLE_TYPE> &outputQueue);
  28. ~PjsuaMediaPort();
  29. pjmedia_port *create_pjmedia_port();
  30. private:
  31. log4cpp::Category &logger;
  32. SoundSampleQueue<SOUND_SAMPLE_TYPE> &inputQueue;
  33. SoundSampleQueue<SOUND_SAMPLE_TYPE> &outputQueue;
  34. pjmedia_port *_pjmedia_port;
  35. SndfileHandle fileHandle;
  36. /**
  37. * For PJSUA implementation reasons, these callbacks have to be functions, not methods.
  38. * Since 'friend' usage.
  39. */
  40. friend pj_status_t MediaPort_getFrame(pjmedia_port *port,
  41. pjmedia_frame *frame);
  42. friend pj_status_t MediaPort_putFrame(pjmedia_port *port,
  43. pjmedia_frame *frame);
  44. };
  45. }
  46. #endif //MUMSI_PJSUAMEDIAPORT_HPP