[Core] Fix dereference of null pointer in video_bridge_thread() when codec b is not yet initialized.

This commit is contained in:
Andrey Volk 2020-04-20 21:04:46 +04:00
parent 4589a47324
commit b847935ce2
1 changed files with 7 additions and 7 deletions

View File

@ -175,9 +175,6 @@ static void video_bridge_thread(switch_core_session_t *session, void *obj)
while (switch_channel_up_nosig(channel) && switch_channel_up_nosig(b_channel) && vh->up == 1) {
if (switch_channel_media_up(channel)) {
switch_codec_t *a_codec = switch_core_session_get_video_read_codec(vh->session_a);
switch_codec_t *b_codec = switch_core_session_get_video_write_codec(vh->session_b);
if (switch_core_session_transcoding(vh->session_a, vh->session_b, SWITCH_MEDIA_TYPE_VIDEO)) {
pass_val = 1;
} else {
@ -195,11 +192,14 @@ static void video_bridge_thread(switch_core_session_t *session, void *obj)
}
if (!switch_channel_test_flag(channel, CF_PROXY_MEDIA)) {
switch_assert(a_codec);
switch_assert(b_codec);
switch_codec_implementation_t session_a_codec_implementation;
switch_codec_implementation_t session_b_codec_implementation;
switch_core_session_get_video_read_impl(vh->session_a, &session_a_codec_implementation);
switch_core_session_get_video_write_impl(vh->session_b, &session_b_codec_implementation);
if (switch_channel_test_flag(channel, CF_VIDEO_DECODED_READ)) {
if (a_codec->implementation->impl_id == b_codec->implementation->impl_id && !switch_channel_test_flag(b_channel, CF_VIDEO_DECODED_READ)) {
if (session_a_codec_implementation.impl_id == session_b_codec_implementation.impl_id && !switch_channel_test_flag(b_channel, CF_VIDEO_DECODED_READ)) {
if (set_decoded_read) {
switch_channel_clear_flag_recursive(channel, CF_VIDEO_DECODED_READ);
set_decoded_read = 0;
@ -207,7 +207,7 @@ static void video_bridge_thread(switch_core_session_t *session, void *obj)
}
}
} else {
if (a_codec->implementation->impl_id != b_codec->implementation->impl_id ||
if (session_a_codec_implementation.impl_id != session_b_codec_implementation.impl_id ||
switch_channel_test_flag(b_channel, CF_VIDEO_DECODED_READ)) {
switch_channel_set_flag_recursive(channel, CF_VIDEO_DECODED_READ);
set_decoded_read = 1;