FS-11021: [mod_conference] Add video mirror #resolve

This commit is contained in:
Anthony Minessale
2018-03-09 16:05:24 -06:00
parent 4d34858790
commit 4a9c5c3105
5 changed files with 73 additions and 13 deletions
@@ -747,24 +747,34 @@ switch_status_t conference_api_sub_vid_flip(conference_member_t *member, switch_
return SWITCH_STATUS_GENERR;
}
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO) && !arg) {
if ((conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO) || conference_utils_member_test_flag(member, MFLAG_MIRROR_VIDEO)) && !arg) {
conference_utils_member_clear_flag_locked(member, MFLAG_FLIP_VIDEO);
conference_utils_member_clear_flag_locked(member, MFLAG_ROTATE_VIDEO);
conference_utils_member_clear_flag_locked(member, MFLAG_MIRROR_VIDEO);
} else {
conference_utils_member_set_flag_locked(member, MFLAG_FLIP_VIDEO);
if (arg) {
if (!strcasecmp(arg, "rotate")) {
conference_utils_member_set_flag_locked(member, MFLAG_ROTATE_VIDEO);
} else if (switch_is_number(arg)) {
int num = atoi(arg);
if (num == 0 || num == 90 || num == 180 || num == 270) {
member->flip = num;
}
if (arg && !strcasecmp(arg, "mirror")) {
if (conference_utils_member_test_flag(member, MFLAG_MIRROR_VIDEO)) {
conference_utils_member_clear_flag_locked(member, MFLAG_MIRROR_VIDEO);
} else {
conference_utils_member_set_flag_locked(member, MFLAG_MIRROR_VIDEO);
}
} else {
member->flip = 180;
conference_utils_member_set_flag_locked(member, MFLAG_FLIP_VIDEO);
if (arg) {
if (!strcasecmp(arg, "rotate")) {
conference_utils_member_set_flag_locked(member, MFLAG_ROTATE_VIDEO);
} else if (switch_is_number(arg)) {
int num = atoi(arg);
if (num == 0 || num == 90 || num == 180 || num == 270) {
member->flip = num;
}
}
} else {
member->flip = 180;
}
}
}
@@ -4872,7 +4872,8 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
switch_queue_size(member->video_queue) < member->conference->video_fps.fps &&
!member->conference->canvases[canvas_id]->playing_video_file) {
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO) || conference_utils_member_test_flag(member, MFLAG_ROTATE_VIDEO)) {
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO) ||
conference_utils_member_test_flag(member, MFLAG_ROTATE_VIDEO) || conference_utils_member_test_flag(member, MFLAG_MIRROR_VIDEO)) {
if (conference_utils_member_test_flag(member, MFLAG_ROTATE_VIDEO)) {
if (member->flip_count++ > (int)(member->conference->video_fps.fps / 2)) {
member->flip += 90;
@@ -4883,6 +4884,8 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
}
switch_img_rotate_copy(frame->img, &img_copy, member->flip);
} else if (conference_utils_member_test_flag(member, MFLAG_MIRROR_VIDEO)) {
switch_img_mirror(frame->img, &img_copy);
} else {
switch_img_rotate_copy(frame->img, &img_copy, member->flip);
}
@@ -213,6 +213,7 @@ typedef enum {
MFLAG_SILENT,
MFLAG_FLIP_VIDEO,
MFLAG_ROTATE_VIDEO,
MFLAG_MIRROR_VIDEO,
MFLAG_INDICATE_DEAF,
MFLAG_INDICATE_UNDEAF,
MFLAG_TALK_DATA_EVENTS,