Skip to content
Snippets Groups Projects
Commit 54b856b2 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

WIP fix aggregate bug

parent 3a07bee8
No related branches found
No related tags found
1 merge request!316Resolves #343 GUI and Frame Refactor
...@@ -154,7 +154,8 @@ static void run(ftl::Configurable *root) { ...@@ -154,7 +154,8 @@ static void run(ftl::Configurable *root) {
} }
if (f.has(Channel::AudioStereo)) { if (f.has(Channel::AudioStereo)) {
LOG(INFO) << "Got stereo"; const auto &audio = f.get<std::list<ftl::audio::Audio>>(Channel::AudioStereo).front();
LOG(INFO) << "Got stereo: " << audio.data().size();
} }
} }
......
...@@ -78,6 +78,9 @@ bool SoftwareDecoder::_decodeOpus(const ftl::codecs::Packet &pkt, std::vector<sh ...@@ -78,6 +78,9 @@ bool SoftwareDecoder::_decodeOpus(const ftl::codecs::Packet &pkt, std::vector<sh
for (size_t i=0; i<pkt.data.size(); ) { for (size_t i=0; i<pkt.data.size(); ) {
const short *len = (const short*)inptr; const short *len = (const short*)inptr;
LOG(INFO) << "LENGTH = " << *len;
if (*len == 0) break;
inptr += 2; inptr += 2;
i += (*len)+2; i += (*len)+2;
int samples = opus_multistream_decode(opus_decoder_, inptr, *len, outptr, FRAME_SIZE, 0); int samples = opus_multistream_decode(opus_decoder_, inptr, *len, outptr, FRAME_SIZE, 0);
......
...@@ -105,7 +105,7 @@ bool SoftwareEncoder::_encodeOpus(const std::vector<short> &in, ftl::codecs::Pac ...@@ -105,7 +105,7 @@ bool SoftwareEncoder::_encodeOpus(const std::vector<short> &in, ftl::codecs::Pac
short *len = (short*)outptr; short *len = (short*)outptr;
outptr += 2; outptr += 2;
int nbBytes = opus_multistream_encode(opus_encoder_, &in.data()[i], FRAME_SIZE, outptr, MAX_PACKET_SIZE); int nbBytes = opus_multistream_encode(opus_encoder_, &in.data()[i], FRAME_SIZE, outptr, MAX_PACKET_SIZE);
//LOG(INFO) << "Opus encode: " << nbBytes << ", " << (in.size()-i); LOG(INFO) << "Opus encode: " << nbBytes << ", " << (in.size()-i);
if (nbBytes <= 0) return false; if (nbBytes <= 0) return false;
//if (nbBytes > 32000) LOG(WARNING) << "Packet exceeds size limit"; //if (nbBytes > 32000) LOG(WARNING) << "Packet exceeds size limit";
......
...@@ -168,17 +168,23 @@ ftl::audio::Decoder *Receiver::_createAudioDecoder(InternalAudioStates &frame, c ...@@ -168,17 +168,23 @@ ftl::audio::Decoder *Receiver::_createAudioDecoder(InternalAudioStates &frame, c
void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) { void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) {
// Audio Data // Audio Data
/*InternalAudioStates &frame = _getAudioFrame(spkt); InternalAudioStates &state = _getAudioFrame(spkt);
//frame.frame.reset();
state.timestamp = spkt.timestamp;
auto fs = builder(spkt.streamID).get(spkt.timestamp, spkt.frame_number+pkt.frame_count-1);
auto &frame = fs->frames[0];
auto &audiolist = frame.createChange<std::list<ftl::audio::Audio>>(spkt.channel, ftl::data::ChangeType::FOREIGN, pkt);
auto &audio = audiolist.emplace_back();
frame.frame.reset();
frame.timestamp = spkt.timestamp;
auto &audio = frame.frame.create<ftl::audio::Audio>(spkt.channel);
//size_t size = pkt.data.size()/sizeof(short); //size_t size = pkt.data.size()/sizeof(short);
//audio.data().resize(size); //audio.data().resize(size);
//auto *ptr = (short*)pkt.data.data(); //auto *ptr = (short*)pkt.data.data();
//for (size_t i=0; i<size; i++) audio.data()[i] = ptr[i]; //for (size_t i=0; i<size; i++) audio.data()[i] = ptr[i];
ftl::audio::Decoder *dec = _createAudioDecoder(frame, pkt); ftl::audio::Decoder *dec = _createAudioDecoder(state, pkt);
if (!dec) { if (!dec) {
LOG(ERROR) << "Could get an audio decoder"; LOG(ERROR) << "Could get an audio decoder";
return; return;
...@@ -189,7 +195,7 @@ void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) { ...@@ -189,7 +195,7 @@ void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) {
} }
// Generate settings from packet data // Generate settings from packet data
ftl::audio::AudioSettings settings; /*ftl::audio::AudioSettings settings;
settings.channels = (spkt.channel == Channel::AudioStereo) ? 2 : 1; settings.channels = (spkt.channel == Channel::AudioStereo) ? 2 : 1;
settings.frame_size = 960; settings.frame_size = 960;
...@@ -197,12 +203,12 @@ void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) { ...@@ -197,12 +203,12 @@ void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) {
case definition_t::hz48000 : settings.sample_rate = 48000; break; case definition_t::hz48000 : settings.sample_rate = 48000; break;
case definition_t::hz44100 : settings.sample_rate = 44100; break; case definition_t::hz44100 : settings.sample_rate = 44100; break;
default: settings.sample_rate = 48000; break; default: settings.sample_rate = 48000; break;
} }*/
frame.state.setLeft(settings); //frame.state.setLeft(settings);
frame.frame.setOrigin(&frame.state); //frame.frame.setOrigin(&frame.state);
if (audio_cb_) { /*if (audio_cb_) {
// Create an audio frameset wrapper. // Create an audio frameset wrapper.
ftl::audio::FrameSet fs; ftl::audio::FrameSet fs;
fs.id = 0; fs.id = 0;
......
...@@ -328,6 +328,9 @@ void Frame::reset() { ...@@ -328,6 +328,9 @@ void Frame::reset() {
for (auto &d : data_) { for (auto &d : data_) {
d.second.status = ChannelStatus::INVALID; d.second.status = ChannelStatus::INVALID;
d.second.encoded.clear(); d.second.encoded.clear();
// Note: Aggregate channels cannot memory pool and must be cleared.
if (ftl::data::isAggregate(d.first)) d.second.data.reset();
} }
changed_.clear(); changed_.clear();
status_ = FrameStatus::CREATED; status_ = FrameStatus::CREATED;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment