mirror of
https://github.com/78/xiaozhi-esp32.git
synced 2026-02-11 06:33:48 +00:00
refactor: Update audio demuxing process in AudioService
- Replaced the existing demuxer instance with a local unique pointer in the PlaySound method for better memory management. - Moved the OnDemuxerFinished callback setup into the PlaySound method to ensure it is correctly associated with the new demuxer instance. - Removed the member variable demuxer_ from AudioService to streamline the class structure.
This commit is contained in:
@@ -39,15 +39,6 @@
|
||||
|
||||
AudioService::AudioService() {
|
||||
event_group_ = xEventGroupCreate();
|
||||
|
||||
demuxer_.OnDemuxerFinished([this](const uint8_t* data, int sample_rate, size_t size){
|
||||
auto packet = std::make_unique<AudioStreamPacket>();
|
||||
packet->sample_rate = sample_rate;
|
||||
packet->frame_duration = 60;
|
||||
packet->payload.resize(size);
|
||||
std::memcpy(packet->payload.data(), data, size);
|
||||
PushPacketToDecodeQueue(std::move(packet), true);
|
||||
});
|
||||
}
|
||||
|
||||
AudioService::~AudioService() {
|
||||
@@ -648,8 +639,18 @@ void AudioService::PlaySound(const std::string_view& ogg) {
|
||||
|
||||
const auto* buf = reinterpret_cast<const uint8_t*>(ogg.data());
|
||||
size_t size = ogg.size();
|
||||
demuxer_.Reset();
|
||||
demuxer_.Process(buf, size);
|
||||
|
||||
auto demuxer = std::make_unique<OggDemuxer>();
|
||||
demuxer->OnDemuxerFinished([this](const uint8_t* data, int sample_rate, size_t size){
|
||||
auto packet = std::make_unique<AudioStreamPacket>();
|
||||
packet->sample_rate = sample_rate;
|
||||
packet->frame_duration = 60;
|
||||
packet->payload.resize(size);
|
||||
std::memcpy(packet->payload.data(), data, size);
|
||||
PushPacketToDecodeQueue(std::move(packet), true);
|
||||
});
|
||||
demuxer->Reset();
|
||||
demuxer->Process(buf, size);
|
||||
}
|
||||
|
||||
bool AudioService::IsIdle() {
|
||||
|
||||
@@ -146,8 +146,6 @@ private:
|
||||
std::mutex input_resampler_mutex_;
|
||||
esp_ae_rate_cvt_handle_t input_resampler_ = nullptr;
|
||||
esp_ae_rate_cvt_handle_t output_resampler_ = nullptr;
|
||||
|
||||
OggDemuxer demuxer_;
|
||||
|
||||
// Encoder/Decoder state
|
||||
int encoder_sample_rate_ = 16000;
|
||||
|
||||
@@ -230,7 +230,7 @@ private:
|
||||
config.pin_reset = CAMERA_PIN_RESET;
|
||||
config.xclk_freq_hz = XCLK_FREQ_HZ;
|
||||
config.pixel_format = PIXFORMAT_RGB565;
|
||||
config.frame_size = FRAMESIZE_VGA;
|
||||
config.frame_size = FRAMESIZE_QVGA;
|
||||
config.jpeg_quality = 12;
|
||||
config.fb_count = 1;
|
||||
config.fb_location = CAMERA_FB_IN_PSRAM;
|
||||
|
||||
Reference in New Issue
Block a user