提交 a916a12d authored 作者: Anthony Minessale's avatar Anthony Minessale

FS-8938 #resolve [Clear res id when setting same res id to another member]

上级 5c3d6960
...@@ -1589,6 +1589,24 @@ switch_status_t conference_api_sub_get_uuid(conference_member_t *member, switch_ ...@@ -1589,6 +1589,24 @@ switch_status_t conference_api_sub_get_uuid(conference_member_t *member, switch_
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
static void clear_res_id(conference_obj_t *conference, conference_member_t *member, const char *id)
{
conference_member_t *imember;
switch_mutex_lock(conference->member_mutex);
for (imember = conference->members; imember; imember = imember->next) {
if (imember == member) {
continue;
}
if (imember->video_reservation_id && !strcasecmp(imember->video_reservation_id, id)) {
imember->video_reservation_id = NULL;
conference_video_detach_video_layer(imember);
}
}
switch_mutex_unlock(conference->member_mutex);
}
switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switch_stream_handle_t *stream, void *data) switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switch_stream_handle_t *stream, void *data)
{ {
char *text = (char *) data; char *text = (char *) data;
...@@ -1608,12 +1626,18 @@ switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switc ...@@ -1608,12 +1626,18 @@ switch_status_t conference_api_sub_vid_res_id(conference_member_t *member, switc
if (zstr(text) || !strcasecmp(text, "clear") || (member->video_reservation_id && !strcasecmp(text, member->video_reservation_id))) { if (zstr(text) || !strcasecmp(text, "clear") || (member->video_reservation_id && !strcasecmp(text, member->video_reservation_id))) {
member->video_reservation_id = NULL; member->video_reservation_id = NULL;
stream->write_function(stream, "+OK reservation_id cleared\n"); stream->write_function(stream, "+OK reservation_id cleared\n");
conference_video_detach_video_layer(member);
} else { } else {
member->video_reservation_id = switch_core_strdup(member->pool, text); clear_res_id(member->conference, member, text);
if (!member->video_reservation_id || strcmp(member->video_reservation_id, text)) {
member->video_reservation_id = switch_core_strdup(member->pool, text);
}
stream->write_function(stream, "+OK reservation_id %s\n", text); stream->write_function(stream, "+OK reservation_id %s\n", text);
conference_video_detach_video_layer(member); conference_video_detach_video_layer(member);
} }
return SWITCH_STATUS_SUCCESS; return SWITCH_STATUS_SUCCESS;
} }
......
...@@ -2144,11 +2144,13 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr ...@@ -2144,11 +2144,13 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
int j = 0, personal = conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) ? 1 : 0; int j = 0, personal = conference_utils_test_flag(conference, CFLAG_PERSONAL_CANVAS) ? 1 : 0;
if (!personal) { if (!personal) {
switch_mutex_lock(conference->canvas_mutex);
switch_mutex_lock(canvas->mutex); switch_mutex_lock(canvas->mutex);
if (canvas->new_vlayout) { if (canvas->new_vlayout) {
conference_video_init_canvas_layers(conference, canvas, NULL); conference_video_init_canvas_layers(conference, canvas, NULL);
} }
switch_mutex_unlock(canvas->mutex); switch_mutex_unlock(canvas->mutex);
switch_mutex_unlock(conference->canvas_mutex);
} }
if (canvas->video_timer_reset) { if (canvas->video_timer_reset) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论