Asterisk - The Open Source Telephony Project
18.5.0
|
Multi-party software based channel mixing. More...
#include "asterisk.h"
#include <math.h>
#include "asterisk/stream.h"
#include "asterisk/test.h"
#include "asterisk/vector.h"
#include "asterisk/message.h"
#include "bridge_softmix/include/bridge_softmix_internal.h"
Go to the source code of this file.
Data Structures | |
struct | softmix_remb_collector |
struct | softmix_stats |
struct | softmix_translate_helper |
struct | softmix_translate_helper_entry |
struct | stream_parameters |
Macros | |
#define | DEFAULT_SOFTMIX_INTERVAL 20 |
Interval at which mixing will take place. Valid options are 10, 20, and 40. More... | |
#define | DEFAULT_SOFTMIX_SILENCE_THRESHOLD 2500 |
Default time in ms of silence necessary to declare talking stopped by the bridge. More... | |
#define | DEFAULT_SOFTMIX_TALKING_THRESHOLD 160 |
#define | SOFTBRIDGE_VIDEO_DEST_LEN strlen(SOFTBRIDGE_VIDEO_DEST_PREFIX) |
#define | SOFTBRIDGE_VIDEO_DEST_PREFIX "softbridge_dest" |
#define | SOFTBRIDGE_VIDEO_DEST_SEPARATOR '_' |
#define | SOFTMIX_DATALEN(rate, interval) ((rate/50) * (interval / 10)) |
Size of the buffer used for sample manipulation. More... | |
#define | SOFTMIX_MIN_SAMPLE_RATE 8000 /* 8 kHz sample rate */ |
#define | SOFTMIX_SAMPLES(rate, interval) (SOFTMIX_DATALEN(rate, interval) / 2) |
Number of samples we are dealing with. More... | |
#define | SOFTMIX_STAT_INTERVAL 100 |
Number of mixing iterations to perform between gathering statistics. More... | |
Functions | |
static void | __reg_module (void) |
static void | __unreg_module (void) |
static unsigned int | analyse_softmix_stats (struct softmix_stats *stats, struct softmix_bridge_data *softmix_data, int binaural_active) |
static int | append_all_streams (struct ast_stream_topology *dest, const struct ast_stream_topology *source) |
static int | append_source_stream (struct ast_stream_topology *dest, const char *channel_name, const char *sdp_label, struct ast_stream *stream, int index) |
static int | append_source_streams (struct ast_stream_topology *dest, const char *channel_name, const char *sdp_label, const struct ast_stream_topology *source) |
struct ast_module * | AST_MODULE_SELF_SYM (void) |
AST_TEST_DEFINE (sfu_append_source_streams) | |
AST_TEST_DEFINE (sfu_remove_destination_streams) | |
static struct ast_stream_topology * | build_topology (const struct stream_parameters *params, size_t num_streams) |
static void | clear_talking (struct ast_bridge_channel *bridge_channel) |
static void | gather_softmix_stats (struct softmix_stats *stats, const struct softmix_bridge_data *softmix_data, struct ast_bridge_channel *bridge_channel) |
static int | is_video_dest (const struct ast_stream *stream, const char *source_channel_name, int source_channel_stream_position) |
Determine if a stream is a video destination stream. More... | |
static int | is_video_source (const struct ast_stream *stream) |
Determine if a stream is a video source stream. More... | |
static int | load_module (void) |
static void | map_source_to_destinations (const char *source_channel_name, size_t bridge_stream_position, struct ast_bridge_channels_list *participants, int source_channel_stream_position) |
Map a source stream to all of its destination streams. More... | |
static void | remb_collect_report (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct softmix_bridge_data *softmix_data, struct softmix_channel *sc) |
static void | remb_collect_report_all (struct ast_bridge *bridge, struct softmix_bridge_data *softmix_data, float bitrate) |
static struct softmix_remb_collector * | remb_collector_alloc (void) |
Allocate a REMB collector. More... | |
static void | remb_enable_collection (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, size_t bridge_stream_position) |
Setup REMB collection for a particular bridge stream and channel. More... | |
static void | remb_send_report (struct ast_bridge_channel *bridge_channel, struct softmix_bridge_data *softmix_data, struct softmix_channel *sc) |
static int | remove_all_original_streams (struct ast_stream_topology *dest, const struct ast_stream_topology *source, const struct ast_stream_topology *original) |
static int | remove_destination_streams (struct ast_stream_topology *topology, const char *channel_name) |
static void | set_softmix_bridge_data (int rate, int interval, struct ast_bridge_channel *bridge_channel, int reset, int set_binaural, int binaural_pos_id, int is_announcement) |
static void | sfu_topologies_on_join (struct ast_bridge *bridge, struct ast_bridge_channel *joiner) |
Issue channel stream topology change requests. More... | |
static int | sfu_topologies_on_leave (struct ast_bridge_channel *leaver, struct ast_bridge_channels_list *participants) |
static void | sfu_topologies_on_source_change (struct ast_bridge *bridge, struct ast_bridge_channel *source) |
static void | softmix_bridge_check_voice (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) |
static int | softmix_bridge_create (struct ast_bridge *bridge) |
Function called when a bridge is created. More... | |
static void | softmix_bridge_data_destroy (struct softmix_bridge_data *softmix_data) |
static void | softmix_bridge_destroy (struct ast_bridge *bridge) |
Function called when a bridge is destroyed. More... | |
static int | softmix_bridge_join (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) |
Function called when a channel is joined into the bridge. More... | |
static void | softmix_bridge_leave (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) |
Function called when a channel leaves the bridge. More... | |
static void | softmix_bridge_stop (struct ast_bridge *bridge) |
static void | softmix_bridge_stream_sources_update (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct softmix_channel *sc) |
static void | softmix_bridge_stream_topology_changed (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) |
stream_topology_changed callback More... | |
static void | softmix_bridge_unsuspend (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel) |
Function called when a channel is unsuspended from the bridge. More... | |
static int | softmix_bridge_write (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static int | softmix_bridge_write_control (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static void | softmix_bridge_write_rtcp (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static void | softmix_bridge_write_text (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static void | softmix_bridge_write_video (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static void | softmix_bridge_write_voice (struct ast_bridge *bridge, struct ast_bridge_channel *bridge_channel, struct ast_frame *frame) |
static void | softmix_mixing_array_destroy (struct softmix_mixing_array *mixing_array, unsigned int binaural_active) |
static int | softmix_mixing_array_grow (struct softmix_mixing_array *mixing_array, unsigned int num_entries, unsigned int binaural_active) |
static int | softmix_mixing_array_init (struct softmix_mixing_array *mixing_array, unsigned int starting_num_entries, unsigned int binaural_active) |
static int | softmix_mixing_loop (struct ast_bridge *bridge) |
Mixing loop. More... | |
static void * | softmix_mixing_thread (void *data) |
static void | softmix_pass_video_top_priority (struct ast_bridge *bridge, struct ast_frame *frame) |
static void | softmix_poke_thread (struct softmix_bridge_data *softmix_data) |
static int16_t * | softmix_process_read_audio (struct softmix_channel *sc, unsigned int num_samples) |
static void | softmix_process_write_audio (struct softmix_translate_helper *trans_helper, struct ast_format *raw_write_fmt, struct softmix_channel *sc, unsigned int default_sample_size) |
static void | softmix_translate_helper_change_rate (struct softmix_translate_helper *trans_helper, unsigned int sample_rate) |
static void | softmix_translate_helper_cleanup (struct softmix_translate_helper *trans_helper) |
static void | softmix_translate_helper_destroy (struct softmix_translate_helper *trans_helper) |
static struct softmix_translate_helper_entry * | softmix_translate_helper_entry_alloc (struct ast_format *dst) |
static void * | softmix_translate_helper_free_entry (struct softmix_translate_helper_entry *entry) |
static void | softmix_translate_helper_init (struct softmix_translate_helper *trans_helper, unsigned int sample_rate) |
static int | unload_module (void) |
static int | validate_original_streams (struct ast_test *test, struct ast_stream_topology *topology, const struct stream_parameters *params, size_t num_streams) |
static int | validate_stream (struct ast_test *test, struct ast_stream *stream, const struct stream_parameters *params) |
Variables | |
static struct ast_module_info | __mod_info = { .name = AST_MODULE, .flags = AST_MODFLAG_LOAD_ORDER , .description = "Multi-party software based channel mixing" , .key = "This paragraph is copyright (c) 2006 by Digium, Inc. \In order for your module to load, it must return this \key via a function called \"key\". Any code which \includes this paragraph must be licensed under the GNU \General Public License version 2 or later (at your \option). In addition to Digium's general reservations \of rights, Digium expressly reserves the right to \allow other parties to license this paragraph under \different terms. Any use of Digium, Inc. trademarks or \logos (including \"Asterisk\" or \"Digium\") without \express written permission of Digium, Inc. is prohibited.\n" , .buildopt_sum = "30ef0c93b36035ec78c9cfd712d36d9b" , .load = load_module, .unload = unload_module, .load_pri = AST_MODPRI_DEFAULT, .support_level = AST_MODULE_SUPPORT_CORE, } |
static const struct ast_module_info * | ast_module_info = &__mod_info |
static struct ast_bridge_technology | softmix_bridge |
Multi-party software based channel mixing.
Definition in file bridge_softmix.c.
#define DEFAULT_SOFTMIX_INTERVAL 20 |
Interval at which mixing will take place. Valid options are 10, 20, and 40.
Definition at line 48 of file bridge_softmix.c.
Referenced by softmix_bridge_create(), and softmix_bridge_join().
#define DEFAULT_SOFTMIX_SILENCE_THRESHOLD 2500 |
Default time in ms of silence necessary to declare talking stopped by the bridge.
This is the time at which a channel's own audio will stop getting mixed out of its own write audio stream because it is no longer talking.
Definition at line 66 of file bridge_softmix.c.
Referenced by softmix_bridge_write_voice().
#define DEFAULT_SOFTMIX_TALKING_THRESHOLD 160 |
Default minimum average magnitude threshold to determine talking by the DSP.
Definition at line 69 of file bridge_softmix.c.
Referenced by set_softmix_bridge_data().
#define SOFTBRIDGE_VIDEO_DEST_LEN strlen(SOFTBRIDGE_VIDEO_DEST_PREFIX) |
Definition at line 72 of file bridge_softmix.c.
Referenced by is_video_dest(), is_video_source(), and softmix_bridge_stream_sources_update().
#define SOFTBRIDGE_VIDEO_DEST_PREFIX "softbridge_dest" |
Definition at line 71 of file bridge_softmix.c.
Referenced by append_source_stream(), is_video_dest(), is_video_source(), and softmix_bridge_stream_sources_update().
#define SOFTBRIDGE_VIDEO_DEST_SEPARATOR '_' |
Definition at line 73 of file bridge_softmix.c.
Referenced by append_source_stream(), and is_video_dest().
#define SOFTMIX_DATALEN | ( | rate, | |
interval | |||
) | ((rate/50) * (interval / 10)) |
Size of the buffer used for sample manipulation.
Definition at line 51 of file bridge_softmix.c.
Referenced by set_softmix_bridge_data(), and softmix_mixing_loop().
#define SOFTMIX_MIN_SAMPLE_RATE 8000 /* 8 kHz sample rate */ |
The minimum sample rate of the bridge.
Definition at line 45 of file bridge_softmix.c.
Referenced by gather_softmix_stats(), and softmix_bridge_create().
#define SOFTMIX_SAMPLES | ( | rate, | |
interval | |||
) | (SOFTMIX_DATALEN(rate, interval) / 2) |
Number of samples we are dealing with.
Definition at line 54 of file bridge_softmix.c.
Referenced by set_softmix_bridge_data(), softmix_bridge_create(), softmix_bridge_write_voice(), softmix_mixing_loop(), and softmix_mixing_thread().
#define SOFTMIX_STAT_INTERVAL 100 |
Number of mixing iterations to perform between gathering statistics.
Definition at line 57 of file bridge_softmix.c.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 2907 of file bridge_softmix.c.
|
static |
Definition at line 2907 of file bridge_softmix.c.
|
static |
Definition at line 1615 of file bridge_softmix.c.
References ARRAY_LEN, ast_debug, softmix_stats::highest_supported_rate, softmix_bridge_data::internal_rate, softmix_stats::locked_rate, softmix_stats::maximum_rate, MIN, softmix_stats::num_above_internal_rate, softmix_stats::num_above_maximum_rate, softmix_stats::num_at_internal_rate, softmix_stats::num_channels, softmix_stats::sample_rates, and SOFTMIX_BINAURAL_SAMPLE_RATE.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 568 of file bridge_softmix.c.
References ast_stream_clone(), ast_stream_free(), ast_stream_get_state(), AST_STREAM_STATE_REMOVED, ast_stream_topology_append_stream(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), ast_stream_topology_set_stream(), and NULL.
Referenced by sfu_topologies_on_join(), sfu_topologies_on_source_change(), and softmix_bridge_stream_sources_update().
|
static |
Definition at line 505 of file bridge_softmix.c.
References ast_asprintf, ast_free, ast_stream_clone(), ast_stream_free(), ast_stream_set_metadata(), ast_stream_set_state(), AST_STREAM_STATE_SENDONLY, ast_stream_topology_append_stream(), ast_strlen_zero, NULL, SOFTBRIDGE_VIDEO_DEST_PREFIX, and SOFTBRIDGE_VIDEO_DEST_SEPARATOR.
Referenced by append_source_streams(), and softmix_bridge_stream_sources_update().
|
static |
Definition at line 545 of file bridge_softmix.c.
References append_source_stream(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), and is_video_source().
Referenced by AST_TEST_DEFINE(), sfu_topologies_on_join(), and sfu_topologies_on_source_change().
struct ast_module* AST_MODULE_SELF_SYM | ( | void | ) |
Definition at line 2907 of file bridge_softmix.c.
AST_TEST_DEFINE | ( | sfu_append_source_streams | ) |
Definition at line 2709 of file bridge_softmix.c.
References append_source_streams(), ARRAY_LEN, AST_MEDIA_TYPE_AUDIO, AST_MEDIA_TYPE_VIDEO, ast_stream_topology_free(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), AST_TEST_FAIL, AST_TEST_NOT_RUN, AST_TEST_PASS, ast_test_status_update, build_topology(), end, sip_to_pjsip::info(), NULL, TEST_EXECUTE, TEST_INIT, validate_original_streams(), and validate_stream().
AST_TEST_DEFINE | ( | sfu_remove_destination_streams | ) |
Definition at line 2797 of file bridge_softmix.c.
References ARRAY_LEN, ast_format_cap_get_names(), ast_format_cap_identical(), AST_MEDIA_TYPE_AUDIO, AST_MEDIA_TYPE_VIDEO, ast_str_alloca, ast_stream_get_formats(), ast_stream_get_name(), ast_stream_get_state(), AST_STREAM_STATE_REMOVED, ast_stream_topology_free(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), AST_TEST_FAIL, AST_TEST_NOT_RUN, AST_TEST_PASS, ast_test_status_update, build_topology(), end, sip_to_pjsip::info(), is_video_dest(), NULL, remove_destination_streams(), TEST_EXECUTE, and TEST_INIT.
|
static |
Definition at line 2613 of file bridge_softmix.c.
References ao2_cleanup, ast_format_cap_alloc, AST_FORMAT_CAP_FLAG_DEFAULT, ast_format_cap_update_by_allow_disallow(), ast_stream_alloc(), ast_stream_free(), ast_stream_set_formats(), ast_stream_topology_alloc(), ast_stream_topology_append_stream(), ast_stream_topology_free(), name, NULL, RAII_VAR, and type.
Referenced by AST_TEST_DEFINE().
|
static |
Definition at line 1042 of file bridge_softmix.c.
References ast_bridge_channel_notify_talking(), ast_mutex_lock, ast_mutex_unlock, ast_slinfactory_flush(), softmix_channel::factory, softmix_channel::lock, softmix_channel::talking, and ast_bridge_channel::tech_pvt.
Referenced by softmix_bridge_check_voice(), and softmix_bridge_write_control().
|
static |
Definition at line 1571 of file bridge_softmix.c.
References ARRAY_LEN, ast_channel_lock, ast_channel_rawreadformat(), ast_channel_unlock, ast_format_get_sample_rate(), ast_bridge_channel::chan, softmix_stats::highest_supported_rate, softmix_bridge_data::internal_rate, MAX, softmix_stats::maximum_rate, softmix_stats::num_above_internal_rate, softmix_stats::num_above_maximum_rate, softmix_stats::num_at_internal_rate, softmix_stats::num_channels, softmix_stats::sample_rates, and SOFTMIX_MIN_SAMPLE_RATE.
Referenced by softmix_mixing_loop().
|
static |
Determine if a stream is a video destination stream.
A source channel name can be provided to narrow this to a destination stream for a particular source channel. Further, a source stream name can be provided to narrow this to a particular source stream's destination. However, empty strings can be provided to match any destination video stream, regardless of source channel or source stream.
stream | The stream to test |
source_channel_name | The name of a source video channel to match |
source_channel_stream_position | The position of the video on the source channel |
1 | The stream is a video destination stream |
0 | The stream is not a video destination stream |
Definition at line 468 of file bridge_softmix.c.
References ast_alloca, AST_MEDIA_TYPE_VIDEO, ast_stream_get_name(), ast_stream_get_state(), ast_stream_get_type(), AST_STREAM_STATE_REMOVED, ast_strlen_zero, SOFTBRIDGE_VIDEO_DEST_LEN, SOFTBRIDGE_VIDEO_DEST_PREFIX, and SOFTBRIDGE_VIDEO_DEST_SEPARATOR.
Referenced by AST_TEST_DEFINE(), map_source_to_destinations(), remove_destination_streams(), and softmix_bridge_stream_sources_update().
|
static |
Determine if a stream is a video source stream.
stream | The stream to test |
1 | The stream is a video source |
0 | The stream is not a video source |
Definition at line 441 of file bridge_softmix.c.
References AST_MEDIA_TYPE_VIDEO, ast_stream_get_name(), ast_stream_get_state(), ast_stream_get_type(), AST_STREAM_STATE_REMOVED, SOFTBRIDGE_VIDEO_DEST_LEN, and SOFTBRIDGE_VIDEO_DEST_PREFIX.
Referenced by append_source_streams(), softmix_bridge_stream_sources_update(), and softmix_bridge_stream_topology_changed().
|
static |
Definition at line 2896 of file bridge_softmix.c.
References ast_bridge_technology_register, AST_MODULE_LOAD_DECLINE, AST_MODULE_LOAD_SUCCESS, AST_TEST_REGISTER, and unload_module().
|
static |
Map a source stream to all of its destination streams.
source_channel_name | Name of channel where the source stream originates |
bridge_stream_position | The slot in the bridge where source video will come from |
participants | The bridge_channels in the bridge |
source_channel_stream_position | The position of the stream on the source channel |
Definition at line 2181 of file bridge_softmix.c.
References ast_bridge_channel_lock, ast_bridge_channel_unlock, ast_channel_get_stream_topology(), ast_channel_lock, ast_channel_name(), ast_channel_unlock, AST_LIST_TRAVERSE, ast_stream_topology_get_count(), ast_stream_topology_get_stream(), AST_VECTOR_APPEND, AST_VECTOR_REPLACE, ast_bridge_channel::chan, is_video_dest(), ast_bridge_channel::stream_map, ast_bridge_channel::tech_pvt, and ast_bridge_channel::to_channel.
Referenced by softmix_bridge_stream_topology_changed().
|
static |
Definition at line 1405 of file bridge_softmix.c.
References AST_BRIDGE_VIDEO_SFU_REMB_AVERAGE, AST_BRIDGE_VIDEO_SFU_REMB_AVERAGE_ALL, AST_BRIDGE_VIDEO_SFU_REMB_FORCE, AST_BRIDGE_VIDEO_SFU_REMB_HIGHEST, AST_BRIDGE_VIDEO_SFU_REMB_HIGHEST_ALL, AST_BRIDGE_VIDEO_SFU_REMB_LOWEST, AST_BRIDGE_VIDEO_SFU_REMB_LOWEST_ALL, AST_VECTOR_GET, AST_VECTOR_SIZE, softmix_remb_collector::bitrate, softmix_bridge_data::bitrate, ast_rtp_rtcp_feedback_remb::br_exp, ast_rtp_rtcp_feedback_remb::br_mantissa, ast_bridge_video_sfu_data::estimated_bitrate, ast_bridge_video_mode::mode_data, softmix_channel::remb, ast_bridge_video_sfu_data::remb_behavior, remb_collect_report_all(), ast_bridge_video_mode::sfu_data, ast_bridge::softmix, and ast_bridge_softmix::video_mode.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 1374 of file bridge_softmix.c.
References AST_BRIDGE_VIDEO_SFU_REMB_AVERAGE, AST_BRIDGE_VIDEO_SFU_REMB_AVERAGE_ALL, AST_BRIDGE_VIDEO_SFU_REMB_FORCE, AST_BRIDGE_VIDEO_SFU_REMB_HIGHEST, AST_BRIDGE_VIDEO_SFU_REMB_HIGHEST_ALL, AST_BRIDGE_VIDEO_SFU_REMB_LOWEST, AST_BRIDGE_VIDEO_SFU_REMB_LOWEST_ALL, softmix_remb_collector::bitrate, softmix_bridge_data::bitrate, ast_bridge_video_mode::mode_data, ast_bridge_video_sfu_data::remb_behavior, ast_bridge_video_mode::sfu_data, ast_bridge::softmix, and ast_bridge_softmix::video_mode.
Referenced by remb_collect_report().
|
static |
Allocate a REMB collector.
non-NULL | success |
NULL | failure |
Definition at line 2221 of file bridge_softmix.c.
References AO2_ALLOC_OPT_LOCK_NOLOCK, ao2_alloc_options, AST_FRAME_RTCP, AST_RTP_RTCP_FMT_REMB, AST_RTP_RTCP_PSFB, ast_frame::data, ast_frame::datalen, softmix_remb_collector::feedback, ast_rtp_rtcp_feedback::fmt, softmix_remb_collector::frame, ast_frame::frametype, ast_frame_subclass::integer, NULL, ast_frame::ptr, and ast_frame::subclass.
Referenced by remb_enable_collection().
|
static |
Setup REMB collection for a particular bridge stream and channel.
bridge | The bridge |
bridge_channel | Channel that is collecting REMB information |
bridge_stream_position | The slot in the bridge where source video comes from |
Definition at line 2246 of file bridge_softmix.c.
References ao2_ref, AST_VECTOR_REPLACE, softmix_channel::remb_collector, remb_collector_alloc(), ast_bridge_channel::tech_pvt, and ast_bridge::tech_pvt.
Referenced by softmix_bridge_stream_topology_changed().
|
static |
Definition at line 1485 of file bridge_softmix.c.
References ast_bridge_channel_queue_frame(), AST_VECTOR_GET, AST_VECTOR_SIZE, softmix_remb_collector::bitrate, softmix_bridge_data::bitrate, ast_rtp_rtcp_feedback_remb::br_exp, ast_rtp_rtcp_feedback_remb::br_mantissa, softmix_remb_collector::feedback, softmix_remb_collector::frame, ast_rtp_rtcp_feedback::remb, softmix_channel::remb_collector, ast_bridge_channel::stream_map, ast_frame::stream_num, and ast_bridge_channel::to_bridge.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 1080 of file bridge_softmix.c.
References ast_stream_clone(), ast_stream_free(), ast_stream_get_name(), ast_stream_set_state(), AST_STREAM_STATE_REMOVED, ast_stream_topology_get_count(), ast_stream_topology_get_stream(), ast_stream_topology_set_stream(), and NULL.
Referenced by sfu_topologies_on_source_change().
|
static |
Definition at line 776 of file bridge_softmix.c.
References ast_stream_set_state(), AST_STREAM_STATE_REMOVED, ast_stream_topology_get_count(), ast_stream_topology_get_stream(), and is_video_dest().
Referenced by AST_TEST_DEFINE(), and sfu_topologies_on_leave().
|
static |
Definition at line 303 of file bridge_softmix.c.
References ao2_replace, ast_assert, ast_bridge_channel_leave_bridge(), ast_channel_lock, ast_channel_rawreadformat(), ast_channel_unlock, ast_dsp_free(), ast_dsp_new_with_rate(), ast_dsp_set_threshold(), ast_format_cache_get_slin_by_rate(), AST_FRAME_VOICE, ast_mutex_lock, ast_mutex_unlock, ast_set_read_format_path(), ast_set_write_format(), ast_set_write_format_interleaved_stereo(), ast_slinfactory_destroy(), ast_slinfactory_init_with_format(), softmix_channel::binaural, BINAURAL_MIXING_INTERVAL, softmix_channel::binaural_pos, BRIDGE_CHANNEL_STATE_END, ast_bridge_channel::chan, ast_frame::data, ast_frame::datalen, DEFAULT_SOFTMIX_TALKING_THRESHOLD, softmix_channel::dsp, softmix_channel::factory, softmix_channel::final_buf, ast_frame_subclass::format, ast_frame::frametype, softmix_channel::is_announcement, softmix_channel::lock, NULL, ast_frame::ptr, softmix_channel::rate, softmix_channel::read_slin_format, ast_frame::samples, SOFTMIX_DATALEN, SOFTMIX_SAMPLES, ast_frame::subclass, ast_bridge_tech_optimizations::talking_threshold, ast_bridge_channel::tech_args, ast_bridge_channel::tech_pvt, and softmix_channel::write_frame.
Referenced by softmix_bridge_join(), and softmix_mixing_loop().
|
static |
Issue channel stream topology change requests.
When in SFU mode, each participant needs to be able to send video directly to other participants in the bridge. This means that all participants need to have their topologies updated. The joiner needs to have destination streams for all current participants, and the current participants need to have destinations streams added for the joiner's sources.
joiner | The channel that is joining the softmix bridge |
participants | The current participants in the softmix bridge |
Definition at line 621 of file bridge_softmix.c.
References append_all_streams(), append_source_streams(), ast_channel_get_stream_topology(), ast_channel_lock, ast_channel_name(), ast_channel_request_stream_topology_change(), ast_channel_uniqueid(), ast_channel_unlock, AST_LIST_TRAVERSE, ast_stream_topology_alloc(), ast_stream_topology_clone(), ast_stream_topology_free(), ast_trace, ast_bridge_channel::chan, ast_bridge::channels, LOG_ERROR, NULL, RAII_VAR, SCOPE_ENTER, SCOPE_EXIT, SCOPE_EXIT_LOG_RTN, ast_bridge_softmix::send_sdp_label, ast_bridge::softmix, ast_bridge_channel::tech_pvt, and softmix_channel::topology.
Referenced by softmix_bridge_join().
|
static |
Definition at line 795 of file bridge_softmix.c.
References ast_channel_name(), ast_channel_request_stream_topology_change(), AST_LIST_TRAVERSE, ast_bridge_channel::chan, NULL, remove_destination_streams(), ast_bridge_channel::tech_pvt, and softmix_channel::topology.
Referenced by softmix_bridge_leave().
|
static |
Definition at line 1124 of file bridge_softmix.c.
References append_all_streams(), append_source_streams(), ast_channel_get_stream_topology(), ast_channel_lock, ast_channel_name(), ast_channel_request_stream_topology_change(), ast_channel_uniqueid(), ast_channel_unlock, AST_LIST_TRAVERSE, ast_stream_topology_alloc(), ast_stream_topology_clone(), ast_stream_topology_free(), ast_bridge_channel::chan, ast_bridge::channels, cleanup(), NULL, remove_all_original_streams(), ast_bridge_softmix::send_sdp_label, ast_bridge::softmix, ast_bridge_channel::tech_pvt, and softmix_channel::topology.
Referenced by softmix_bridge_write_control().
|
static |
Definition at line 1067 of file bridge_softmix.c.
References clear_talking(), ast_bridge_channel::features, and ast_bridge_features::mute.
Referenced by softmix_bridge_write().
|
static |
Function called when a bridge is created.
Definition at line 2079 of file bridge_softmix.c.
References ast_calloc, ast_cond_init, ast_log, AST_LOG_WARNING, ast_mutex_init, ast_pthread_create, AST_PTHREADT_NULL, ast_timer_open(), AST_VECTOR_INIT, softmix_bridge_data::bridge, softmix_bridge_data::cond, softmix_bridge_data::default_sample_size, DEFAULT_SOFTMIX_INTERVAL, softmix_bridge_data::internal_mixing_interval, softmix_bridge_data::internal_rate, softmix_bridge_data::lock, NULL, softmix_bridge_data_destroy(), SOFTMIX_MIN_SAMPLE_RATE, softmix_mixing_thread(), SOFTMIX_SAMPLES, ast_bridge::tech_pvt, softmix_bridge_data::thread, and softmix_bridge_data::timer.
|
static |
Definition at line 2065 of file bridge_softmix.c.
References ao2_cleanup, ast_cond_destroy, ast_free, ast_mutex_destroy, ast_timer_close(), AST_VECTOR_FREE, AST_VECTOR_RESET, softmix_bridge_data::cond, softmix_bridge_data::lock, NULL, and softmix_bridge_data::timer.
Referenced by softmix_bridge_create(), and softmix_bridge_destroy().
|
static |
Function called when a bridge is destroyed.
Definition at line 2145 of file bridge_softmix.c.
References ast_cond_signal, ast_debug, ast_mutex_lock, ast_mutex_unlock, AST_PTHREADT_NULL, softmix_bridge_data::cond, softmix_bridge_data::convolve, free_convolve_data(), softmix_bridge_data::lock, NULL, softmix_bridge_data_destroy(), softmix_bridge_data::stop, ast_bridge::tech_pvt, softmix_bridge_data::thread, thread, and ast_bridge::uniqueid.
|
static |
Function called when a channel is joined into the bridge.
Definition at line 697 of file bridge_softmix.c.
References AST_BRIDGE_VIDEO_MODE_SFU, ast_calloc, ast_channel_hold_state(), ast_channel_name(), AST_CONTROL_HOLD, AST_CONTROL_UNHOLD, ast_debug, ast_format_get_channel_count(), ast_free, ast_indicate(), ast_log, ast_mutex_init, convolve_data::binaural_active, ast_bridge_softmix::binaural_active, ast_bridge_channel::chan, softmix_bridge_data::convolve, softmix_bridge_data::default_sample_size, DEFAULT_SOFTMIX_INTERVAL, softmix_bridge_data::internal_mixing_interval, softmix_bridge_data::internal_rate, softmix_channel::lock, LOG_ERROR, ast_bridge_video_mode::mode, SCOPE_ENTER, SCOPE_EXIT_RTN_VALUE, set_binaural_data_join(), set_softmix_bridge_data(), sfu_topologies_on_join(), ast_bridge::softmix, softmix_poke_thread(), ast_bridge_channel::tech_pvt, ast_bridge::tech_pvt, ast_bridge::uniqueid, ast_bridge_softmix::video_mode, and ast_bridge_channel::write_format.
|
static |
Function called when a channel leaves the bridge.
Definition at line 817 of file bridge_softmix.c.
References ao2_cleanup, AST_BRIDGE_VIDEO_MODE_SFU, ast_dsp_free(), ast_free, ast_mutex_destroy, ast_slinfactory_destroy(), ast_stream_topology_free(), AST_VECTOR_FREE, softmix_channel::binaural, ast_bridge_softmix::binaural_active, softmix_channel::binaural_pos, ast_bridge::channels, softmix_bridge_data::convolve, softmix_bridge_data::default_sample_size, softmix_channel::dsp, softmix_channel::factory, ast_frame_subclass::format, softmix_channel::lock, ast_bridge_video_mode::mode, NULL, softmix_channel::remb_collector, set_binaural_data_leave(), sfu_topologies_on_leave(), ast_bridge::softmix, ast_frame::subclass, ast_bridge_channel::tech_pvt, ast_bridge::tech_pvt, softmix_channel::topology, ast_bridge_softmix::video_mode, and softmix_channel::write_frame.
|
static |
Definition at line 2130 of file bridge_softmix.c.
References ast_mutex_lock, ast_mutex_unlock, softmix_bridge_data::lock, softmix_bridge_data::stop, and ast_bridge::tech_pvt.
|
static |
Definition at line 2269 of file bridge_softmix.c.
References append_all_streams(), append_source_stream(), ast_channel_get_stream_topology(), ast_channel_name(), ast_channel_request_stream_topology_change(), ast_channel_uniqueid(), AST_LIST_TRAVERSE, AST_MEDIA_TYPE_VIDEO, ast_str_tmp, ast_stream_get_name(), ast_stream_get_state(), ast_stream_get_type(), ast_stream_set_state(), ast_stream_state2str(), AST_STREAM_STATE_INACTIVE, AST_STREAM_STATE_RECVONLY, AST_STREAM_STATE_REMOVED, AST_STREAM_STATE_SENDONLY, AST_STREAM_STATE_SENDRECV, ast_stream_to_str(), ast_stream_topology_alloc(), ast_stream_topology_clone(), ast_stream_topology_free(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), ast_stream_topology_to_str(), ast_trace, ast_bridge_channel::chan, ast_bridge::channels, cleanup(), is_video_dest(), is_video_source(), LOG_ERROR, MAX, NULL, SCOPE_ENTER, SCOPE_EXIT, SCOPE_EXIT_EXPR, SCOPE_EXIT_LOG, ast_bridge_softmix::send_sdp_label, SOFTBRIDGE_VIDEO_DEST_LEN, SOFTBRIDGE_VIDEO_DEST_PREFIX, ast_bridge::softmix, ast_bridge_channel::tech_pvt, and softmix_channel::topology.
Referenced by softmix_bridge_stream_topology_changed().
|
static |
stream_topology_changed callback
For most video modes, nothing beyond the ordinary is required. For the SFU case, though, we need to completely remap the streams in order to ensure video gets directed where it is expected to go.
bridge | The bridge |
bridge_channel | Channel whose topology has changed |
Definition at line 2463 of file bridge_softmix.c.
References ao2_bump, ao2_cleanup, ast_bridge_channel_lock, ast_bridge_channel_stream_map(), ast_bridge_channel_unlock, AST_BRIDGE_VIDEO_MODE_NONE, AST_BRIDGE_VIDEO_MODE_SFU, AST_BRIDGE_VIDEO_MODE_SINGLE_SRC, AST_BRIDGE_VIDEO_MODE_TALKER_SRC, ast_channel_get_stream_topology(), ast_channel_lock, ast_channel_name(), ast_channel_unlock, AST_LIST_TRAVERSE, AST_MEDIA_TYPE_END, AST_MEDIA_TYPE_VIDEO, ast_stream_get_state(), ast_stream_get_type(), AST_STREAM_STATE_REMOVED, ast_stream_topology_free(), ast_stream_topology_get_count(), ast_stream_topology_get_stream(), AST_VECTOR_APPEND, AST_VECTOR_ELEM_CLEANUP_NOOP, AST_VECTOR_ELEM_DEFAULT_CMP, AST_VECTOR_FREE, AST_VECTOR_GET, AST_VECTOR_GET_INDEX_NTH, AST_VECTOR_INIT, AST_VECTOR_REPLACE, AST_VECTOR_RESET, AST_VECTOR_SIZE, ast_bridge_channel::chan, ast_bridge::channels, is_video_source(), map_source_to_destinations(), ast_bridge_video_mode::mode, NULL, remb_enable_collection(), SCOPE_ENTER, SCOPE_EXIT_RTN, ast_bridge::softmix, softmix_bridge_stream_sources_update(), ast_bridge_channel::stream_map, ast_bridge_channel::tech_pvt, ast_bridge::tech_pvt, ast_bridge_channel::to_bridge, ast_bridge_channel::to_channel, type, and ast_bridge_softmix::video_mode.
|
static |
Function called when a channel is unsuspended from the bridge.
Definition at line 417 of file bridge_softmix.c.
References ast_format_cache_get_slin_by_rate(), ast_set_write_format_interleaved_stereo(), softmix_channel::binaural, ast_bridge_channel::chan, softmix_channel::rate, softmix_poke_thread(), ast_bridge_channel::tech_pvt, and ast_bridge::tech_pvt.
|
static |
Definition at line 1320 of file bridge_softmix.c.
References ast_assert, ast_bridge_queue_everyone_else(), ast_debug, AST_FRAME_BRIDGE_ACTION, AST_FRAME_BRIDGE_ACTION_SYNC, AST_FRAME_CONTROL, AST_FRAME_DTMF_BEGIN, AST_FRAME_DTMF_END, AST_FRAME_NULL, AST_FRAME_RTCP, AST_FRAME_TEXT, AST_FRAME_TEXT_DATA, AST_FRAME_VIDEO, AST_FRAME_VOICE, ast_log, ast_frame::frametype, LOG_ERROR, softmix_bridge_check_voice(), softmix_bridge_write_control(), softmix_bridge_write_rtcp(), softmix_bridge_write_text(), softmix_bridge_write_video(), softmix_bridge_write_voice(), ast_bridge_channel::tech_pvt, and ast_bridge::tech_pvt.
|
static |
Definition at line 1233 of file bridge_softmix.c.
References ast_bridge_queue_everyone_else(), AST_BRIDGE_VIDEO_MODE_SFU, AST_CONTROL_HOLD, AST_CONTROL_STREAM_TOPOLOGY_SOURCE_CHANGED, AST_CONTROL_VIDUPDATE, ast_tvdiff_ms(), ast_tvnow(), clear_talking(), ast_frame_subclass::integer, softmix_bridge_data::last_video_update, ast_bridge_video_mode::mode, NULL, sfu_topologies_on_source_change(), ast_bridge::softmix, ast_frame::subclass, ast_bridge::tech_pvt, ast_bridge_softmix::video_mode, and ast_bridge_video_mode::video_update_discard.
Referenced by softmix_bridge_write().
|
static |
Definition at line 1282 of file bridge_softmix.c.
References AST_BRIDGE_VIDEO_MODE_SFU, ast_mutex_lock, ast_mutex_unlock, AST_RTP_RTCP_FMT_REMB, AST_RTP_RTCP_PSFB, ast_frame::data, softmix_remb_collector::feedback, ast_rtp_rtcp_feedback::fmt, ast_frame_subclass::integer, softmix_channel::lock, ast_bridge_video_mode::mode, ast_bridge_video_mode::mode_data, ast_frame::ptr, softmix_channel::remb, ast_rtp_rtcp_feedback::remb, ast_bridge_video_sfu_data::remb_send_interval, ast_bridge_video_mode::sfu_data, ast_bridge::softmix, ast_frame::subclass, ast_bridge_channel::tech_pvt, and ast_bridge_softmix::video_mode.
Referenced by softmix_bridge_write().
|
static |
Definition at line 1197 of file bridge_softmix.c.
References ast_bridge_queue_everyone_else(), ast_channel_name(), AST_FRAME_TEXT_DATA, ast_frame_type2str(), ast_log, AST_MSG_DATA_ATTR_BODY, AST_MSG_DATA_ATTR_FROM, ast_msg_data_get_attribute(), ast_bridge_channel::chan, ast_frame::data, ast_frame::datalen, DEBUG_ATLEAST, ast_frame::frametype, LOG_DEBUG, and ast_frame::ptr.
Referenced by softmix_bridge_write().
|
static |
Definition at line 889 of file bridge_softmix.c.
References ast_bridge_is_video_src(), ast_bridge_number_video_src(), ast_bridge_queue_everyone_else(), ast_bridge_update_talker_src_video_mode(), AST_BRIDGE_VIDEO_MODE_NONE, AST_BRIDGE_VIDEO_MODE_SFU, AST_BRIDGE_VIDEO_MODE_SINGLE_SRC, AST_BRIDGE_VIDEO_MODE_TALKER_SRC, ast_mutex_lock, ast_mutex_unlock, ast_bridge_channel::chan, video_follow_talker_data::energy_average, ast_frame_subclass::frame_ending, softmix_channel::lock, ast_bridge_video_mode::mode, NULL, ast_bridge::softmix, softmix_pass_video_top_priority(), ast_frame::subclass, ast_bridge_channel::tech_pvt, ast_bridge_softmix::video_mode, and softmix_channel::video_talker.
Referenced by softmix_bridge_write().
|
static |
Definition at line 942 of file bridge_softmix.c.
References ast_bridge_channel_notify_talking(), AST_BRIDGE_VIDEO_MODE_TALKER_SRC, ast_channel_lock, ast_channel_name(), ast_channel_unlock, ast_debug, ast_dsp_silence_with_energy(), ast_format_cmp(), AST_FORMAT_CMP_EQUAL, ast_format_get_name(), ast_mutex_lock, ast_mutex_unlock, ast_set_read_format_path(), ast_slinfactory_available(), ast_slinfactory_feed(), ast_slinfactory_flush(), ast_bridge_channel::chan, DEFAULT_ENERGY_HISTORY_LEN, DEFAULT_SOFTMIX_SILENCE_THRESHOLD, ast_bridge_tech_optimizations::drop_silence, softmix_channel::dsp, video_follow_talker_data::energy_accum, video_follow_talker_data::energy_average, video_follow_talker_data::energy_history, video_follow_talker_data::energy_history_cur_slot, softmix_channel::factory, ast_frame_subclass::format, softmix_bridge_data::internal_mixing_interval, softmix_bridge_data::internal_rate, softmix_channel::lock, ast_bridge_video_mode::mode, softmix_channel::read_slin_format, ast_bridge_tech_optimizations::silence_threshold, ast_bridge::softmix, SOFTMIX_SAMPLES, ast_frame::subclass, softmix_channel::talking, ast_bridge_channel::tech_args, ast_bridge_channel::tech_pvt, ast_bridge::tech_pvt, ast_bridge_softmix::video_mode, and softmix_channel::video_talker.
Referenced by softmix_bridge_write().
|
static |
Definition at line 1723 of file bridge_softmix.c.
References ast_free, softmix_mixing_array::buffers, and softmix_mixing_array::chan_pairs.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 1732 of file bridge_softmix.c.
References ast_log, ast_realloc, softmix_mixing_array::buffers, softmix_mixing_array::chan_pairs, LOG_NOTICE, softmix_mixing_array::max_num_entries, and tmp().
Referenced by softmix_mixing_loop().
|
static |
Definition at line 1704 of file bridge_softmix.c.
References ast_calloc, ast_log, softmix_mixing_array::buffers, softmix_mixing_array::chan_pairs, LOG_NOTICE, and softmix_mixing_array::max_num_entries.
Referenced by softmix_mixing_loop().
|
static |
Mixing loop.
0 | on success |
-1 | on failure |
Definition at line 1763 of file bridge_softmix.c.
References add_binaural_mixing(), analyse_softmix_stats(), ao2_t_replace, ast_bridge_channel_queue_frame(), ast_bridge_lock, ast_bridge_unlock, AST_BRIDGE_VIDEO_MODE_SFU, ast_channel_name(), ast_channel_rawwriteformat(), ast_format_cache_get_slin_by_rate(), AST_LIST_TRAVERSE, ast_log, ast_mutex_lock, ast_mutex_unlock, ast_slinear_saturated_add(), ast_timer_ack(), ast_timer_fd(), ast_timer_set_rate(), ast_tvdiff_ms(), ast_tvnow(), ast_waitfor_n_fd(), softmix_channel::binaural, convolve_data::binaural_active, ast_bridge_softmix::binaural_active, binaural_mixing(), softmix_bridge_data::bitrate, buf, softmix_mixing_array::buffers, ast_bridge_channel::chan, ast_bridge::channels, check_binaural_position_change(), softmix_bridge_data::convolve, create_binaural_frame(), ast_frame::datalen, softmix_bridge_data::default_sample_size, softmix_channel::final_buf, ast_frame_subclass::format, gather_softmix_stats(), softmix_bridge_data::internal_mixing_interval, ast_bridge_softmix::internal_mixing_interval, softmix_bridge_data::internal_rate, ast_bridge_softmix::internal_sample_rate, softmix_bridge_data::last_remb_update, softmix_channel::lock, softmix_stats::locked_rate, LOG_ERROR, LOG_WARNING, MAX_DATALEN, softmix_mixing_array::max_num_entries, softmix_stats::maximum_rate, ast_bridge_softmix::maximum_sample_rate, ast_bridge_video_mode::mode, ast_bridge_video_mode::mode_data, NULL, ast_bridge::num_active, ast_bridge::num_channels, remb_collect_report(), ast_bridge_video_sfu_data::remb_send_interval, remb_send_report(), ast_frame::samples, set_softmix_bridge_data(), ast_bridge_video_mode::sfu_data, ast_bridge::softmix, SOFTMIX_DATALEN, softmix_mixing_array_destroy(), softmix_mixing_array_grow(), softmix_mixing_array_init(), softmix_process_read_audio(), softmix_process_write_audio(), SOFTMIX_SAMPLES, SOFTMIX_STAT_INTERVAL, softmix_translate_helper_change_rate(), softmix_translate_helper_cleanup(), softmix_translate_helper_destroy(), softmix_translate_helper_init(), softmix_bridge_data::stop, ast_frame::subclass, ast_bridge_channel::suspended, ast_bridge_channel::tech_pvt, ast_bridge::tech_pvt, timeout, softmix_bridge_data::timer, timer, ast_bridge::uniqueid, softmix_mixing_array::used_entries, ast_bridge_softmix::video_mode, and softmix_channel::write_frame.
Referenced by softmix_mixing_thread().
|
static |
Definition at line 1996 of file bridge_softmix.c.
References ast_bridge_lock, ast_bridge_unlock, ast_callid_threadassoc_add(), ast_cond_wait, ast_debug, ast_log, ast_mutex_lock, ast_mutex_unlock, ast_bridge_softmix::binaural_active, softmix_bridge_data::binaural_init, softmix_bridge_data::bridge, ast_bridge::callid, softmix_bridge_data::cond, softmix_bridge_data::convolve, softmix_bridge_data::default_sample_size, init_convolve_data(), softmix_bridge_data::internal_mixing_interval, softmix_bridge_data::internal_rate, softmix_bridge_data::lock, LOG_ERROR, LOG_WARNING, NULL, ast_bridge::num_active, ast_bridge::softmix, SOFTMIX_BINAURAL_SAMPLE_RATE, softmix_mixing_loop(), SOFTMIX_SAMPLES, softmix_bridge_data::stop, and ast_bridge::uniqueid.
Referenced by softmix_bridge_create().
|
static |
Definition at line 863 of file bridge_softmix.c.
References ast_bridge_channel_queue_frame(), ast_bridge_is_video_src(), AST_LIST_TRAVERSE, ast_bridge_channel::chan, ast_bridge::channels, and ast_bridge_channel::suspended.
Referenced by softmix_bridge_write_video().
|
static |
Definition at line 409 of file bridge_softmix.c.
References ast_cond_signal, ast_mutex_lock, ast_mutex_unlock, softmix_bridge_data::cond, and softmix_bridge_data::lock.
Referenced by softmix_bridge_join(), and softmix_bridge_unsuspend().
|
static |
Definition at line 184 of file bridge_softmix.c.
References ast_slinfactory_available(), ast_slinfactory_read(), softmix_channel::factory, softmix_channel::have_audio, NULL, and softmix_channel::our_buf.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 203 of file bridge_softmix.c.
References ao2_replace, ast_format_cmp(), AST_FORMAT_CMP_EQUAL, AST_FRAME_VOICE, AST_LIST_INSERT_HEAD, AST_LIST_TRAVERSE, ast_slinear_saturated_subtract(), ast_translate(), ast_translator_build_path(), softmix_channel::binaural, ast_frame::data, ast_frame::datalen, softmix_translate_helper_entry::dst_format, softmix_translate_helper::entries, softmix_channel::final_buf, ast_frame_subclass::format, ast_frame::frametype, softmix_channel::have_audio, MAX_DATALEN, NULL, softmix_translate_helper_entry::num_times_requested, softmix_channel::our_buf, softmix_translate_helper_entry::out_frame, ast_frame::ptr, ast_frame::samples, softmix_translate_helper::slin_src, softmix_process_write_binaural_audio(), softmix_translate_helper_entry_alloc(), ast_frame::subclass, softmix_translate_helper_entry::trans_pvt, and softmix_channel::write_frame.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 159 of file bridge_softmix.c.
References ast_format_cache_get_slin_by_rate(), AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, ast_translator_build_path(), ast_translator_free_path(), softmix_translate_helper_entry::dst_format, softmix_translate_helper::entries, softmix_translate_helper_entry::entry, softmix_translate_helper::slin_src, softmix_translate_helper_free_entry(), and softmix_translate_helper_entry::trans_pvt.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 271 of file bridge_softmix.c.
References ast_frfree, AST_LIST_REMOVE_CURRENT, AST_LIST_TRAVERSE_SAFE_BEGIN, AST_LIST_TRAVERSE_SAFE_END, ast_translator_free_path(), softmix_translate_helper::entries, softmix_translate_helper_entry::entry, NULL, softmix_translate_helper_entry::num_times_requested, softmix_translate_helper_entry::out_frame, softmix_translate_helper_free_entry(), and softmix_translate_helper_entry::trans_pvt.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 150 of file bridge_softmix.c.
References AST_LIST_REMOVE_HEAD, softmix_translate_helper::entries, softmix_translate_helper_entry::entry, and softmix_translate_helper_free_entry().
Referenced by softmix_mixing_loop().
|
static |
Definition at line 117 of file bridge_softmix.c.
References ao2_bump, ast_calloc, softmix_translate_helper_entry::dst_format, softmix_translate_helper_entry::entry, NULL, and softmix_translate_helper_entry::num_times_requested.
Referenced by softmix_process_write_audio().
|
static |
Definition at line 130 of file bridge_softmix.c.
References ao2_cleanup, ast_free, ast_frfree, ast_translator_free_path(), softmix_translate_helper_entry::dst_format, NULL, softmix_translate_helper_entry::out_frame, and softmix_translate_helper_entry::trans_pvt.
Referenced by softmix_translate_helper_change_rate(), softmix_translate_helper_cleanup(), and softmix_translate_helper_destroy().
|
static |
Definition at line 144 of file bridge_softmix.c.
References ast_format_cache_get_slin_by_rate(), and softmix_translate_helper::slin_src.
Referenced by softmix_mixing_loop().
|
static |
Definition at line 2888 of file bridge_softmix.c.
References ast_bridge_technology_unregister(), and AST_TEST_UNREGISTER.
Referenced by load_module().
|
static |
Definition at line 2689 of file bridge_softmix.c.
References ast_stream_topology_get_count(), ast_stream_topology_get_stream(), ast_test_status_update, and validate_stream().
Referenced by AST_TEST_DEFINE().
|
static |
Definition at line 2652 of file bridge_softmix.c.
References ao2_cleanup, ast_codec_media_type2str(), ast_format_cap_alloc, AST_FORMAT_CAP_FLAG_DEFAULT, ast_format_cap_identical(), ast_format_cap_update_by_allow_disallow(), ast_stream_get_formats(), ast_stream_get_name(), ast_stream_get_type(), ast_test_status_update, stream_parameters::formats, stream_parameters::name, and stream_parameters::type.
Referenced by AST_TEST_DEFINE(), and validate_original_streams().
|
static |
Definition at line 2907 of file bridge_softmix.c.
|
static |
Definition at line 2907 of file bridge_softmix.c.
|
static |
Definition at line 2592 of file bridge_softmix.c.