Twitch SDK (Internal)
applevideoencoder.h
Go to the documentation of this file.
1 /********************************************************************************************
2  * Twitch Broadcasting SDK
3  *
4  * This software is supplied under the terms of a license agreement with Twitch Interactive, Inc. and
5  * may not be copied or used except in accordance with the terms of that agreement
6  * Copyright (c) 2012-2016 Twitch Interactive, Inc.
7  *********************************************************************************************/
8 
9 #pragma once
10 
12 
13 #include <CoreGraphics/CoreGraphics.h>
14 #include <VideoToolbox/VideoToolbox.h>
15 
16 namespace ttv
17 {
18  namespace broadcast
19  {
20  class AppleVideoEncoder;
21  class IFrameWriter;
22  struct Packet;
23  class AppleVideoEncoderInternalData;
24  }
25 }
26 
28 {
29 public:
31  virtual ~AppleVideoEncoder();
32 
33 public: // IVideoEncoder
34  virtual std::string GetName() const override;
35  virtual bool SupportsBitRateAdjustment() const override;
36  virtual TTV_ErrorCode SetFrameWriter(const std::shared_ptr<IFrameWriter>& frameWriter) override;
37  virtual TTV_ErrorCode ValidateVideoParams(const VideoParams& videoParams) const override;
38  virtual TTV_ErrorCode Initialize() override;
39  virtual TTV_ErrorCode Shutdown() override;
40  virtual TTV_ErrorCode Start(uint32_t streamIndex, const VideoParams& vidParams) override;
41  virtual TTV_ErrorCode SubmitFrame(const std::shared_ptr<VideoFrame>& videoFrame) override;
42  virtual TTV_ErrorCode Stop() override;
43  virtual TTV_ErrorCode GetSpsPps(std::vector<uint8_t>& sps, std::vector<uint8_t>& pps) override;
44  virtual TTV_ErrorCode ValidateFrame(const std::shared_ptr<VideoFrame>& videoframe) override;
45  virtual TTV_ErrorCode SetTargetBitRate(uint32_t kbps) override;
46  virtual bool SupportsReceiverProtocol(IVideoFrameReceiver::ReceiverTypeId typeId) const override;
47  virtual std::shared_ptr<IVideoFrameReceiver> GetReceiverImplementation(IVideoFrameReceiver::ReceiverTypeId typeId) override;
48 public:
49  void WriteEncodedFrame(std::unique_ptr<Packet>&& packet);
50 
51 private:
52  void InternalStop();
53  OSStatus SetupVTCompressionSession(VTCompressionOutputCallback encodedFrameCallback);
54  OSStatus SetupMagicCookie();
55 
56  static void MagicCookieEncodedCallback(void* outputCallbackRefCon, void* sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer);
57  static void FrameEncodedCallback(void* outputCallbackRefCon, void* sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer);
58 
59 private:
60  std::shared_ptr<AppleVideoEncoderInternalData> mInternalData;
61 };
bool SupportsReceiverProtocol() const
Definition: ivideoencoder.h:100
virtual TTV_ErrorCode Start(uint32_t streamIndex, const VideoParams &vidParams) override
virtual TTV_ErrorCode SubmitFrame(const std::shared_ptr< VideoFrame > &videoFrame) override
Definition: applevideoencoder.h:27
JSON (JavaScript Object Notation).
Definition: adsapi.h:16
virtual TTV_ErrorCode SetTargetBitRate(uint32_t kbps) override
std::shared_ptr< AppleVideoEncoderInternalData > mInternalData
Definition: applevideoencoder.h:60
virtual TTV_ErrorCode ValidateVideoParams(const VideoParams &videoParams) const override
virtual bool SupportsBitRateAdjustment() const override
Definition: broadcasttypes.h:80
uint32_t TTV_ErrorCode
Definition: errortypes.h:30
OSStatus SetupVTCompressionSession(VTCompressionOutputCallback encodedFrameCallback)
static void FrameEncodedCallback(void *outputCallbackRefCon, void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer)
Definition: ivideoencoder.h:40
virtual TTV_ErrorCode SetFrameWriter(const std::shared_ptr< IFrameWriter > &frameWriter) override
virtual std::shared_ptr< IVideoFrameReceiver > GetReceiverImplementation(IVideoFrameReceiver::ReceiverTypeId typeId) override
virtual std::string GetName() const override
virtual TTV_ErrorCode Shutdown() override
virtual TTV_ErrorCode Initialize() override
void WriteEncodedFrame(std::unique_ptr< Packet > &&packet)
static void MagicCookieEncodedCallback(void *outputCallbackRefCon, void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer)
virtual TTV_ErrorCode ValidateFrame(const std::shared_ptr< VideoFrame > &videoframe) override
virtual TTV_ErrorCode Stop() override
size_t ReceiverTypeId
Definition: ivideoframereceiver.h:28
virtual TTV_ErrorCode GetSpsPps(std::vector< uint8_t > &sps, std::vector< uint8_t > &pps) override