New equality operators, for structs related to webrtc::VideoCodec.
Added for the structs VideoCodecVP8, VideoCodecVP9, VideoCodecH264, and SpatialLayer. New operators are used to replace memcmp in VCMEncoderDataBase. Using memcmp to compare structs is generally unreliable, since the struct may contain random padding bytes due to alignment requirements (affects at least VideoCodecH264). And in the case of VideoCodecVP8, we need to exclude the tl_factory pointers from the comparison. Bug: webrtc:8830 Change-Id: I40432ea7834e288f8c89ce0a28a630ae1800dff8 Reviewed-on: https://webrtc-review.googlesource.com/62761 Commit-Queue: Niels Moller <nisse@webrtc.org> Reviewed-by: Karl Wiberg <kwiberg@webrtc.org> Reviewed-by: Rasmus Brandt <brandtr@webrtc.org> Cr-Commit-Position: refs/heads/master@{#22500}
This commit is contained in:
@ -138,23 +138,23 @@ bool VCMEncoderDataBase::RequiresEncoderReset(
|
||||
|
||||
switch (new_send_codec.codecType) {
|
||||
case kVideoCodecVP8:
|
||||
if (memcmp(&new_send_codec.VP8(), send_codec_.VP8(),
|
||||
sizeof(new_send_codec.VP8())) != 0) {
|
||||
if (new_send_codec.VP8() != *send_codec_.VP8()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case kVideoCodecVP9:
|
||||
if (memcmp(&new_send_codec.VP9(), send_codec_.VP9(),
|
||||
sizeof(new_send_codec.VP9())) != 0) {
|
||||
if (new_send_codec.VP9() != *send_codec_.VP9()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case kVideoCodecH264:
|
||||
if (memcmp(&new_send_codec.H264(), send_codec_.H264(),
|
||||
sizeof(new_send_codec.H264())) != 0) {
|
||||
if (new_send_codec.H264() != *send_codec_.H264()) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
case kVideoCodecGeneric:
|
||||
break;
|
||||
// Known codecs without payload-specifics
|
||||
@ -169,15 +169,9 @@ bool VCMEncoderDataBase::RequiresEncoderReset(
|
||||
return true;
|
||||
}
|
||||
|
||||
if (new_send_codec.numberOfSimulcastStreams > 0) {
|
||||
for (unsigned char i = 0; i < new_send_codec.numberOfSimulcastStreams;
|
||||
++i) {
|
||||
if (memcmp(&new_send_codec.simulcastStream[i],
|
||||
&send_codec_.simulcastStream[i],
|
||||
sizeof(new_send_codec.simulcastStream[i])) != 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
for (unsigned char i = 0; i < new_send_codec.numberOfSimulcastStreams; ++i) {
|
||||
if (new_send_codec.simulcastStream[i] != send_codec_.simulcastStream[i])
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user