PjsuaMediaPort.hpp 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 <log4cpp/Category.hh>
  7. #include <string>
  8. #include <stdexcept>
  9. namespace pjsua {
  10. constexpr int SAMPLING_RATE = 48000;
  11. inline pj_str_t toPjString(std::string str) {
  12. return pj_str(const_cast<char *>(str.c_str()));
  13. }
  14. class Exception : public std::runtime_error {
  15. public:
  16. Exception(const char *title, pj_status_t status) : std::runtime_error(title) {
  17. //todo status code
  18. }
  19. };
  20. pj_status_t MediaPort_getFrame(pjmedia_port *port, pjmedia_frame *frame);
  21. pj_status_t MediaPort_putFrame(pjmedia_port *port, pjmedia_frame *frame);
  22. class PjsuaMediaPort {
  23. public:
  24. PjsuaMediaPort(
  25. SoundSampleQueue<SOUND_SAMPLE_TYPE> &inputQueue,
  26. SoundSampleQueue<SOUND_SAMPLE_TYPE> &outputQueue)
  27. : inputQueue(inputQueue),
  28. outputQueue(outputQueue),
  29. _pjmedia_port(nullptr),
  30. logger(log4cpp::Category::getInstance("PjsuaMediaPort")) { }
  31. ~PjsuaMediaPort();
  32. pjmedia_port *create_pjmedia_port();
  33. private:
  34. log4cpp::Category &logger;
  35. SoundSampleQueue<SOUND_SAMPLE_TYPE> &inputQueue;
  36. SoundSampleQueue<SOUND_SAMPLE_TYPE> &outputQueue;
  37. pjmedia_port *_pjmedia_port;
  38. /**
  39. * For PJSUA implementation reasons, these callbacks have to be functions, not methods.
  40. * Since 'friend' usage.
  41. */
  42. friend pj_status_t MediaPort_getFrame(pjmedia_port *port,
  43. pjmedia_frame *frame);
  44. friend pj_status_t MediaPort_putFrame(pjmedia_port *port,
  45. pjmedia_frame *frame);
  46. };
  47. }
  48. #endif //MUMSI_PJSUAMEDIAPORT_HPP