FS-8876 #resolve [Bind video threads to CPU alternating]
This commit is contained in:
parent
9314001efd
commit
3d7fbd17be
|
@ -66,7 +66,14 @@ typedef struct secure_settings_s {
|
||||||
char *remote_crypto_key;
|
char *remote_crypto_key;
|
||||||
} switch_secure_settings_t;
|
} switch_secure_settings_t;
|
||||||
|
|
||||||
|
typedef struct core_video_globals_s {
|
||||||
|
int cpu_count;
|
||||||
|
int cur_cpu;
|
||||||
|
switch_memory_pool_t *pool;
|
||||||
|
switch_mutex_t *mutex;
|
||||||
|
} core_video_globals_t;
|
||||||
|
|
||||||
|
static core_video_globals_t video_globals = { 0 };
|
||||||
|
|
||||||
struct media_helper {
|
struct media_helper {
|
||||||
switch_core_session_t *session;
|
switch_core_session_t *session;
|
||||||
|
@ -5008,6 +5015,27 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_set_video_file(switch_core_ses
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int next_cpu(void)
|
||||||
|
{
|
||||||
|
int x = 0;
|
||||||
|
|
||||||
|
switch_mutex_lock(video_globals.mutex);
|
||||||
|
x = video_globals.cur_cpu++;
|
||||||
|
if (video_globals.cur_cpu == video_globals.cpu_count) {
|
||||||
|
video_globals.cur_cpu = 0;
|
||||||
|
}
|
||||||
|
switch_mutex_unlock(video_globals.mutex);
|
||||||
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG1, "Binding to CPU %d\n", x);
|
||||||
|
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bind_cpu(void)
|
||||||
|
{
|
||||||
|
switch_core_thread_set_cpu_affinity(next_cpu());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, void *obj)
|
static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, void *obj)
|
||||||
{
|
{
|
||||||
struct media_helper *mh = obj;
|
struct media_helper *mh = obj;
|
||||||
|
@ -5029,6 +5057,8 @@ static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, voi
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bind_cpu();
|
||||||
|
|
||||||
if ((var = switch_channel_get_variable(session->channel, "core_video_blank_image"))) {
|
if ((var = switch_channel_get_variable(session->channel, "core_video_blank_image"))) {
|
||||||
blank_img = switch_img_read_png(var, SWITCH_IMG_FMT_I420);
|
blank_img = switch_img_read_png(var, SWITCH_IMG_FMT_I420);
|
||||||
}
|
}
|
||||||
|
@ -10283,11 +10313,18 @@ SWITCH_DECLARE (void) switch_core_media_recover_session(switch_core_session_t *s
|
||||||
SWITCH_DECLARE(void) switch_core_media_init(void)
|
SWITCH_DECLARE(void) switch_core_media_init(void)
|
||||||
{
|
{
|
||||||
switch_core_gen_certs(DTLS_SRTP_FNAME ".pem");
|
switch_core_gen_certs(DTLS_SRTP_FNAME ".pem");
|
||||||
|
|
||||||
|
video_globals.cpu_count = switch_core_cpu_count();
|
||||||
|
video_globals.cur_cpu = 0;
|
||||||
|
|
||||||
|
switch_core_new_memory_pool(&video_globals.pool);
|
||||||
|
switch_mutex_init(&video_globals.mutex, SWITCH_MUTEX_NESTED, video_globals.pool);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_core_media_deinit(void)
|
SWITCH_DECLARE(void) switch_core_media_deinit(void)
|
||||||
{
|
{
|
||||||
|
switch_core_destroy_memory_pool(&video_globals.pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int payload_number(const char *name)
|
static int payload_number(const char *name)
|
||||||
|
|
|
@ -304,7 +304,7 @@ static switch_status_t init_decoder(switch_codec_t *codec)
|
||||||
// context->decoder_init = 0;
|
// context->decoder_init = 0;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
cfg.threads = switch_core_cpu_count();
|
cfg.threads = 1;//(switch_core_cpu_count() > 1) ? 2 : 1;
|
||||||
|
|
||||||
if (!context->is_vp9) { // vp8 only
|
if (!context->is_vp9) { // vp8 only
|
||||||
// dec_flags = VPX_CODEC_USE_POSTPROC;
|
// dec_flags = VPX_CODEC_USE_POSTPROC;
|
||||||
|
@ -391,7 +391,7 @@ static switch_status_t init_encoder(switch_codec_t *codec)
|
||||||
config->rc_target_bitrate = context->bandwidth;
|
config->rc_target_bitrate = context->bandwidth;
|
||||||
config->g_lag_in_frames = 0;
|
config->g_lag_in_frames = 0;
|
||||||
config->kf_max_dist = 2000;
|
config->kf_max_dist = 2000;
|
||||||
config->g_threads = (cpus > 1) ? 2 : 1;
|
config->g_threads = 1;//(cpus > 1) ? 2 : 1;
|
||||||
|
|
||||||
if (context->is_vp9) {
|
if (context->is_vp9) {
|
||||||
//config->rc_dropframe_thresh = 2;
|
//config->rc_dropframe_thresh = 2;
|
||||||
|
|
Loading…
Reference in New Issue