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}
This commit is contained in:
@ -134,8 +134,8 @@ std::vector<Vp8FrameConfig> DefaultTemporalLayers::GetTemporalPattern(
|
||||
// keyframe.
|
||||
switch (num_layers) {
|
||||
case 1:
|
||||
// All frames reference all buffers and the 'last' buffer is updated.
|
||||
return {Vp8FrameConfig(kReferenceAndUpdate, kReference, kReference)};
|
||||
// Always reference and update the same buffer.
|
||||
return {Vp8FrameConfig(kReferenceAndUpdate, kNone, kNone)};
|
||||
case 2:
|
||||
// All layers can reference but not update the 'alt' buffer, this means
|
||||
// that the 'alt' buffer reference is effectively the last keyframe.
|
||||
|
||||
Reference in New Issue
Block a user