| OLD | NEW | 
|   1 /* |   1 /* | 
|   2  *  Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. |   2  *  Copyright (c) 2017 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_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_DECODER_H_ |  12 #ifndef WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_HELPERS_H_ | 
|  13 #define WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_DECODER_H_ |  13 #define WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_HELPERS_H_ | 
|  14  |  14  | 
|  15 #include "webrtc/modules/video_coding/codecs/h264/include/h264.h" |  15 #include <CoreFoundation/CoreFoundation.h> | 
 |  16 #include <VideoToolbox/VideoToolbox.h> | 
 |  17 #include <string> | 
|  16  |  18  | 
|  17 #include <VideoToolbox/VideoToolbox.h> |  19 // Convenience function for creating a dictionary. | 
 |  20 inline CFDictionaryRef CreateCFTypeDictionary(CFTypeRef* keys, | 
 |  21                                               CFTypeRef* values, | 
 |  22                                               size_t size) { | 
 |  23   return CFDictionaryCreate(kCFAllocatorDefault, keys, values, size, | 
 |  24                             &kCFTypeDictionaryKeyCallBacks, | 
 |  25                             &kCFTypeDictionaryValueCallBacks); | 
 |  26 } | 
|  18  |  27  | 
|  19 // This file provides a H264 encoder implementation using the VideoToolbox |  28 // Copies characters from a CFStringRef into a std::string. | 
|  20 // APIs. Since documentation is almost non-existent, this is largely based on |  29 std::string CFStringToString(const CFStringRef cf_string); | 
|  21 // the information in the VideoToolbox header files, a talk from WWDC 2014 and |  | 
|  22 // experimentation. |  | 
|  23  |  30  | 
|  24 namespace webrtc { |  31 // Convenience function for setting a VT property. | 
 |  32 void SetVTSessionProperty(VTSessionRef session, CFStringRef key, int32_t value); | 
|  25  |  33  | 
|  26 class H264VideoToolboxDecoder : public H264Decoder { |  34 // Convenience function for setting a VT property. | 
|  27  public: |  35 void SetVTSessionProperty(VTSessionRef session, | 
|  28   H264VideoToolboxDecoder(); |  36                           CFStringRef key, | 
 |  37                           uint32_t value); | 
|  29  |  38  | 
|  30   ~H264VideoToolboxDecoder() override; |  39 // Convenience function for setting a VT property. | 
 |  40 void SetVTSessionProperty(VTSessionRef session, CFStringRef key, bool value); | 
|  31  |  41  | 
|  32   int InitDecode(const VideoCodec* video_codec, int number_of_cores) override; |  42 // Convenience function for setting a VT property. | 
 |  43 void SetVTSessionProperty(VTSessionRef session, | 
 |  44                           CFStringRef key, | 
 |  45                           CFStringRef value); | 
|  33  |  46  | 
|  34   int Decode(const EncodedImage& input_image, |  47 #endif  // WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_HELPERS_H_ | 
|  35              bool missing_frames, |  | 
|  36              const RTPFragmentationHeader* fragmentation, |  | 
|  37              const CodecSpecificInfo* codec_specific_info, |  | 
|  38              int64_t render_time_ms) override; |  | 
|  39  |  | 
|  40   int RegisterDecodeCompleteCallback(DecodedImageCallback* callback) override; |  | 
|  41  |  | 
|  42   int Release() override; |  | 
|  43  |  | 
|  44   const char* ImplementationName() const override; |  | 
|  45  |  | 
|  46  private: |  | 
|  47   int ResetDecompressionSession(); |  | 
|  48   void ConfigureDecompressionSession(); |  | 
|  49   void DestroyDecompressionSession(); |  | 
|  50   void SetVideoFormat(CMVideoFormatDescriptionRef video_format); |  | 
|  51  |  | 
|  52   DecodedImageCallback* callback_; |  | 
|  53   CMVideoFormatDescriptionRef video_format_; |  | 
|  54   VTDecompressionSessionRef decompression_session_; |  | 
|  55 };  // H264VideoToolboxDecoder |  | 
|  56  |  | 
|  57 }  // namespace webrtc |  | 
|  58  |  | 
|  59 #endif  // WEBRTC_SDK_OBJC_FRAMEWORK_CLASSES_VIDEOTOOLBOX_DECODER_H_ |  | 
| OLD | NEW |