From b8ba1a146958e2c5b262cfdff27c3d1404631dc6 Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Thu, 20 Nov 2014 16:30:19 -0600 Subject: [PATCH] FS-7500: reduce CNG frames on video and move debug from mod_fsv to the core with a flag to enable it since the raw packet is not available anymore when you set DECODED READ flag --- src/include/switch_types.h | 2 ++ src/mod/applications/mod_fsv/mod_fsv.c | 10 +--------- src/mod/codecs/mod_vpx/mod_vpx.c | 9 ++++++--- src/switch_core_media.c | 14 +++++++++++++- src/switch_core_session.c | 1 + src/switch_rtp.c | 11 +++++------ 6 files changed, 28 insertions(+), 19 deletions(-) diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 4c3a0b9b82..6062f3ef4b 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1451,6 +1451,8 @@ typedef enum { CF_HANGUP_HELD, CF_CONFERENCE_RESET_MEDIA, CF_VIDEO_DECODED_READ, + CF_VIDEO_DEBUG_READ, + CF_VIDEO_DEBUG_WRITE, /* WARNING: DO NOT ADD ANY FLAGS BELOW THIS LINE */ /* IF YOU ADD NEW ONES CHECK IF THEY SHOULD PERSIST OR ZERO THEM IN switch_core_session.c switch_core_session_request_xml() */ CF_FLAG_MAX diff --git a/src/mod/applications/mod_fsv/mod_fsv.c b/src/mod/applications/mod_fsv/mod_fsv.c index c544abcaa7..21e1fc4d84 100644 --- a/src/mod/applications/mod_fsv/mod_fsv.c +++ b/src/mod/applications/mod_fsv/mod_fsv.c @@ -723,6 +723,7 @@ static void decode_video_thread(switch_core_session_t *session, void *obj) } switch_channel_set_flag(channel, CF_VIDEO_DECODED_READ); + switch_channel_set_flag(channel, CF_VIDEO_DEBUG_READ); while (switch_channel_ready(channel)) { switch_status_t status = switch_core_session_read_video_frame(session, &frame, SWITCH_IO_FLAG_NONE, 0); @@ -742,15 +743,6 @@ static void decode_video_thread(switch_core_session_t *session, void *obj) continue; } - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "seq: %d ts: %ld len: %4d %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x mark: %d %s\n", - frame->seq, frame->timestamp, frame->datalen, - *((uint8_t *)frame->data), *((uint8_t *)frame->data + 1), - *((uint8_t *)frame->data + 2), *((uint8_t *)frame->data + 3), - *((uint8_t *)frame->data + 4), *((uint8_t *)frame->data + 5), - *((uint8_t *)frame->data + 6), *((uint8_t *)frame->data + 7), - *((uint8_t *)frame->data + 8), *((uint8_t *)frame->data + 9), - *((uint8_t *)frame->data + 10), frame->m, switch_test_flag(frame, SFF_CNG) ? " CNG" : ""); - if (switch_test_flag(frame, SFF_CNG) || frame->datalen < 3) { continue; } diff --git a/src/mod/codecs/mod_vpx/mod_vpx.c b/src/mod/codecs/mod_vpx/mod_vpx.c index 70ee6b4123..77ce0fcb39 100644 --- a/src/mod/codecs/mod_vpx/mod_vpx.c +++ b/src/mod/codecs/mod_vpx/mod_vpx.c @@ -315,16 +315,19 @@ static switch_status_t switch_vpx_init(switch_codec_t *codec, switch_codec_flag_ static switch_status_t consume_partition(vpx_context_t *context, switch_frame_t *frame) { - if (!context->pkt) context->pkt = vpx_codec_get_cx_data(&context->encoder, &context->iter); + if (!context->pkt) { + context->pkt = vpx_codec_get_cx_data(&context->encoder, &context->iter); + context->pkt_pos = 0; + } - if (context->pkt) { + // if (context->pkt) { // if (context->pkt->kind == VPX_CODEC_CX_FRAME_PKT && (context->pkt->data.frame.flags & VPX_FRAME_IS_KEY) && context->pkt_pos == 0) { // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "============================Got a VP8 Key Frame size:[%d]===================================\n", (int)context->pkt->data.frame.sz); // } // switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "size:%d flag: %x part_id: %d pts: %lld duration:%ld\n", // (int)context->pkt->data.frame.sz, context->pkt->data.frame.flags, context->pkt->data.frame.partition_id, context->pkt->data.frame.pts, context->pkt->data.frame.duration); - } + //} if (!context->pkt || context->pkt_pos >= context->pkt->data.frame.sz - 1 || context->pkt->kind != VPX_CODEC_CX_FRAME_PKT) { frame->datalen = 0; diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 1a45579aae..88896f712c 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -1849,7 +1849,7 @@ SWITCH_DECLARE(switch_status_t) switch_core_media_read_frame(switch_core_session switch_channel_execute_on(session->channel, "execute_on_media_timeout"); switch_goto_status(SWITCH_STATUS_SUCCESS, end); } - + switch_channel_hangup(session->channel, SWITCH_CAUSE_MEDIA_TIMEOUT); } @@ -9686,6 +9686,18 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_read_video_frame(switch_core if (!(*frame)) { goto done; } + + if (switch_channel_test_flag(session->channel, CF_VIDEO_DEBUG_READ)) { + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "seq: %d ts: %ld len: %4d %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x mark: %d %s\n", + (*frame)->seq, (*frame)->timestamp, (*frame)->datalen, + *((uint8_t *)(*frame)->data), *((uint8_t *)(*frame)->data + 1), + *((uint8_t *)(*frame)->data + 2), *((uint8_t *)(*frame)->data + 3), + *((uint8_t *)(*frame)->data + 4), *((uint8_t *)(*frame)->data + 5), + *((uint8_t *)(*frame)->data + 6), *((uint8_t *)(*frame)->data + 7), + *((uint8_t *)(*frame)->data + 8), *((uint8_t *)(*frame)->data + 9), + *((uint8_t *)(*frame)->data + 10), (*frame)->m, switch_test_flag((*frame), SFF_CNG) ? " CNG" : ""); + } + if (switch_test_flag(*frame, SFF_CNG)) { status = SWITCH_STATUS_SUCCESS; diff --git a/src/switch_core_session.c b/src/switch_core_session.c index ea5259db1c..96b7bc0e9b 100644 --- a/src/switch_core_session.c +++ b/src/switch_core_session.c @@ -2680,6 +2680,7 @@ SWITCH_DECLARE(void) switch_core_session_video_reset(switch_core_session_t *sess switch_channel_clear_flag(session->channel, CF_VIDEO_ECHO); switch_channel_clear_flag(session->channel, CF_VIDEO_PASSIVE); switch_channel_clear_flag(session->channel, CF_VIDEO_DECODED_READ); + switch_channel_clear_flag(session->channel, CF_VIDEO_DEBUG_READ); switch_core_session_refresh_video(session); session->image_write_callback = NULL; session->image_write_callback_user_data = NULL; diff --git a/src/switch_rtp.c b/src/switch_rtp.c index 924a083dea..31a043dc3d 100644 --- a/src/switch_rtp.c +++ b/src/switch_rtp.c @@ -5578,17 +5578,16 @@ static int rtp_common_read(switch_rtp_t *rtp_session, switch_payload_t *payload_ } if (rtp_session->flags[SWITCH_RTP_FLAG_VIDEO] && !rtp_session->flags[SWITCH_RTP_FLAG_PROXY_MEDIA]) { - pt = 100000; + pt = 200000; } - if (using_ice(rtp_session)) { - pt = 20000; - } + //if (using_ice(rtp_session)) { + // pt = 20000; + //} poll_status = switch_poll(rtp_session->read_pollfd, 1, &fdr, pt); - - if (rtp_session->dtmf_data.out_digit_dur > 0) { + if (!rtp_session->flags[SWITCH_RTP_FLAG_VIDEO] && rtp_session->dtmf_data.out_digit_dur > 0) { return_cng_frame(); }