mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-10-19 01:34:13 +00:00
FS-9000 tweaks
This commit is contained in:
1 parent
86965a363d
commit
48dcab82d7
5 files changed
+115
-19
No files matched your search
@@ -658,29 +658,37 @@ switch_status_t conference_api_sub_kick(conference_member_t *member, switch_stre
|
||||
|
||||
switch_status_t conference_api_sub_vid_flip(conference_member_t *member, switch_stream_handle_t *stream, void *data)
|
||||
{
|
||||
switch_event_t *event;
|
||||
char *arg = (char *) data;
|
||||
|
||||
if (member == NULL) {
|
||||
return SWITCH_STATUS_GENERR;
|
||||
}
|
||||
|
||||
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO)) {
|
||||
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO) && !arg) {
|
||||
conference_utils_member_clear_flag_locked(member, MFLAG_FLIP_VIDEO);
|
||||
conference_utils_member_clear_flag_locked(member, MFLAG_ROTATE_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;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
member->flip = 180;
|
||||
}
|
||||
}
|
||||
|
||||
if (stream != NULL) {
|
||||
stream->write_function(stream, "OK flipped %u\n", member->id);
|
||||
}
|
||||
|
||||
if (member->conference && test_eflag(member->conference, EFLAG_KICK_MEMBER)) {
|
||||
if (switch_event_create_subclass(&event, SWITCH_EVENT_CUSTOM, CONF_EVENT_MAINT) == SWITCH_STATUS_SUCCESS) {
|
||||
conference_member_add_event_data(member, event);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Action", "vid-flip-member");
|
||||
switch_event_fire(&event);
|
||||
}
|
||||
}
|
||||
|
||||
return SWITCH_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -499,6 +499,7 @@ void conference_video_scale_and_patch(mcu_layer_t *layer, switch_image_t *ximg,
|
||||
switch_img_fit(&layer->logo_img, ew, eh, layer->logo_fit);
|
||||
|
||||
switch_img_find_position(layer->logo_pos, ew, eh, layer->logo_img->d_w, layer->logo_img->d_h, &ex, &ey);
|
||||
|
||||
switch_img_patch(IMG, layer->logo_img, layer->x_pos + ex + layer->geometry.border, layer->y_pos + ey + layer->geometry.border);
|
||||
if (layer->logo_text_img) {
|
||||
int tx = 0, ty = 0;
|
||||
@@ -3728,12 +3729,26 @@ switch_status_t conference_video_thread_callback(switch_core_session_t *session,
|
||||
conference_utils_member_test_flag(member, MFLAG_CAN_BE_SEEN) &&
|
||||
switch_queue_size(member->video_queue) < member->conference->video_fps.fps * 2 &&
|
||||
!member->conference->playing_video_file) {
|
||||
switch_img_copy(frame->img, &img_copy);
|
||||
|
||||
if (conference_utils_member_test_flag(member, MFLAG_FLIP_VIDEO)) {
|
||||
switch_img_flip(img_copy);
|
||||
}
|
||||
|
||||
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_ROTATE_VIDEO)) {
|
||||
if (member->flip_count++ > (int)(member->conference->video_fps.fps / 2)) {
|
||||
member->flip += 90;
|
||||
if (member->flip > 270) {
|
||||
member->flip = 0;
|
||||
}
|
||||
member->flip_count = 0;
|
||||
}
|
||||
|
||||
switch_img_rotate_copy(frame->img, &img_copy, member->flip);
|
||||
} else {
|
||||
switch_img_rotate_copy(frame->img, &img_copy, member->flip);
|
||||
}
|
||||
|
||||
} else {
|
||||
switch_img_copy(frame->img, &img_copy);
|
||||
}
|
||||
|
||||
if (switch_queue_trypush(member->video_queue, img_copy) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_img_free(&img_copy);
|
||||
}
|
||||
|
||||
@@ -209,6 +209,7 @@ typedef enum {
|
||||
MFLAG_SECOND_SCREEN,
|
||||
MFLAG_SILENT,
|
||||
MFLAG_FLIP_VIDEO,
|
||||
MFLAG_ROTATE_VIDEO,
|
||||
///////////////////////////
|
||||
MFLAG_MAX
|
||||
} member_flag_t;
|
||||
@@ -780,6 +781,8 @@ struct conference_member {
|
||||
int force_bw_in;
|
||||
int max_bw_out;
|
||||
int reset_media;
|
||||
int flip;
|
||||
int flip_count;
|
||||
};
|
||||
|
||||
typedef enum {
|
||||
|
||||
Reference in new issue
Block a user