1 /* 2 * Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. 3 * 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 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 * 10 */ 11 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_ 14 15 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" 16 17 #if defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 18 19 #include <VideoToolbox/VideoToolbox.h> 20 #include <vector> 21 22 // This file provides a H264 encoder implementation using the VideoToolbox 23 // 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 // experimentation. 26 27 namespace webrtc { 28 29 class H264VideoToolboxEncoder : public H264Encoder { 30 public: 31 H264VideoToolboxEncoder(); 32 33 ~H264VideoToolboxEncoder() override; 34 35 int InitEncode(const VideoCodec* codec_settings, 36 int number_of_cores, 37 size_t max_payload_size) override; 38 39 int Encode(const VideoFrame& input_image, 40 const CodecSpecificInfo* codec_specific_info, 41 const std::vector<FrameType>* frame_types) override; 42 43 int RegisterEncodeCompleteCallback(EncodedImageCallback* callback) override; 44 45 int SetChannelParameters(uint32_t packet_loss, int64_t rtt) override; 46 47 int SetRates(uint32_t new_bitrate_kbit, uint32_t frame_rate) override; 48 49 int Release() override; 50 51 const char* ImplementationName() const override; 52 53 private: 54 int ResetCompressionSession(); 55 void ConfigureCompressionSession(); 56 void DestroyCompressionSession(); 57 58 webrtc::EncodedImageCallback* callback_; 59 VTCompressionSessionRef compression_session_; 60 int32_t bitrate_; // Bitrate in bits per second. 61 int32_t width_; 62 int32_t height_; 63 }; // H264VideoToolboxEncoder 64 65 } // namespace webrtc 66 67 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 68 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_ENCODER_H_ 69