Fixing some case-sensitive codec name comparisons.
As specified in RFC 4288, Section 4.2, and RFC 4855, Section 3, these names should be case-insensitive. They already were being treated as case-insensitive in some other places. This bug was resulting in either a crash or no decoded video, depending on the platform. BUG=webrtc:6439, webrtc:7027 Review-Url: https://codereview.webrtc.org/2782273002 Cr-Commit-Position: refs/heads/master@{#17515}
This commit is contained in:
@ -18,6 +18,7 @@
|
||||
#include "webrtc/base/checks.h"
|
||||
#include "webrtc/base/logging.h"
|
||||
#include "webrtc/base/trace_event.h"
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/modules/video_coding/include/video_codec_interface.h"
|
||||
#include "webrtc/system_wrappers/include/metrics.h"
|
||||
|
||||
@ -50,15 +51,21 @@ const char* GetUmaPrefix(VideoEncoderConfig::ContentType content_type) {
|
||||
|
||||
HistogramCodecType PayloadNameToHistogramCodecType(
|
||||
const std::string& payload_name) {
|
||||
if (payload_name == "VP8") {
|
||||
return kVideoVp8;
|
||||
} else if (payload_name == "VP9") {
|
||||
return kVideoVp9;
|
||||
} else if (payload_name == "H264") {
|
||||
return kVideoH264;
|
||||
} else {
|
||||
rtc::Optional<VideoCodecType> codecType =
|
||||
PayloadNameToCodecType(payload_name);
|
||||
if (!codecType) {
|
||||
return kVideoUnknown;
|
||||
}
|
||||
switch (*codecType) {
|
||||
case kVideoCodecVP8:
|
||||
return kVideoVp8;
|
||||
case kVideoCodecVP9:
|
||||
return kVideoVp9;
|
||||
case kVideoCodecH264:
|
||||
return kVideoH264;
|
||||
default:
|
||||
return kVideoUnknown;
|
||||
}
|
||||
}
|
||||
|
||||
void UpdateCodecTypeHistogram(const std::string& payload_name) {
|
||||
|
||||
@ -21,6 +21,7 @@
|
||||
#include "webrtc/base/logging.h"
|
||||
#include "webrtc/base/optional.h"
|
||||
#include "webrtc/base/trace_event.h"
|
||||
#include "webrtc/common_types.h"
|
||||
#include "webrtc/common_video/h264/profile_level_id.h"
|
||||
#include "webrtc/common_video/libyuv/include/webrtc_libyuv.h"
|
||||
#include "webrtc/modules/rtp_rtcp/include/rtp_receiver.h"
|
||||
@ -142,15 +143,8 @@ VideoCodec CreateDecoderVideoCodec(const VideoReceiveStream::Decoder& decoder) {
|
||||
|
||||
codec.plType = decoder.payload_type;
|
||||
strncpy(codec.plName, decoder.payload_name.c_str(), sizeof(codec.plName));
|
||||
if (decoder.payload_name == "VP8") {
|
||||
codec.codecType = kVideoCodecVP8;
|
||||
} else if (decoder.payload_name == "VP9") {
|
||||
codec.codecType = kVideoCodecVP9;
|
||||
} else if (decoder.payload_name == "H264") {
|
||||
codec.codecType = kVideoCodecH264;
|
||||
} else {
|
||||
codec.codecType = kVideoCodecGeneric;
|
||||
}
|
||||
codec.codecType =
|
||||
PayloadNameToCodecType(decoder.payload_name).value_or(kVideoCodecGeneric);
|
||||
|
||||
if (codec.codecType == kVideoCodecVP8) {
|
||||
*(codec.VP8()) = VideoEncoder::GetDefaultVp8Settings();
|
||||
|
||||
@ -263,9 +263,14 @@ std::string VideoSendStream::StreamStats::ToString() const {
|
||||
namespace {
|
||||
|
||||
bool PayloadTypeSupportsSkippingFecPackets(const std::string& payload_name) {
|
||||
if (payload_name == "VP8" || payload_name == "VP9")
|
||||
rtc::Optional<VideoCodecType> codecType =
|
||||
PayloadNameToCodecType(payload_name);
|
||||
if (codecType &&
|
||||
(*codecType == kVideoCodecVP8 || *codecType == kVideoCodecVP9)) {
|
||||
return true;
|
||||
RTC_DCHECK(payload_name == "H264" || payload_name == "FAKE")
|
||||
}
|
||||
RTC_DCHECK((codecType && *codecType == kVideoCodecH264) ||
|
||||
payload_name == "FAKE")
|
||||
<< "unknown payload_name " << payload_name;
|
||||
return false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user