X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=mixer.cpp;h=04a35530cc7af36d7681d1aca2ebef695be960e0;hb=05b0c5b2b693ba809b8334a892463ae34febb6c3;hp=b7e720d2feb6dbaffb3ead7ac17689620bee4e42;hpb=86f32b5a80b232e6d824776a87ecc1b5f8fbfa96;p=nageru diff --git a/mixer.cpp b/mixer.cpp index b7e720d..04a3553 100644 --- a/mixer.cpp +++ b/mixer.cpp @@ -10,12 +10,12 @@ #include #include #include +#include #include #include #include #include #include -#include #include #include #include @@ -267,8 +267,7 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode, // Insert silence as needed. fprintf(stderr, "Card %d dropped %d frame(s) (before timecode 0x%04x), inserting silence.\n", card_index, dropped_frames, timecode); - vector silence; - silence.resize(silence_samples * 2); + vector silence(silence_samples * 2, 0.0f); for (int i = 0; i < dropped_frames; ++i) { card->resampling_queue->add_input_samples(local_pts / double(TIMEBASE), silence.data(), silence_samples); // Note that if the format changed in the meantime, we have @@ -316,6 +315,7 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode, card->new_data_ready = true; card->new_frame = RefCountedFrame(FrameAllocator::Frame()); card->new_frame_length = frame_length; + card->new_frame_interlaced = false; card->new_data_ready_fence = nullptr; card->dropped_frames = dropped_frames; card->new_data_ready_changed.notify_all(); @@ -415,6 +415,7 @@ void Mixer::bm_frame(unsigned card_index, uint16_t timecode, card->new_frame = new_frame; card->new_frame_length = frame_length; card->new_frame_field = field; + card->new_frame_interlaced = interlaced; card->new_data_ready_fence = fence; card->dropped_frames = dropped_frames; card->new_data_ready_changed.notify_all(); @@ -461,6 +462,7 @@ void Mixer::thread_func() card_copy[card_index].new_frame = card->new_frame; card_copy[card_index].new_frame_length = card->new_frame_length; card_copy[card_index].new_frame_field = card->new_frame_field; + card_copy[card_index].new_frame_interlaced = card->new_frame_interlaced; card_copy[card_index].new_data_ready_fence = card->new_data_ready_fence; card_copy[card_index].dropped_frames = card->dropped_frames; card->new_data_ready = false; @@ -491,6 +493,7 @@ void Mixer::thread_func() } if (audio_level_callback != nullptr) { + unique_lock lock(r128_mutex); double loudness_s = r128.loudness_S(); double loudness_i = r128.integrated(); double loudness_range_low = r128.range_min(); @@ -741,7 +744,10 @@ void Mixer::process_audio_one_frame(int64_t frame_pts_int, int num_samples) vector left, right; deinterleave_samples(samples_out, &left, &right); float *ptrs[] = { left.data(), right.data() }; - r128.process(left.size(), ptrs); + { + unique_lock lock(r128_mutex); + r128.process(left.size(), ptrs); + } // Send the samples to the sound card. if (alsa) {