Skip to content

Commit db7f0fb

Browse files
committed
Fix audio encoding on FFmpeg 4.4. AVFrame was missing a few properties that need to be set in newer versions of FFmpeg. This is also compatible with FFmpeg 3+.
1 parent dd85900 commit db7f0fb

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/FFmpegWriter.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,7 +1722,7 @@ void FFmpegWriter::write_audio_packets(bool is_final) {
17221722
// Convert to planar (if needed by audio codec)
17231723
AVFrame *frame_final = AV_ALLOCATE_FRAME();
17241724
AV_RESET_FRAME(frame_final);
1725-
if (av_sample_fmt_is_planar(audio_codec_ctx->sample_fmt)) {
1725+
if (av_sample_fmt_is_planar(audio_codec_ctx->sample_fmt)) {
17261726
ZmqLogger::Instance()->AppendDebugMethod(
17271727
"FFmpegWriter::write_audio_packets (2nd resampling for Planar formats)",
17281728
"in_sample_fmt", output_sample_fmt,
@@ -1768,8 +1768,11 @@ void FFmpegWriter::write_audio_packets(bool is_final) {
17681768

17691769
// Create output frame (and allocate arrays)
17701770
frame_final->nb_samples = audio_input_frame_size;
1771+
frame_final->channels = info.channels;
1772+
frame_final->format = audio_codec_ctx->sample_fmt;
1773+
frame_final->channel_layout = info.channel_layout;
17711774
av_samples_alloc(frame_final->data, frame_final->linesize, info.channels,
1772-
frame_final->nb_samples, audio_codec_ctx->sample_fmt, 0);
1775+
frame_final->nb_samples, audio_codec_ctx->sample_fmt, 0);
17731776

17741777
// Convert audio samples
17751778
int nb_samples = SWR_CONVERT(
@@ -1786,7 +1789,7 @@ void FFmpegWriter::write_audio_packets(bool is_final) {
17861789
if (nb_samples > 0) {
17871790
memcpy(samples, frame_final->data[0],
17881791
nb_samples * av_get_bytes_per_sample(audio_codec_ctx->sample_fmt) * info.channels);
1789-
}
1792+
}
17901793

17911794
// deallocate AVFrame
17921795
av_freep(&(audio_frame->data[0]));

0 commit comments

Comments
 (0)