From 29b1a1c0c7c6f4b1ae4d63844b1dfaa7a72530a0 Mon Sep 17 00:00:00 2001 From: Guo-wei Shieh Date: Wed, 8 Apr 2015 09:58:27 -0700 Subject: [PATCH] Fix crash with CVO turned on for VP9 codec CopyCodecSpecific nulls out the rtpheader pointer hence causing the crash downstream. More details about the codec type enums: There are 2 enums defined. webrtc::VideoCodecType webrtc::RtpCodecTypes and they don't match. Inside CopyCodecSpecific in generic_encoder.cc, it was converted from the first to the 2nd type. At that point, it'll be kRtpVideoNone (as the effect of memset to 0). kRtpVideoNone is a bad value as it could cause assert. Later, it'll be reset to kRtpVideoGeneric in RTPSender::SendOutgoingData so it's not a concern. BUG=4511 R=pbos@webrtc.org, pthatcher@webrtc.org, stefan@webrtc.org Review URL: https://webrtc-codereview.appspot.com/47999004 Cr-Commit-Position: refs/heads/master@{#8951} --- .../modules/video_coding/main/source/generic_encoder.cc | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/webrtc/modules/video_coding/main/source/generic_encoder.cc b/webrtc/modules/video_coding/main/source/generic_encoder.cc index 0cc2ec4e8d..17ee4d66b0 100644 --- a/webrtc/modules/video_coding/main/source/generic_encoder.cc +++ b/webrtc/modules/video_coding/main/source/generic_encoder.cc @@ -8,6 +8,7 @@ * be found in the AUTHORS file in the root of the source tree. */ +#include "webrtc/base/checks.h" #include "webrtc/engine_configurations.h" #include "webrtc/modules/video_coding/main/source/encoded_frame.h" #include "webrtc/modules/video_coding/main/source/generic_encoder.h" @@ -20,10 +21,7 @@ namespace { // Map information from info into rtp. If no relevant information is found // in info, rtp is set to NULL. void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader** rtp) { - if (!info) { - *rtp = NULL; - return; - } + DCHECK(info); switch (info->codecType) { case kVideoCodecVP8: { (*rtp)->codec = kRtpVideoVp8; @@ -46,8 +44,6 @@ void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader** rtp) { (*rtp)->simulcastIdx = info->codecSpecific.generic.simulcast_idx; return; default: - // No codec specific info. Change RTP header pointer to NULL. - *rtp = NULL; return; } }