Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(119)

Side by Side Diff: webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_encoder.cc

Issue 2177873003: iOS HW encoder: Increase data rate limit (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 10 matching lines...) Expand all
21 #include "RTCUIApplication.h" 21 #include "RTCUIApplication.h"
22 #endif 22 #endif
23 #include "libyuv/convert_from.h" 23 #include "libyuv/convert_from.h"
24 #include "webrtc/base/checks.h" 24 #include "webrtc/base/checks.h"
25 #include "webrtc/base/logging.h" 25 #include "webrtc/base/logging.h"
26 #include "webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_nalu.h" 26 #include "webrtc/modules/video_coding/codecs/h264/h264_video_toolbox_nalu.h"
27 #include "webrtc/system_wrappers/include/clock.h" 27 #include "webrtc/system_wrappers/include/clock.h"
28 28
29 namespace internal { 29 namespace internal {
30 30
31 // The ratio between kVTCompressionPropertyKey_DataRateLimits and
32 // kVTCompressionPropertyKey_AverageBitRate. The data rate limit is set higher
33 // than the average bit rate to avoid undershooting the target.
34 const float kLimitToAverageBitRateFactor = 1.5f;
35
31 // Convenience function for creating a dictionary. 36 // Convenience function for creating a dictionary.
32 inline CFDictionaryRef CreateCFDictionary(CFTypeRef* keys, 37 inline CFDictionaryRef CreateCFDictionary(CFTypeRef* keys,
33 CFTypeRef* values, 38 CFTypeRef* values,
34 size_t size) { 39 size_t size) {
35 return CFDictionaryCreate(kCFAllocatorDefault, keys, values, size, 40 return CFDictionaryCreate(kCFAllocatorDefault, keys, values, size,
36 &kCFTypeDictionaryKeyCallBacks, 41 &kCFTypeDictionaryKeyCallBacks,
37 &kCFTypeDictionaryValueCallBacks); 42 &kCFTypeDictionaryValueCallBacks);
38 } 43 }
39 44
40 // Copies characters from a CFStringRef into a std::string. 45 // Copies characters from a CFStringRef into a std::string.
(...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 } 517 }
513 } 518 }
514 519
515 void H264VideoToolboxEncoder::SetEncoderBitrateBps(uint32_t bitrate_bps) { 520 void H264VideoToolboxEncoder::SetEncoderBitrateBps(uint32_t bitrate_bps) {
516 if (compression_session_) { 521 if (compression_session_) {
517 internal::SetVTSessionProperty(compression_session_, 522 internal::SetVTSessionProperty(compression_session_,
518 kVTCompressionPropertyKey_AverageBitRate, 523 kVTCompressionPropertyKey_AverageBitRate,
519 bitrate_bps); 524 bitrate_bps);
520 525
521 // TODO(tkchin): Add a helper method to set array value. 526 // TODO(tkchin): Add a helper method to set array value.
522 int64_t bytes_per_second_value = bitrate_bps / 8; 527 int64_t data_limit_bytes_per_second_value = static_cast<int64_t>(
528 bitrate_bps * internal::kLimitToAverageBitRateFactor / 8);
523 CFNumberRef bytes_per_second = 529 CFNumberRef bytes_per_second =
524 CFNumberCreate(kCFAllocatorDefault, 530 CFNumberCreate(kCFAllocatorDefault,
525 kCFNumberSInt64Type, 531 kCFNumberSInt64Type,
526 &bytes_per_second_value); 532 &data_limit_bytes_per_second_value);
527 int64_t one_second_value = 1; 533 int64_t one_second_value = 1;
528 CFNumberRef one_second = 534 CFNumberRef one_second =
529 CFNumberCreate(kCFAllocatorDefault, 535 CFNumberCreate(kCFAllocatorDefault,
530 kCFNumberSInt64Type, 536 kCFNumberSInt64Type,
531 &one_second_value); 537 &one_second_value);
532 const void* nums[2] = { bytes_per_second, one_second }; 538 const void* nums[2] = { bytes_per_second, one_second };
533 CFArrayRef data_rate_limits = 539 CFArrayRef data_rate_limits =
534 CFArrayCreate(nullptr, nums, 2, &kCFTypeArrayCallBacks); 540 CFArrayCreate(nullptr, nums, 2, &kCFTypeArrayCallBacks);
535 OSStatus status = 541 OSStatus status =
536 VTSessionSetProperty(compression_session_, 542 VTSessionSetProperty(compression_session_,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 if (result != 0) { 628 if (result != 0) {
623 LOG(LS_ERROR) << "Encode callback failed: " << result; 629 LOG(LS_ERROR) << "Encode callback failed: " << result;
624 return; 630 return;
625 } 631 }
626 bitrate_adjuster_.Update(frame._size); 632 bitrate_adjuster_.Update(frame._size);
627 } 633 }
628 634
629 } // namespace webrtc 635 } // namespace webrtc
630 636
631 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 637 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED)
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698