| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 * | 9 * |
| 10 */ | 10 */ |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 // Copy the entire layer's data (including start codes). | 145 // Copy the entire layer's data (including start codes). |
| 146 memcpy(encoded_image->_buffer + encoded_image->_length, | 146 memcpy(encoded_image->_buffer + encoded_image->_length, |
| 147 layerInfo.pBsBuf, | 147 layerInfo.pBsBuf, |
| 148 layer_len); | 148 layer_len); |
| 149 encoded_image->_length += layer_len; | 149 encoded_image->_length += layer_len; |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 | 152 |
| 153 H264EncoderImpl::H264EncoderImpl() | 153 H264EncoderImpl::H264EncoderImpl() |
| 154 : openh264_encoder_(nullptr), | 154 : openh264_encoder_(nullptr), |
| 155 width_(0), | |
| 156 height_(0), | |
| 157 max_frame_rate_(0.0f), | |
| 158 target_bps_(0), | |
| 159 max_bps_(0), | |
| 160 mode_(kRealtimeVideo), | |
| 161 frame_dropping_on_(false), | |
| 162 key_frame_interval_(0), | |
| 163 number_of_cores_(0), | 155 number_of_cores_(0), |
| 164 encoded_image_callback_(nullptr), | 156 encoded_image_callback_(nullptr), |
| 165 has_reported_init_(false), | 157 has_reported_init_(false), |
| 166 has_reported_error_(false) {} | 158 has_reported_error_(false) {} |
| 167 | 159 |
| 168 H264EncoderImpl::~H264EncoderImpl() { | 160 H264EncoderImpl::~H264EncoderImpl() { |
| 169 Release(); | 161 Release(); |
| 170 } | 162 } |
| 171 | 163 |
| 172 int32_t H264EncoderImpl::InitEncode(const VideoCodec* codec_settings, | 164 int32_t H264EncoderImpl::InitEncode(const VideoCodec* codec_settings, |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 264 encoded_image_buffer_.reset(); | 256 encoded_image_buffer_.reset(); |
| 265 return WEBRTC_VIDEO_CODEC_OK; | 257 return WEBRTC_VIDEO_CODEC_OK; |
| 266 } | 258 } |
| 267 | 259 |
| 268 int32_t H264EncoderImpl::RegisterEncodeCompleteCallback( | 260 int32_t H264EncoderImpl::RegisterEncodeCompleteCallback( |
| 269 EncodedImageCallback* callback) { | 261 EncodedImageCallback* callback) { |
| 270 encoded_image_callback_ = callback; | 262 encoded_image_callback_ = callback; |
| 271 return WEBRTC_VIDEO_CODEC_OK; | 263 return WEBRTC_VIDEO_CODEC_OK; |
| 272 } | 264 } |
| 273 | 265 |
| 274 int32_t H264EncoderImpl::SetRateAllocation( | 266 int32_t H264EncoderImpl::SetRates(uint32_t bitrate, uint32_t framerate) { |
| 275 const BitrateAllocation& bitrate_allocation, | 267 if (bitrate <= 0 || framerate <= 0) { |
| 276 uint32_t framerate) { | |
| 277 if (bitrate_allocation.get_sum_bps() <= 0 || framerate <= 0) | |
| 278 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; | 268 return WEBRTC_VIDEO_CODEC_ERR_PARAMETER; |
| 279 | 269 } |
| 280 target_bps_ = bitrate_allocation.get_sum_bps(); | 270 target_bps_ = bitrate * 1000; |
| 281 max_frame_rate_ = static_cast<float>(framerate); | 271 max_frame_rate_ = static_cast<float>(framerate); |
| 282 quality_scaler_.ReportFramerate(framerate); | 272 quality_scaler_.ReportFramerate(framerate); |
| 283 | 273 |
| 284 SBitrateInfo target_bitrate; | 274 SBitrateInfo target_bitrate; |
| 285 memset(&target_bitrate, 0, sizeof(SBitrateInfo)); | 275 memset(&target_bitrate, 0, sizeof(SBitrateInfo)); |
| 286 target_bitrate.iLayer = SPATIAL_LAYER_ALL, | 276 target_bitrate.iLayer = SPATIAL_LAYER_ALL, |
| 287 target_bitrate.iBitrate = target_bps_; | 277 target_bitrate.iBitrate = target_bps_; |
| 288 openh264_encoder_->SetOption(ENCODER_OPTION_BITRATE, | 278 openh264_encoder_->SetOption(ENCODER_OPTION_BITRATE, |
| 289 &target_bitrate); | 279 &target_bitrate); |
| 290 openh264_encoder_->SetOption(ENCODER_OPTION_FRAME_RATE, &max_frame_rate_); | 280 openh264_encoder_->SetOption(ENCODER_OPTION_FRAME_RATE, &max_frame_rate_); |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 | 486 |
| 497 int32_t H264EncoderImpl::SetPeriodicKeyFrames(bool enable) { | 487 int32_t H264EncoderImpl::SetPeriodicKeyFrames(bool enable) { |
| 498 return WEBRTC_VIDEO_CODEC_OK; | 488 return WEBRTC_VIDEO_CODEC_OK; |
| 499 } | 489 } |
| 500 | 490 |
| 501 void H264EncoderImpl::OnDroppedFrame() { | 491 void H264EncoderImpl::OnDroppedFrame() { |
| 502 quality_scaler_.ReportDroppedFrame(); | 492 quality_scaler_.ReportDroppedFrame(); |
| 503 } | 493 } |
| 504 | 494 |
| 505 } // namespace webrtc | 495 } // namespace webrtc |
| OLD | NEW |