From ca27f9d5b9d0121d1a38417268fc2316dcd30d49 Mon Sep 17 00:00:00 2001 From: sprang Date: Mon, 31 Oct 2016 03:43:39 -0700 Subject: [PATCH] It seems that if encoder_params.sSpatialLayers[0].sSliceArgument.uiSliceNum is configured to number of cores as determined by openh264 (or any number > 1 in my local tests), frame rate statistics will be mucked up (apparently thousands of frames per second) and quality will bottom out because bits per frame is then very low. BUG=webrtc:6583 Review-Url: https://codereview.webrtc.org/2458673002 Cr-Commit-Position: refs/heads/master@{#14842} --- .../modules/video_coding/codecs/h264/h264_encoder_impl.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc b/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc index f29a4895ff..2070f22890 100644 --- a/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc +++ b/webrtc/modules/video_coding/codecs/h264/h264_encoder_impl.cc @@ -48,6 +48,8 @@ int NumberOfThreads(int width, int height, int number_of_cores) { // } else { // return 1; // 1 thread for VGA or less. // } +// TODO(sprang): Also check sSliceArgument.uiSliceNum om GetEncoderPrams(), +// before enabling multithreading here. return 1; } @@ -445,7 +447,9 @@ SEncParamExt H264EncoderImpl::CreateEncoderParams() const { #else // When uiSliceMode = SM_FIXEDSLCNUM_SLICE, uiSliceNum = 0 means auto design // it with cpu core number. - encoder_params.sSpatialLayers[0].sSliceArgument.uiSliceNum = 0; + // TODO(sprang): Set to 0 when we understand why the rate controller borks + // when uiSliceNum > 1. + encoder_params.sSpatialLayers[0].sSliceArgument.uiSliceNum = 1; encoder_params.sSpatialLayers[0].sSliceArgument.uiSliceMode = SM_FIXEDSLCNUM_SLICE; #endif