loggerd: fix audio truncation by processing remaining partial frames (#35718)

fix audio truncation by processing remaining partial frames
This commit is contained in:
Dean Lee
2025-07-16 00:28:15 +08:00
committed by GitHub
parent 203b2e75d3
commit 006c06027b
2 changed files with 14 additions and 0 deletions
+13
View File
@@ -198,10 +198,23 @@ void VideoWriter::encode_and_write_audio_frame(AVFrame* frame) {
audio_pts += audio_codec_ctx->frame_size;
}
void VideoWriter::process_remaining_audio() {
// Process remaining audio samples by padding with silence
if (audio_buffer.size() > 0 && audio_buffer.size() < audio_codec_ctx->frame_size) {
audio_buffer.resize(audio_codec_ctx->frame_size, 0.0f);
// Encode final frame
audio_frame->pts = audio_pts;
float *f_samples = reinterpret_cast<float *>(audio_frame->data[0]);
std::copy(audio_buffer.begin(), audio_buffer.end(), f_samples);
encode_and_write_audio_frame(audio_frame);
}
}
VideoWriter::~VideoWriter() {
if (this->remuxing) {
if (this->audio_codec_ctx) {
process_remaining_audio();
encode_and_write_audio_frame(NULL); // flush encoder
avcodec_free_context(&this->audio_codec_ctx);
}
+1
View File
@@ -21,6 +21,7 @@ public:
private:
void initialize_audio(int sample_rate);
void encode_and_write_audio_frame(AVFrame* frame);
void process_remaining_audio();
std::string vid_path, lock_path;
FILE *of = nullptr;