mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-11-11 20:17:05 +00:00
FS-9708 #resolve [RTP timing when doing repacketization]
This commit is contained in:
1 parent
30c84b4bbc
commit
c701ce6173
8 files changed
+904
-722
No files matched your search
@@ -1326,7 +1326,7 @@ void conference_video_write_canvas_image_to_codec_group(conference_obj_t *confer
|
||||
switch_set_flag(frame, SFF_ENCODED);
|
||||
|
||||
if (switch_frame_buffer_dup(imember->fb, frame, &dupframe) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_queue_trypush(imember->mux_out_queue, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_frame_buffer_trypush(imember->fb, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_frame_buffer_free(imember->fb, &dupframe);
|
||||
}
|
||||
dupframe = NULL;
|
||||
@@ -1529,9 +1529,9 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_
|
||||
while(conference_utils_member_test_flag(member, MFLAG_RUNNING)) {
|
||||
|
||||
if (patched) {
|
||||
pop_status = switch_queue_trypop(member->mux_out_queue, &pop);
|
||||
pop_status = switch_frame_buffer_trypop(member->fb, &pop);
|
||||
} else {
|
||||
pop_status = switch_queue_pop(member->mux_out_queue, &pop);
|
||||
pop_status = switch_frame_buffer_pop(member->fb, &pop);
|
||||
}
|
||||
|
||||
if (pop_status == SWITCH_STATUS_SUCCESS) {
|
||||
@@ -1599,7 +1599,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_write_thread_run(switch_thread_
|
||||
}
|
||||
}
|
||||
|
||||
while (switch_queue_trypop(member->mux_out_queue, &pop) == SWITCH_STATUS_SUCCESS) {
|
||||
while (switch_frame_buffer_trypop(member->fb, &pop) == SWITCH_STATUS_SUCCESS) {
|
||||
if (pop) {
|
||||
if ((switch_size_t)pop != 1) {
|
||||
frame = (switch_frame_t *) pop;
|
||||
@@ -2198,7 +2198,7 @@ static void wait_for_canvas(mcu_canvas_t *canvas)
|
||||
|
||||
if (layer->need_patch) {
|
||||
if (layer->member) {
|
||||
switch_queue_trypush(layer->member->mux_out_queue, (void *) 1);
|
||||
switch_frame_buffer_trypush(layer->member->fb, (void *) 1);
|
||||
x++;
|
||||
} else {
|
||||
layer->need_patch = 0;
|
||||
@@ -2949,7 +2949,9 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
|
||||
write_frame.packetlen = 0;
|
||||
|
||||
if (switch_frame_buffer_dup(imember->fb, &write_frame, &dupframe) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_queue_push(imember->mux_out_queue, dupframe);
|
||||
if (switch_frame_buffer_trypush(imember->fb, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_frame_buffer_free(imember->fb, &dupframe);
|
||||
}
|
||||
dupframe = NULL;
|
||||
}
|
||||
}
|
||||
@@ -3139,7 +3141,7 @@ void *SWITCH_THREAD_FUNC conference_video_muxing_thread_run(switch_thread_t *thr
|
||||
//switch_core_session_write_video_frame(imember->session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
|
||||
|
||||
if (switch_frame_buffer_dup(imember->fb, &write_frame, &dupframe) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_queue_trypush(imember->mux_out_queue, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_frame_buffer_trypush(imember->fb, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_frame_buffer_free(imember->fb, &dupframe);
|
||||
}
|
||||
dupframe = NULL;
|
||||
@@ -3487,7 +3489,7 @@ void *SWITCH_THREAD_FUNC conference_video_super_muxing_thread_run(switch_thread_
|
||||
//switch_core_session_write_video_frame(imember->session, &write_frame, SWITCH_IO_FLAG_NONE, 0);
|
||||
|
||||
if (switch_frame_buffer_dup(imember->fb, &write_frame, &dupframe) == SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_queue_trypush(imember->mux_out_queue, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
if (switch_frame_buffer_trypush(imember->fb, dupframe) != SWITCH_STATUS_SUCCESS) {
|
||||
switch_frame_buffer_free(imember->fb, &dupframe);
|
||||
}
|
||||
dupframe = NULL;
|
||||
|
||||
@@ -2297,8 +2297,7 @@ SWITCH_STANDARD_APP(conference_function)
|
||||
|
||||
if (conference->conference_video_mode == CONF_VIDEO_MODE_MUX) {
|
||||
switch_queue_create(&member.video_queue, 200, member.pool);
|
||||
switch_queue_create(&member.mux_out_queue, 500, member.pool);
|
||||
switch_frame_buffer_create(&member.fb);
|
||||
switch_frame_buffer_create(&member.fb, 500);
|
||||
}
|
||||
|
||||
/* Add the caller to the conference */
|
||||
@@ -2349,7 +2348,7 @@ SWITCH_STANDARD_APP(conference_function)
|
||||
|
||||
if (member.video_muxing_write_thread) {
|
||||
switch_status_t st = SWITCH_STATUS_SUCCESS;
|
||||
switch_queue_push(member.mux_out_queue, NULL);
|
||||
switch_frame_buffer_push(member.fb, NULL);
|
||||
switch_thread_join(&st, member.video_muxing_write_thread);
|
||||
member.video_muxing_write_thread = NULL;
|
||||
}
|
||||
|
||||
@@ -750,7 +750,6 @@ struct conference_member {
|
||||
char *kicked_sound;
|
||||
switch_queue_t *dtmf_queue;
|
||||
switch_queue_t *video_queue;
|
||||
switch_queue_t *mux_out_queue;
|
||||
switch_thread_t *video_muxing_write_thread;
|
||||
switch_thread_t *input_thread;
|
||||
cJSON *json;
|
||||
|
||||
Reference in new issue
Block a user