mirror of
https://github.com/firestar5683/StarPilot.git
synced 2026-08-22 08:43:54 +08:00
loggerd: fix audio truncation by processing remaining partial frames (#35718)
fix audio truncation by processing remaining partial frames
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user