webrtc/modules/video_coding
Elad Alon 4bfbb01e84 Improve CPU utilization when encoding VP8 with a single temporal layer
Prior to this CL, when software VP8 encoding was done with one temporal
layer, instead of only predicting from the latest frame, the code
allowed the encoder to reference the latest key frame as well.
This improves quality for the few frames immediately after
the key frame, but is not useful for later frames, which diverge
significantly from the key frame. However, the cost of producing
the prediction from more than one reference is incurred by all frames.
My measurements of the effect of this show an improvement
in CPU utilization of 5%-13% when this is not done.

foreman_352x288, 30fps, target bitrate 500kps
Pre-change:
send_enc_speed_fps: avg(566.187, 570.012, 575.665) = 570.621
send_avg_qp: 45.36
send_avg_psnr: 37.13
Post-change:
send_enc_speed_fps: avg(633.188, 604.694, 623.232) = 620.371
send_avg_qp: 45.88
send_avg_psnr: 37.0749
Improvement in send_enc_speed_fps: 8.71%

foreman_480x272, 30fps, target bitrate 500kps
Pre-change:
send_enc_speed_fps: avg(481.244, 486.971, 487.322) = 485.179
send_avg_qp: 48.9
send_avg_psnr: 37.6217
Post-change:
send_enc_speed_fps: avg(521.651, 499.416, 511.551) = 510.872
send_avg_qp: 48.88
send_avg_psnr: 37.6094
Improvement in send_enc_speed_fps: 5.29%

news_352x288, 30fps, target bitrate 500kps
Pre-change:
send_enc_speed_fps: avg(699.407, 697.837, 699.49) = 698.9113333
send_avg_qp: 24.15
send_avg_psnr: 40.9551
Post-change:
send_enc_speed_fps: avg(758.526, 768.104, 757.232) = 761.2873333
send_avg_qp: 23.9833
send_avg_psnr: 40.9697
Improvement in send_enc_speed_fps: 8.92%

Bridge_180x320_15 (video of brandtr@ from Google), 15fps, target bitrate 500kps
Pre-change:
send_enc_speed_fps: avg(454.757, 450.399, 446.812) = 450.656
send_avg_qp: 17.6771
send_avg_psnr: 39.9267
Post-change:
send_enc_speed_fps: avg(500.014, 513.316, 513.613) = 508.981
send_avg_qp: 17.6837
send_avg_psnr: 39.9137
Improvement in send_enc_speed_fps: 12.94%

Bug: webrtc:10281
Change-Id: If02736e1535c5f46689fd42b657e35a1e1f64d6d
Reviewed-on: https://webrtc-review.googlesource.com/c/120904
Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Elad Alon <eladalon@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#26511}
2019-02-01 14:11:38 +00:00
..
codecs Improve CPU utilization when encoding VP8 with a single temporal layer 2019-02-01 14:11:38 +00:00
include Pass explicit frame dependency information to RtpPayloadParams 2019-01-29 08:59:48 +00:00
test (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
utility Stop using Googletest legacy APIs. 2019-01-31 13:23:33 +00:00
BUILD.gn Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
codec_timer.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
codec_timer.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
decoder_database.cc Remove kVideoCodecUnknown from WebRTC. 2018-08-16 15:15:39 +00:00
decoder_database.h Refactoring PayloadRouter. 2018-07-17 14:46:15 +00:00
decoding_state.cc Add accessor methods for RTP timestamp of EncodedImage. 2018-08-21 09:15:51 +00:00
decoding_state.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
decoding_state_unittest.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
DEPS Prepare VideoProcessor for async simulcast support. 2018-03-08 17:41:13 +00:00
encoded_frame.cc Rename EncodedImage::_buffer --> buffer_, and make private 2019-01-17 12:38:15 +00:00
encoded_frame.h Delete VCMEncodedFrame methods Buffer and MutableBuffer 2019-01-11 10:10:12 +00:00
encoder_database.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
encoder_database.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
fec_controller_default.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
fec_controller_default.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
fec_controller_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
fec_rate_table.h Fixing WebRTC after moving from src/webrtc to src/ 2017-09-15 05:02:56 +00:00
frame_buffer.cc Rename EncodedImage::_buffer --> buffer_, and make private 2019-01-17 12:38:15 +00:00
frame_buffer.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
frame_buffer2.cc Update jitter delay on per-superframe level from FrameBuffer 2019-01-18 13:36:07 +00:00
frame_buffer2.h Avoid repeated semi-expensive field_trials read in frame_buffer2.cc 2019-01-15 12:12:01 +00:00
frame_buffer2_unittest.cc Rename EncodedImage::_length --> size_, and make private. 2019-01-16 07:40:47 +00:00
frame_object.cc Rename EncodedImage::_buffer --> buffer_, and make private 2019-01-17 12:38:15 +00:00
frame_object.h Rename EncodedImage::_length --> size_, and make private. 2019-01-16 07:40:47 +00:00
generic_decoder.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
generic_decoder.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
generic_encoder.cc Rename EncodedImage::_length --> size_, and make private. 2019-01-16 07:40:47 +00:00
generic_encoder.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
generic_encoder_unittest.cc Rename EncodedImage::_length --> size_, and make private. 2019-01-16 07:40:47 +00:00
h264_sprop_parameter_sets.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
h264_sprop_parameter_sets.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
h264_sprop_parameter_sets_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
h264_sps_pps_tracker.cc Remove clang:find_bad_constructs suppression from call:call. 2018-08-29 11:57:00 +00:00
h264_sps_pps_tracker.h Remove clang:find_bad_constructs suppression from call:call. 2018-08-29 11:57:00 +00:00
h264_sps_pps_tracker_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
histogram.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
histogram.h Fixing WebRTC after moving from src/webrtc to src/ 2017-09-15 05:02:56 +00:00
histogram_unittest.cc Fixing WebRTC after moving from src/webrtc to src/ 2017-09-15 05:02:56 +00:00
inter_frame_delay.cc Fixing WebRTC after moving from src/webrtc to src/ 2017-09-15 05:02:56 +00:00
inter_frame_delay.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
internal_defines.h Remove unused defines and methods in internal_defines.h 2019-01-28 10:31:40 +00:00
jitter_buffer.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
jitter_buffer.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
jitter_buffer_common.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
jitter_buffer_unittest.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
jitter_estimator.cc Removes all const Clock*. 2019-01-30 13:03:37 +00:00
jitter_estimator.h Removes all const Clock*. 2019-01-30 13:03:37 +00:00
jitter_estimator_tests.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
media_opt_util.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
media_opt_util.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
nack_fec_tables.h Fixing WebRTC after moving from src/webrtc to src/ 2017-09-15 05:02:56 +00:00
nack_module.cc Adds a field trial parameter to configure waiting time before sending Nack packets. 2018-11-02 14:56:52 +00:00
nack_module.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
nack_module_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
OWNERS Make ilnik@ owner in video/ and modules/video_coding/ 2018-09-11 12:39:39 +00:00
packet.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
packet.h [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
packet_buffer.cc (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
packet_buffer.h Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
receiver.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
receiver.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
receiver_unittest.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
rtp_frame_reference_finder.cc Set inter_pic_predicted video codec flag in vp9 encoder correctly 2019-01-18 11:31:43 +00:00
rtp_frame_reference_finder.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
rtp_frame_reference_finder_unittest.cc Set inter_pic_predicted video codec flag in vp9 encoder correctly 2019-01-18 11:31:43 +00:00
rtt_filter.cc Fix typo in VCMRttFilter 2018-01-26 10:59:56 +00:00
rtt_filter.h Delete root header file typedef.h. 2018-07-25 14:59:26 +00:00
session_info.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
session_info.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
session_info_unittest.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
timestamp_map.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
timestamp_map.h Remove unimplemented function declarations VCMGenericDecoder::External and VCMTimestampMap::Reset. 2018-09-06 09:05:30 +00:00
timing.cc [Cleanup] Add missing #include. Remove useless ones. IWYU part 2. 2018-11-28 18:25:07 +00:00
timing.h (4) Rename files to snake_case: update BUILD.gn, include paths, header guards, and DEPS entries 2019-01-11 17:11:39 +00:00
timing_unittest.cc Remove unused functions in VCMTiming. 2018-01-17 14:47:10 +00:00
video_codec_initializer.cc Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
video_codec_initializer_unittest.cc Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
video_coding_defines.cc Fix chromium warnings for SdpVideoFormat. 2018-03-27 08:11:21 +00:00
video_coding_impl.cc [clang-tidy] Apply modernize-use-override fixes. 2019-01-30 09:26:17 +00:00
video_coding_impl.h Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
video_packet_buffer_unittest.cc Stop using Googletest legacy APIs. 2019-01-31 13:23:33 +00:00
video_receiver.cc Delete all logic related to VCMDecodeErrorMode 2019-01-16 15:41:07 +00:00
video_receiver_unittest.cc Minor changes to TestVideoReceiver. 2019-01-10 08:15:28 +00:00
video_sender.cc Remove rtc_base/scoped_ref_ptr.h. 2019-01-25 20:29:58 +00:00
video_sender_unittest.cc Rename EncodedImage::_length --> size_, and make private. 2019-01-16 07:40:47 +00:00