79 lines
1.7 KiB
C++
79 lines
1.7 KiB
C++
|
#include "vban.h"
|
||
|
#include "PulseAudioCPP.h"
|
||
|
#include <tuple>
|
||
|
|
||
|
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<char*, unsigned int>* 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());
|
||
|
}
|