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_DECODER_H_ 13 #define WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_DECODER_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 21 // This file provides a H264 encoder implementation using the VideoToolbox 22 // APIs. Since documentation is almost non-existent, this is largely based on 23 // the information in the VideoToolbox header files, a talk from WWDC 2014 and 24 // experimentation. 25 26 namespace webrtc { 27 28 class H264VideoToolboxDecoder : public H264Decoder { 29 public: 30 H264VideoToolboxDecoder(); 31 32 ~H264VideoToolboxDecoder() override; 33 34 int InitDecode(const VideoCodec* video_codec, int number_of_cores) override; 35 36 int Decode(const EncodedImage& input_image, 37 bool missing_frames, 38 const RTPFragmentationHeader* fragmentation, 39 const CodecSpecificInfo* codec_specific_info, 40 int64_t render_time_ms) override; 41 42 int RegisterDecodeCompleteCallback(DecodedImageCallback* callback) override; 43 44 int Release() override; 45 46 int Reset() override; 47 48 const char* ImplementationName() const override; 49 50 private: 51 int ResetDecompressionSession(); 52 void ConfigureDecompressionSession(); 53 void DestroyDecompressionSession(); 54 void SetVideoFormat(CMVideoFormatDescriptionRef video_format); 55 56 DecodedImageCallback* callback_; 57 CMVideoFormatDescriptionRef video_format_; 58 VTDecompressionSessionRef decompression_session_; 59 }; // H264VideoToolboxDecoder 60 61 } // namespace webrtc 62 63 #endif // defined(WEBRTC_VIDEO_TOOLBOX_SUPPORTED) 64 #endif // WEBRTC_MODULES_VIDEO_CODING_CODECS_H264_H264_VIDEO_TOOLBOX_DECODER_H_ 65