From 54b856b21c6e7a3d5dbfd2b0e56efb739431971a Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nwpope@utu.fi> Date: Sun, 5 Jul 2020 20:55:13 +0300 Subject: [PATCH] WIP fix aggregate bug --- applications/tools/simple_viewer/main.cpp | 3 ++- components/audio/src/software_decoder.cpp | 3 +++ components/audio/src/software_encoder.cpp | 2 +- components/streams/src/receiver.cpp | 26 ++++++++++++++--------- components/structures/src/new_frame.cpp | 3 +++ 5 files changed, 25 insertions(+), 12 deletions(-) diff --git a/applications/tools/simple_viewer/main.cpp b/applications/tools/simple_viewer/main.cpp index d9d79dd13..80a591b3c 100644 --- a/applications/tools/simple_viewer/main.cpp +++ b/applications/tools/simple_viewer/main.cpp @@ -154,7 +154,8 @@ static void run(ftl::Configurable *root) { } 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(); } } diff --git a/components/audio/src/software_decoder.cpp b/components/audio/src/software_decoder.cpp index c5516fa26..8dd11bda1 100644 --- a/components/audio/src/software_decoder.cpp +++ b/components/audio/src/software_decoder.cpp @@ -78,6 +78,9 @@ bool SoftwareDecoder::_decodeOpus(const ftl::codecs::Packet &pkt, std::vector<sh for (size_t i=0; i<pkt.data.size(); ) { const short *len = (const short*)inptr; + LOG(INFO) << "LENGTH = " << *len; + if (*len == 0) break; + inptr += 2; i += (*len)+2; int samples = opus_multistream_decode(opus_decoder_, inptr, *len, outptr, FRAME_SIZE, 0); diff --git a/components/audio/src/software_encoder.cpp b/components/audio/src/software_encoder.cpp index 054bb886f..6eeda3dbb 100644 --- a/components/audio/src/software_encoder.cpp +++ b/components/audio/src/software_encoder.cpp @@ -105,7 +105,7 @@ bool SoftwareEncoder::_encodeOpus(const std::vector<short> &in, ftl::codecs::Pac short *len = (short*)outptr; outptr += 2; 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 > 32000) LOG(WARNING) << "Packet exceeds size limit"; diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp index c3c59f06a..24c2a54f2 100644 --- a/components/streams/src/receiver.cpp +++ b/components/streams/src/receiver.cpp @@ -168,17 +168,23 @@ ftl::audio::Decoder *Receiver::_createAudioDecoder(InternalAudioStates &frame, c void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) { // 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); //audio.data().resize(size); //auto *ptr = (short*)pkt.data.data(); //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) { LOG(ERROR) << "Could get an audio decoder"; return; @@ -189,7 +195,7 @@ void Receiver::_processAudio(const StreamPacket &spkt, const Packet &pkt) { } // Generate settings from packet data - ftl::audio::AudioSettings settings; + /*ftl::audio::AudioSettings settings; settings.channels = (spkt.channel == Channel::AudioStereo) ? 2 : 1; settings.frame_size = 960; @@ -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::hz44100 : settings.sample_rate = 44100; break; default: settings.sample_rate = 48000; break; - } + }*/ - frame.state.setLeft(settings); - frame.frame.setOrigin(&frame.state); + //frame.state.setLeft(settings); + //frame.frame.setOrigin(&frame.state); - if (audio_cb_) { + /*if (audio_cb_) { // Create an audio frameset wrapper. ftl::audio::FrameSet fs; fs.id = 0; diff --git a/components/structures/src/new_frame.cpp b/components/structures/src/new_frame.cpp index c5a146ff4..3ce0238b1 100644 --- a/components/structures/src/new_frame.cpp +++ b/components/structures/src/new_frame.cpp @@ -328,6 +328,9 @@ void Frame::reset() { for (auto &d : data_) { d.second.status = ChannelStatus::INVALID; 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(); status_ = FrameStatus::CREATED; -- GitLab