Index: webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc |
diff --git a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc |
index d4e1e6e3a06bb2096d51c449bcf8bb162d2de3ee..c21f8f2c4d7e2eeb36fcbe27e6ae0d09c6d83529 100644 |
--- a/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc |
+++ b/webrtc/modules/video_coding/codecs/test/videoprocessor_integrationtest.cc |
@@ -15,9 +15,10 @@ |
#include "webrtc/modules/video_coding/include/video_codec_interface.h" |
#include "webrtc/modules/video_coding/codecs/test/packet_manipulator.h" |
#include "webrtc/modules/video_coding/codecs/test/videoprocessor.h" |
+#include "webrtc/modules/video_coding/codecs/h264/include/h264.h" |
#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" |
-#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
#include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h" |
+#include "webrtc/modules/video_coding/codecs/vp9/include/vp9.h" |
#include "webrtc/modules/video_coding/include/video_coding.h" |
#include "webrtc/test/testsupport/fileutils.h" |
#include "webrtc/test/testsupport/frame_reader.h" |
@@ -151,7 +152,11 @@ class VideoProcessorIntegrationTest : public testing::Test { |
virtual ~VideoProcessorIntegrationTest() {} |
void SetUpCodecConfig() { |
- if (codec_type_ == kVideoCodecVP8) { |
+ if (codec_type_ == kVideoCodecH264) { |
+ encoder_ = H264Encoder::Create(); |
+ decoder_ = H264Decoder::Create(); |
+ VideoCodingModule::Codec(kVideoCodecH264, &codec_settings_); |
+ } else if (codec_type_ == kVideoCodecVP8) { |
encoder_ = VP8Encoder::Create(); |
decoder_ = VP8Decoder::Create(); |
VideoCodingModule::Codec(kVideoCodecVP8, &codec_settings_); |
@@ -185,6 +190,12 @@ class VideoProcessorIntegrationTest : public testing::Test { |
// These features may be set depending on the test. |
switch (config_.codec_settings->codecType) { |
+ case kVideoCodecH264: |
+ config_.codec_settings->codecSpecific.H264.frameDroppingOn = |
+ frame_dropper_on_; |
+ config_.codec_settings->codecSpecific.H264.keyFrameInterval = |
+ kBaseKeyFrameInterval; |
+ break; |
case kVideoCodecVP8: |
config_.codec_settings->codecSpecific.VP8.errorConcealmentOn = |
error_concealment_on_; |
@@ -580,6 +591,37 @@ void SetRateControlMetrics(RateControlMetrics* rc_metrics, |
rc_metrics[update_index].num_key_frames = num_key_frames; |
} |
+#if defined(WEBRTC_THIRD_PARTY_H264) |
+ |
+// H264: Run with no packet loss and fixed bitrate. Quality should be very high. |
+// Note(hbos): The PacketManipulatorImpl code used to simulate packet loss in |
+// these unittests appears to drop "packets" in a way that is not compatible |
+// with H264. Therefore ProcessXPercentPacketLossH264, X != 0, unittests have |
+// not been added. |
+TEST_F(VideoProcessorIntegrationTest, Process0PercentPacketLossH264) { |
+ // Bitrate and frame rate profile. |
+ RateProfile rate_profile; |
+ SetRateProfilePars(&rate_profile, 0, 500, 30, 0); |
+ rate_profile.frame_index_rate_update[1] = kNbrFramesShort + 1; |
+ rate_profile.num_frames = kNbrFramesShort; |
+ // Codec/network settings. |
+ CodecConfigPars process_settings; |
+ SetCodecParameters(&process_settings, kVideoCodecH264, 0.0f, -1, 1, false, |
+ false, true, false); |
+ // Metrics for expected quality. |
+ QualityMetrics quality_metrics; |
+ SetQualityMetrics(&quality_metrics, 35.0, 25.0, 0.93, 0.70); |
+ // Metrics for rate control. |
+ RateControlMetrics rc_metrics[1]; |
+ SetRateControlMetrics(rc_metrics, 0, 2, 60, 20, 10, 20, 0, 1); |
+ ProcessFramesAndVerify(quality_metrics, |
+ rate_profile, |
+ process_settings, |
+ rc_metrics); |
+} |
+ |
+#endif // defined(WEBRTC_THIRD_PARTY_H264) |
+ |
// VP9: Run with no packet loss and fixed bitrate. Quality should be very high. |
// One key frame (first frame only) in sequence. Setting |key_frame_interval| |
// to -1 below means no periodic key frames in test. |