PjsuaMediaPort.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #include "PjsuaMediaPort.hpp"
  2. using namespace std;
  3. using namespace pjsua;
  4. static pj_status_t getFrame(pjmedia_port *port,
  5. pjmedia_frame *frame) {
  6. PjsuaMediaPort *mediaPort = static_cast<PjsuaMediaPort *>(port->port_data.pdata);
  7. pj_int16_t *samples = static_cast<pj_int16_t *>(frame->buf);
  8. pj_size_t count = frame->size / 2 / PJMEDIA_PIA_CCNT(&port->info);
  9. //todo code here
  10. for (int i = 0; i < count; ++i) {
  11. samples[i] = 10000.8 * (i % 10);
  12. }
  13. frame->type = PJMEDIA_FRAME_TYPE_AUDIO;
  14. return PJ_SUCCESS;
  15. }
  16. static pj_status_t putFrame(pjmedia_port *port,
  17. pjmedia_frame *frame) {
  18. PjsuaMediaPort *mediaPort = static_cast<PjsuaMediaPort *>(port->port_data.pdata);
  19. pj_int16_t *samples = static_cast<pj_int16_t *>(frame->buf);
  20. pj_size_t count = frame->size / 2 / PJMEDIA_PIA_CCNT(&port->info);
  21. //todo code here
  22. return PJ_SUCCESS;
  23. }
  24. pjmedia_port *pjsua::PjsuaMediaPort::create_pjmedia_port() {
  25. _pjmedia_port = new pjmedia_port();
  26. pj_str_t name = toPjString("PjsuaMediaPort");
  27. pj_status_t status = pjmedia_port_info_init(&(_pjmedia_port->info),
  28. &name,
  29. PJMEDIA_SIG_CLASS_PORT_AUD('s', 'i'),
  30. SAMPLING_RATE,
  31. 1,
  32. 16,
  33. SAMPLING_RATE * 20 / 1000); // todo recalculate to match mumble specs
  34. if (status != PJ_SUCCESS) {
  35. throw pjsua::Exception("Error while calling pjmedia_port_info_init().", status);
  36. }
  37. _pjmedia_port->get_frame = &getFrame;
  38. _pjmedia_port->put_frame = &putFrame;
  39. _pjmedia_port->port_data.pdata = this;
  40. return _pjmedia_port;
  41. }
  42. pjsua::PjsuaMediaPort::~PjsuaMediaPort() {
  43. if (this->_pjmedia_port != nullptr) {
  44. delete _pjmedia_port;
  45. }
  46. }