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

fix audio truncation by processing remaining partial frames
pull/35735/head
Dean Lee 1 month ago committed by GitHub
parent 203b2e75d3
commit 006c06027b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 13
      system/loggerd/video_writer.cc
  2. 1
      system/loggerd/video_writer.h

@ -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);
}

@ -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;

Loading…
Cancel
Save