static inline void do_audio_output(struct audio_output *audio, uint64_t timestamp, uint32_t frames) { struct audio_data data; for (size_t i = 0; i < MAX_AV_PLANES; i++) data.data[i] = audio->mix_buffers[i].array; data.frames = frames; data.timestamp = timestamp; data.volume = 1.0f; pthread_mutex_lock(&audio->input_mutex); for (size_t i = 0; i < audio->inputs.num; i++) { struct audio_input *input = audio->inputs.array+i; if (resample_audio_output(input, &data)) input->callback(input->param, &data); } pthread_mutex_unlock(&audio->input_mutex); }
static inline void do_audio_output(struct audio_output *audio, size_t mix_idx, uint64_t timestamp, uint32_t frames) { struct audio_mix *mix = &audio->mixes[mix_idx]; struct audio_data data; pthread_mutex_lock(&audio->input_mutex); for (size_t i = mix->inputs.num; i > 0; i--) { struct audio_input *input = mix->inputs.array+(i-1); for (size_t i = 0; i < audio->planes; i++) data.data[i] = (uint8_t*)mix->buffer[i]; data.frames = frames; data.timestamp = timestamp; if (resample_audio_output(input, &data)) input->callback(input->param, mix_idx, &data); } pthread_mutex_unlock(&audio->input_mutex); }