Home | History | Annotate | Download | only in h264
      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