#include "vban.h" #include "PulseAudioCPP.h" #include VBAN_Stream::VBAN_Stream(std::string name, VBAN_CODEC codec, VBAN_SAMPLERATE samplerate, VBAN_DATATYPE datatype, uint8_t noChannels) :m_FrameCounter(0) ,m_name(name) { m_header.vban = VBAN_MARKER; for (int i = 0; i < 16; i++) m_header.streamname[i] = m_name.size() > i ? m_name[i] : 0; m_header.format_bit = datatype & 0xf; m_header.format_nbc = noChannels-1; m_header.format_SR = samplerate; m_header.format_nbs = 0; m_header.noFrame = 0; } VBAN_Stream::~VBAN_Stream() { } int VBAN_Stream::encodePacket(char* packet, uint16_t packetSize) { //std::cout << "Encode Packet " << packetSize << std::endl; auto total = packetSize + sizeof(VBAN_HEADER); auto newPacket = new char[total]; std::cout << (void*)newPacket << std::endl; m_header.format_nbs = (packetSize / 8)-1; m_header.noFrame = m_FrameCounter; for (int i = 0; i < sizeof(m_header); i++) newPacket[i] = ((char*)&m_header)[i]; for (int i = 0; i < packetSize; i++) newPacket[i + sizeof(VBAN_HEADER)] = packet[i]; m_FrameCounter++; m_packetBuffer.push_back({ newPacket,total }); //m_packetReadyCB(this, newPacket, packetSize); return 0; } int VBAN_Stream::decodePacket(char* packet, uint16_t packetSize) { return 0; } std::pair* VBAN_Stream::getLastPacket() { if (m_packetBuffer.size() == 0) return NULL; return &m_packetBuffer.front(); } void VBAN_Stream::dropLastPacket() { if (m_packetBuffer.size() > 0) { //auto pack = m_packetBuffer.front(); m_packetBuffer.pop_front(); //delete[] pack.first; } } void VBAN_Stream::update(Subject* s) { PulseAudioCPP* pulseStream = (PulseAudioCPP*)s; encodePacket(pulseStream->getBuffer(), pulseStream->getBufferSize()); }