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

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

Issue 1660963002: Bitrate controller for VideoToolbox encoder. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: CR comments Created 4 years, 10 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
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 */
11 11
12 #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_ 12 #ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_
13 #define WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_ 13 #define WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_
14 14
15 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" 15 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h"
16 #include "webrtc/modules/video_coding/include/bitrate_adjuster.h"
16 17
17 #if defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 18 #if defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED)
18 19
19 #include <VideoToolbox/VideoToolbox.h> 20 #include <VideoToolbox/VideoToolbox.h>
20 #include <vector> 21 #include <vector>
21 22
22 // This file provides a H264 encoder implementation using the VideoToolbox 23 // This file provides a H264 encoder implementation using the VideoToolbox
23 // APIs. Since documentation is almost non-existent, this is largely based on 24 // APIs. Since documentation is almost non-existent, this is largely based on
24 // the information in the VideoToolbox header files, a talk from WWDC 2014 and 25 // the information in the VideoToolbox header files, a talk from WWDC 2014 and
25 // experimentation. 26 // experimentation.
(...skipping 17 matching lines...) Expand all
43 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override; 44 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override;
44 45
45 int SetChannelParameters(uint32_t packet_loss, int64_t rtt) override; 46 int SetChannelParameters(uint32_t packet_loss, int64_t rtt) override;
46 47
47 int SetRates(uint32_t new_bitrate_kbit, uint32_t frame_rate) override; 48 int SetRates(uint32_t new_bitrate_kbit, uint32_t frame_rate) override;
48 49
49 int Release() override; 50 int Release() override;
50 51
51 const char* ImplementationName() const override; 52 const char* ImplementationName() const override;
52 53
54 void OnEncodedFrame(OSStatus status,
55 VTEncodeInfoFlags info_flags,
56 CMSampleBufferRef sample_buffer,
57 CodecSpecificInfo codec_specific_info,
58 int32_t width,
59 int32_t height,
60 int64_t render_time_ms,
61 uint32_t timestamp);
62
53 private: 63 private:
54 int ResetCompressionSession(); 64 int ResetCompressionSession();
55 void ConfigureCompressionSession(); 65 void ConfigureCompressionSession();
56 void DestroyCompressionSession(); 66 void DestroyCompressionSession();
67 void SetBitrate(uint32_t bitrate_kbit);
68 void SetEncoderBitrate(uint32_t bitrate_kbit);
57 69
58 webrtc::EncodedImageCallback* callback_; 70 EncodedImageCallback* callback_;
59 VTCompressionSessionRef compression_session_; 71 VTCompressionSessionRef compression_session_;
60 int32_t bitrate_; // Bitrate in bits per second. 72 BitrateAdjuster bitrate_adjuster_;
73 uint32_t target_bitrate_kbit_;
74 uint32_t encoder_bitrate_kbit_;
61 int32_t width_; 75 int32_t width_;
62 int32_t height_; 76 int32_t height_;
63 }; // H264VideoToolboxEncoder 77 }; // H264VideoToolboxEncoder
64 78
65 } // namespace webrtc 79 } // namespace webrtc
66 80
67 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 81 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED)
68 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_ 82 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698