Bug 1843113 - Vendor libwebrtc from 683f3165f9

Upstream commit: https://webrtc.googlesource.com/src/+/683f3165f95abc345603ef1c2385677a0a70218d
    Add slightly more constness to SourceFrame and the embedded AudioFrame

    This makes it a bit more clear that values of member variables of
    SourceFrame are never directly changed and that doing so is not an
    intentional part of the design. Also made use of `SourceFrame` vs
    `const SourceFrame` more consistent since the audio frame of a
    `const SourceFrame` was being modified in some places.

    Accessing the embedded AudioFrame can be done via the const
    audio_frame() accessor or via the mutable_audio_frame() accessor when
    modifying the frame is needed. This helps with clarifying later on
    when downstream code paths such as ones that access the `packet_infos_`
    data, can know that it won't be modified for the rest of the frame's
    lifetime (thus avoiding having to make copies).

    Bug: none
    Change-Id: I175cec8fcdb85063239a5f9c299b7878c639f00e
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/302383
    Reviewed-by: Sam Zackrisson <saza@webrtc.org>
    Commit-Queue: Tomas Gunnarsson <tommi@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#39926}
This commit is contained in:
Michael Froman 2023-07-14 13:47:06 -05:00
Родитель 497f67bb9b
Коммит 33555854b8
3 изменённых файлов: 53 добавлений и 38 удалений

3
third_party/libwebrtc/README.moz-ff-commit поставляемый
Просмотреть файл

@ -23418,3 +23418,6 @@ b810a64db1
# MOZ_LIBWEBRTC_SRC=/home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc MOZ_LIBWEBRTC_BRANCH=mozpatches bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh # MOZ_LIBWEBRTC_SRC=/home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc MOZ_LIBWEBRTC_BRANCH=mozpatches bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring # base of lastest vendoring
4e0bdf550b 4e0bdf550b
# MOZ_LIBWEBRTC_SRC=/home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc MOZ_LIBWEBRTC_BRANCH=mozpatches bash dom/media/webrtc/third_party_build/fast-forward-libwebrtc.sh
# base of lastest vendoring
683f3165f9

2
third_party/libwebrtc/README.mozilla поставляемый
Просмотреть файл

@ -15634,3 +15634,5 @@ libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc
libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2023-07-14T18:44:52.952951. libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2023-07-14T18:44:52.952951.
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc
libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2023-07-14T18:45:52.373046. libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2023-07-14T18:45:52.373046.
# ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc
libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2023-07-14T18:46:53.957058.

Просмотреть файл

@ -39,62 +39,71 @@ struct AudioMixerImpl::SourceStatus {
namespace { namespace {
struct SourceFrame { class SourceFrame {
public:
// Default constructor required by call to `vector::resize()` below.
SourceFrame() = default; SourceFrame() = default;
SourceFrame(AudioMixerImpl::SourceStatus* source_status, SourceFrame(AudioMixerImpl::SourceStatus* source_status,
AudioFrame* audio_frame, AudioFrame* audio_frame,
bool muted) bool muted)
: source_status(source_status), audio_frame(audio_frame), muted(muted) { : SourceFrame(source_status,
RTC_DCHECK(source_status); audio_frame,
RTC_DCHECK(audio_frame); muted,
if (!muted) { muted ? 0u : AudioMixerCalculateEnergy(*audio_frame)) {}
energy = AudioMixerCalculateEnergy(*audio_frame);
}
}
SourceFrame(AudioMixerImpl::SourceStatus* source_status, SourceFrame(AudioMixerImpl::SourceStatus* source_status,
AudioFrame* audio_frame, AudioFrame* audio_frame,
bool muted, bool muted,
uint32_t energy) uint32_t energy)
: source_status(source_status), : source_status_(source_status),
audio_frame(audio_frame), audio_frame_(audio_frame),
muted(muted), muted_(muted),
energy(energy) { energy_(energy) {
RTC_DCHECK(source_status); RTC_DCHECK(source_status);
RTC_DCHECK(audio_frame); RTC_DCHECK(audio_frame_);
} }
AudioMixerImpl::SourceStatus* source_status = nullptr; AudioMixerImpl::SourceStatus* source_status() { return source_status_; }
AudioFrame* audio_frame = nullptr; const AudioFrame* audio_frame() const { return audio_frame_; }
bool muted = true; AudioFrame* mutable_audio_frame() { return audio_frame_; }
uint32_t energy = 0; bool muted() const { return muted_; }
uint32_t energy() const { return energy_; }
private:
// The below values are never changed directly, hence only accessors are
// offered. The values can change though via implicit assignment when sorting
// vectors. Pointer values will be nullptr when default constructed as a
// result of calling `vector::resize()`.
AudioMixerImpl::SourceStatus* source_status_ = nullptr;
AudioFrame* audio_frame_ = nullptr;
bool muted_ = true;
uint32_t energy_ = 0u;
}; };
// ShouldMixBefore(a, b) is used to select mixer sources. // ShouldMixBefore(a, b) is used to select mixer sources.
// Returns true if `a` is preferred over `b` as a source to be mixed. // Returns true if `a` is preferred over `b` as a source to be mixed.
bool ShouldMixBefore(const SourceFrame& a, const SourceFrame& b) { bool ShouldMixBefore(const SourceFrame& a, const SourceFrame& b) {
if (a.muted != b.muted) { if (a.muted() != b.muted()) {
return b.muted; return b.muted();
} }
const auto a_activity = a.audio_frame->vad_activity_; const auto a_activity = a.audio_frame()->vad_activity_;
const auto b_activity = b.audio_frame->vad_activity_; const auto b_activity = b.audio_frame()->vad_activity_;
if (a_activity != b_activity) { if (a_activity != b_activity) {
return a_activity == AudioFrame::kVadActive; return a_activity == AudioFrame::kVadActive;
} }
return a.energy > b.energy; return a.energy() > b.energy();
} }
void RampAndUpdateGain( void RampAndUpdateGain(rtc::ArrayView<SourceFrame> mixed_sources_and_frames) {
rtc::ArrayView<const SourceFrame> mixed_sources_and_frames) { for (auto& source_frame : mixed_sources_and_frames) {
for (const auto& source_frame : mixed_sources_and_frames) { float target_gain = source_frame.source_status()->is_mixed ? 1.0f : 0.0f;
float target_gain = source_frame.source_status->is_mixed ? 1.0f : 0.0f; Ramp(source_frame.source_status()->gain, target_gain,
Ramp(source_frame.source_status->gain, target_gain, source_frame.mutable_audio_frame());
source_frame.audio_frame); source_frame.source_status()->gain = target_gain;
source_frame.source_status->gain = target_gain;
} }
} }
@ -226,13 +235,13 @@ rtc::ArrayView<AudioFrame* const> AudioMixerImpl::GetAudioFromSources(
audio_source_mixing_data_view.end(), ShouldMixBefore); audio_source_mixing_data_view.end(), ShouldMixBefore);
int max_audio_frame_counter = max_sources_to_mix_; int max_audio_frame_counter = max_sources_to_mix_;
int ramp_list_lengh = 0; int ramp_list_length = 0;
int audio_to_mix_count = 0; int audio_to_mix_count = 0;
// Go through list in order and put unmuted frames in result list. // Go through list in order and put unmuted frames in result list.
for (const auto& p : audio_source_mixing_data_view) { for (auto& p : audio_source_mixing_data_view) {
// Filter muted. // Filter muted.
if (p.muted) { if (p.muted()) {
p.source_status->is_mixed = false; p.source_status()->is_mixed = false;
continue; continue;
} }
@ -240,15 +249,16 @@ rtc::ArrayView<AudioFrame* const> AudioMixerImpl::GetAudioFromSources(
bool is_mixed = false; bool is_mixed = false;
if (max_audio_frame_counter > 0) { if (max_audio_frame_counter > 0) {
--max_audio_frame_counter; --max_audio_frame_counter;
helper_containers_->audio_to_mix[audio_to_mix_count++] = p.audio_frame; helper_containers_->audio_to_mix[audio_to_mix_count++] =
helper_containers_->ramp_list[ramp_list_lengh++] = p.mutable_audio_frame();
SourceFrame(p.source_status, p.audio_frame, false, -1); helper_containers_->ramp_list[ramp_list_length++] =
SourceFrame(p.source_status(), p.mutable_audio_frame(), false, -1);
is_mixed = true; is_mixed = true;
} }
p.source_status->is_mixed = is_mixed; p.source_status()->is_mixed = is_mixed;
} }
RampAndUpdateGain(rtc::ArrayView<SourceFrame>( RampAndUpdateGain(rtc::ArrayView<SourceFrame>(
helper_containers_->ramp_list.data(), ramp_list_lengh)); helper_containers_->ramp_list.data(), ramp_list_length));
return rtc::ArrayView<AudioFrame* const>( return rtc::ArrayView<AudioFrame* const>(
helper_containers_->audio_to_mix.data(), audio_to_mix_count); helper_containers_->audio_to_mix.data(), audio_to_mix_count);
} }