diff --git a/src/include/switch_types.h b/src/include/switch_types.h index 93071b8406..bc544a3426 100644 --- a/src/include/switch_types.h +++ b/src/include/switch_types.h @@ -1498,7 +1498,8 @@ typedef enum { SFF_WAIT_KEY_FRAME = (1 << 12), SFF_RAW_RTP_PARSE_FRAME = (1 << 13), SFF_PICTURE_RESET = (1 << 14), - SFF_SAME_IMAGE = (1 << 15) + SFF_SAME_IMAGE = (1 << 15), + SFF_USE_VIDEO_TIMESTAMP = (1 << 16) } switch_frame_flag_enum_t; typedef uint32_t switch_frame_flag_t; diff --git a/src/mod/codecs/mod_openh264/mod_openh264.cpp b/src/mod/codecs/mod_openh264/mod_openh264.cpp index b561eb2466..7d2deb8f3d 100644 --- a/src/mod/codecs/mod_openh264/mod_openh264.cpp +++ b/src/mod/codecs/mod_openh264/mod_openh264.cpp @@ -553,7 +553,9 @@ end: switch_set_flag(frame, SFF_WAIT_KEY_FRAME); } - if (!frame->img) { + if (frame->img) { + switch_set_flag(frame, SFF_USE_VIDEO_TIMESTAMP); + } else { status = SWITCH_STATUS_MORE_DATA; } diff --git a/src/mod/codecs/mod_vpx/mod_vpx.c b/src/mod/codecs/mod_vpx/mod_vpx.c index 7806ecfe46..ee7f7f63f7 100644 --- a/src/mod/codecs/mod_vpx/mod_vpx.c +++ b/src/mod/codecs/mod_vpx/mod_vpx.c @@ -553,7 +553,9 @@ end: switch_buffer_zero(context->vpx_packet_buffer); } - if (!frame->img) { + if (frame->img) { + switch_set_flag(frame, SFF_USE_VIDEO_TIMESTAMP); + } else { status = SWITCH_STATUS_MORE_DATA; } diff --git a/src/switch_core_media.c b/src/switch_core_media.c index 2df5d3b5ec..0a3866f580 100644 --- a/src/switch_core_media.c +++ b/src/switch_core_media.c @@ -4597,8 +4597,6 @@ SWITCH_DECLARE(void) switch_core_media_end_video_function(switch_core_session_t } } - ->>>>>>> another refactoring pass, temp code still in place, WORK IN PROGRESS //? #define RA_PTR_LEN 512 SWITCH_DECLARE(switch_status_t) switch_core_media_proxy_remote_addr(switch_core_session_t *session, const char *sdp_str) @@ -9589,17 +9587,21 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_write_video_frame(switch_cor return raw_write_video(session, frame, flags, stream_id); } - if (!(timer = switch_core_media_get_timer(session, SWITCH_MEDIA_TYPE_VIDEO))) { + if (!switch_test_flag(frame, SFF_USE_VIDEO_TIMESTAMP)) { - if (!smh->video_timer.timer_interface) { - switch_core_timer_init(&smh->video_timer, "soft", 1, 90, switch_core_session_get_pool(session)); + if (!(timer = switch_core_media_get_timer(session, SWITCH_MEDIA_TYPE_VIDEO))) { + + if (!smh->video_timer.timer_interface) { + switch_core_timer_init(&smh->video_timer, "soft", 1, 90, switch_core_session_get_pool(session)); + } + + timer = &smh->video_timer; } - timer = &smh->video_timer; + frame->timestamp = timer->samplecount; } - frame->timestamp = timer->samplecount; - frame->flags &= ~SFF_SAME_IMAGE; + switch_clear_flag(frame, SFF_SAME_IMAGE); do { frame->datalen = SWITCH_DEFAULT_VIDEO_SIZE;