FS-8909 FS-8914

This commit is contained in:
Anthony Minessale 2016-03-10 13:58:42 -06:00
parent c90bed79f3
commit bf30ad3194
2 changed files with 30 additions and 25 deletions

View File

@ -593,10 +593,6 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "video thread start\n");
if (eh->mm->fps) {
hard_delta = 1000 / eh->mm->fps;
}
for(;;) {
AVPacket pkt = { 0 };
int got_packet;
@ -604,6 +600,10 @@ static void *SWITCH_THREAD_FUNC video_thread_run(switch_thread_t *thread, void *
top:
if (eh->mm->fps) {
hard_delta = 1000 / eh->mm->fps;
}
if (switch_queue_pop(eh->video_queue, &pop) == SWITCH_STATUS_SUCCESS) {
switch_img_free(&img);

View File

@ -72,6 +72,7 @@ typedef struct core_video_globals_s {
switch_memory_pool_t *pool;
switch_mutex_t *mutex;
uint32_t fps;
uint32_t synced;
} core_video_globals_t;
static core_video_globals_t video_globals = { 0 };
@ -356,11 +357,21 @@ SWITCH_DECLARE(uint32_t) switch_core_media_get_video_fps(switch_core_session_t *
return 0;
}
fps = switch_round_to_step(smh->vid_frames / (now - smh->vid_started), 5);
if (fps < 15) fps = 15;
fps = switch_round_to_step(smh->vid_frames / (now - smh->vid_started), 5);
smh->vid_started = switch_epoch_time_now(NULL);
smh->vid_frames = 1;
if (smh->vid_frames > 1000) {
smh->vid_started = switch_epoch_time_now(NULL);
smh->vid_frames = 1;
}
if (fps > 0) {
video_globals.fps = fps;
if (smh->vid_params.fps != fps) {
switch_channel_set_variable_printf(session->channel, "video_fps", "%d", fps);
smh->vid_params.fps = fps;
}
}
return fps;
}
@ -2011,14 +2022,8 @@ static void check_jb_sync(switch_core_session_t *session)
}
}
if (smh->vid_frames < 10) {
fps = 30;
} else {
fps = switch_core_media_get_video_fps(session);
}
fps = switch_core_media_get_video_fps(session);
if (fps < 15) return;
switch_rtp_get_video_buffer_size(v_engine->rtp_session, &min_frames, &max_frames, &cur_frames, NULL);
if (!frames) {
@ -2042,15 +2047,6 @@ static void check_jb_sync(switch_core_session_t *session)
sync_video = 1;
}
if (fps) {
video_globals.fps = fps;
if (smh->vid_params.fps != fps) {
switch_channel_set_variable_printf(session->channel, "video_fps", "%d", fps);
smh->vid_params.fps = fps;
}
}
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),
SWITCH_LOG_DEBUG1, "%s %s \"%s\" Sync A/V JB to %dms %u VFrames FPS %u a:%s v:%s\n",
switch_core_session_get_uuid(session),
@ -2061,6 +2057,8 @@ static void check_jb_sync(switch_core_session_t *session)
if (sync_audio) {
check_jb(session, NULL, jb_sync_msec, 0, SWITCH_TRUE);
}
video_globals.synced++;
}
@ -2182,11 +2180,16 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session
}
if (type == SWITCH_MEDIA_TYPE_VIDEO && engine->read_frame.m) {
if (!smh->vid_started) {
smh->vid_started = switch_epoch_time_now(NULL);
}
smh->vid_frames++;
if ((smh->vid_frames % 15) == 0) {
switch_core_media_get_video_fps(session);
}
if (smh->vid_frames == 1 || ((smh->vid_frames % 300) == 0)) {
check_jb_sync(session);
}
@ -5383,6 +5386,7 @@ static void *SWITCH_THREAD_FUNC video_helper_thread(switch_thread_t *thread, voi
if (switch_channel_test_flag(channel, CF_VIDEO_READY) && !switch_test_flag(read_frame, SFF_CNG)) {
switch_mutex_lock(mh->file_read_mutex);
if (smh->video_read_fh && switch_test_flag(smh->video_read_fh, SWITCH_FILE_OPEN) && read_frame->img) {
smh->video_read_fh->mm.fps = smh->vid_params.fps;
switch_core_file_write_video(smh->video_read_fh, read_frame);
}
switch_mutex_unlock(mh->file_read_mutex);
@ -11201,7 +11205,8 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_wait_for_video_input_params(
switch_frame_t *read_frame;
switch_status_t status;
if (switch_channel_test_flag(session->channel, CF_VIDEO_READY) && smh->vid_params.width && smh->vid_params.height && smh->vid_params.fps) {
if (video_globals.synced &&
switch_channel_test_flag(session->channel, CF_VIDEO_READY) && smh->vid_params.width && smh->vid_params.height && smh->vid_params.fps) {
return SWITCH_STATUS_SUCCESS;
}