From cbf74f49702c9945ed5e039f38a63da06f3a9345 Mon Sep 17 00:00:00 2001 From: philippegorley <philippe.gorley@savoirfairelinux.com> Date: Tue, 11 Dec 2018 16:37:46 -0500 Subject: [PATCH] audio: add function to fill frames with silence When mixing audio frames, the mix buffer needs to be initialized with silence. Change-Id: I15d0573d8036a2755cbc33bdf91619cfedcf8f2d --- src/client/videomanager.cpp | 2 ++ src/media/libav_deps.h | 1 + src/media/libav_utils.cpp | 8 ++++++++ src/media/libav_utils.h | 2 ++ 4 files changed, 13 insertions(+) diff --git a/src/client/videomanager.cpp b/src/client/videomanager.cpp index cbf2f1dab1..a0a93751e7 100644 --- a/src/client/videomanager.cpp +++ b/src/client/videomanager.cpp @@ -35,6 +35,7 @@ #include "client/ring_signal.h" #include "audio/ringbufferpool.h" #include "dring/media_const.h" +#include "libav_utils.h" #include <functional> #include <memory> @@ -108,6 +109,7 @@ AudioFrame::mix(const AudioFrame& frame) } if (f.nb_samples == 0) { reserve(fIn.nb_samples); + ring::libav_utils::fillWithSilence(&f); } else if (f.nb_samples != fIn.nb_samples) { throw std::invalid_argument("Can't mix frames with different length"); } diff --git a/src/media/libav_deps.h b/src/media/libav_deps.h index a835996d01..add322d167 100644 --- a/src/media/libav_deps.h +++ b/src/media/libav_deps.h @@ -38,6 +38,7 @@ extern "C" { #include <libavutil/imgutils.h> #include <libavutil/intreadwrite.h> #include <libavutil/log.h> +#include <libavutil/samplefmt.h> } #include "libav_utils.h" diff --git a/src/media/libav_utils.cpp b/src/media/libav_utils.cpp index e963921f75..cdb82a7420 100644 --- a/src/media/libav_utils.cpp +++ b/src/media/libav_utils.cpp @@ -222,4 +222,12 @@ fillWithBlack(AVFrame* frame) } } +void +fillWithSilence(AVFrame* frame) +{ + int ret = av_samples_set_silence(frame->extended_data, 0, frame->nb_samples, frame->channels, (AVSampleFormat)frame->format); + if (ret < 0) + RING_ERR() << "Failed to fill frame with silence"; +} + }} // namespace ring::libav_utils diff --git a/src/media/libav_utils.h b/src/media/libav_utils.h index d61c7b08d7..79bb356a77 100644 --- a/src/media/libav_utils.h +++ b/src/media/libav_utils.h @@ -47,4 +47,6 @@ namespace ring { namespace libav_utils { void fillWithBlack(AVFrame* frame); + void fillWithSilence(AVFrame* frame); + }} // namespace ring::libav_utils -- GitLab