Twitch SDK (Internal)
Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
ttv::broadcast::AppleVideoEncoder Class Reference

#include <applevideoencoder.h>

Inheritance diagram for ttv::broadcast::AppleVideoEncoder:
ttv::broadcast::IVideoEncoder

Public Member Functions

 AppleVideoEncoder ()
 
virtual ~AppleVideoEncoder ()
 
virtual std::string GetName () const override
 
virtual bool SupportsBitRateAdjustment () const override
 
virtual TTV_ErrorCode SetFrameWriter (const std::shared_ptr< IFrameWriter > &frameWriter) override
 
virtual TTV_ErrorCode ValidateVideoParams (const VideoParams &videoParams) const override
 
virtual TTV_ErrorCode Initialize () override
 
virtual TTV_ErrorCode Shutdown () override
 
virtual TTV_ErrorCode Start (uint32_t streamIndex, const VideoParams &vidParams) override
 
virtual TTV_ErrorCode SubmitFrame (const std::shared_ptr< VideoFrame > &videoFrame) override
 
virtual TTV_ErrorCode Stop () override
 
virtual TTV_ErrorCode GetSpsPps (std::vector< uint8_t > &sps, std::vector< uint8_t > &pps) override
 
virtual TTV_ErrorCode ValidateFrame (const std::shared_ptr< VideoFrame > &videoframe) override
 
virtual TTV_ErrorCode SetTargetBitRate (uint32_t kbps) override
 
virtual bool SupportsReceiverProtocol (IVideoFrameReceiver::ReceiverTypeId typeId) const override
 
virtual std::shared_ptr< IVideoFrameReceiverGetReceiverImplementation (IVideoFrameReceiver::ReceiverTypeId typeId) override
 
void WriteEncodedFrame (std::unique_ptr< Packet > &&packet)
 
template<typename T >
bool SupportsReceiverProtocol () const
 

Private Member Functions

void InternalStop ()
 
OSStatus SetupVTCompressionSession (VTCompressionOutputCallback encodedFrameCallback)
 
OSStatus SetupMagicCookie ()
 

Static Private Member Functions

static void MagicCookieEncodedCallback (void *outputCallbackRefCon, void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer)
 
static void FrameEncodedCallback (void *outputCallbackRefCon, void *sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CMSampleBufferRef sampleBuffer)
 

Private Attributes

std::shared_ptr< AppleVideoEncoderInternalData > mInternalData
 

Constructor & Destructor Documentation

◆ AppleVideoEncoder()

ttv::broadcast::AppleVideoEncoder::AppleVideoEncoder ( )

◆ ~AppleVideoEncoder()

virtual ttv::broadcast::AppleVideoEncoder::~AppleVideoEncoder ( )
virtual

Member Function Documentation

◆ FrameEncodedCallback()

static void ttv::broadcast::AppleVideoEncoder::FrameEncodedCallback ( void *  outputCallbackRefCon,
void *  sourceFrameRefCon,
OSStatus  status,
VTEncodeInfoFlags  infoFlags,
CMSampleBufferRef  sampleBuffer 
)
staticprivate

◆ GetName()

virtual std::string ttv::broadcast::AppleVideoEncoder::GetName ( ) const
overridevirtual

Retrieves the name for logging purposes.

Implements ttv::broadcast::IVideoEncoder.

◆ GetReceiverImplementation()

virtual std::shared_ptr<IVideoFrameReceiver> ttv::broadcast::AppleVideoEncoder::GetReceiverImplementation ( IVideoFrameReceiver::ReceiverTypeId  typeId)
overridevirtual

Obtains the receiver for the given protocol. If not implemented, null will be returned.

Implements ttv::broadcast::IVideoEncoder.

◆ GetSpsPps()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::GetSpsPps ( std::vector< uint8_t > &  sps,
std::vector< uint8_t > &  pps 
)
overridevirtual

Called by the system to get the Sps/Pps data from the encoder.

Implements ttv::broadcast::IVideoEncoder.

◆ Initialize()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::Initialize ( )
overridevirtual

Initializes the encoder. The client is responsible for calling this before

Implements ttv::broadcast::IVideoEncoder.

◆ InternalStop()

void ttv::broadcast::AppleVideoEncoder::InternalStop ( )
private

◆ MagicCookieEncodedCallback()

static void ttv::broadcast::AppleVideoEncoder::MagicCookieEncodedCallback ( void *  outputCallbackRefCon,
void *  sourceFrameRefCon,
OSStatus  status,
VTEncodeInfoFlags  infoFlags,
CMSampleBufferRef  sampleBuffer 
)
staticprivate

◆ SetFrameWriter()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::SetFrameWriter ( const std::shared_ptr< IFrameWriter > &  frameWriter)
overridevirtual

Called by the system before encoding begins.

Implements ttv::broadcast::IVideoEncoder.

◆ SetTargetBitRate()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::SetTargetBitRate ( uint32_t  kbps)
overridevirtual

Sets the desired bitrate in 1000s of bits per second. This will only have an effect if SupportsBitrateAdjustment() returns true. TTV_EC_UNSUPPORTED will be returned if not supported.

Implements ttv::broadcast::IVideoEncoder.

◆ SetupMagicCookie()

OSStatus ttv::broadcast::AppleVideoEncoder::SetupMagicCookie ( )
private

◆ SetupVTCompressionSession()

OSStatus ttv::broadcast::AppleVideoEncoder::SetupVTCompressionSession ( VTCompressionOutputCallback  encodedFrameCallback)
private

◆ Shutdown()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::Shutdown ( )
overridevirtual

◆ Start()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::Start ( uint32_t  streamIndex,
const VideoParams vidParams 
)
overridevirtual

◆ Stop()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::Stop ( )
overridevirtual

Called by the system when the stream is stopping.

Implements ttv::broadcast::IVideoEncoder.

◆ SubmitFrame()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::SubmitFrame ( const std::shared_ptr< VideoFrame > &  videoFrame)
overridevirtual

This will be called periodically to kick off an encode of a frame. This should not block to encode the frame synchronously.

Implements ttv::broadcast::IVideoEncoder.

◆ SupportsBitRateAdjustment()

virtual bool ttv::broadcast::AppleVideoEncoder::SupportsBitRateAdjustment ( ) const
overridevirtual

Determines whether or not the encoder supports changing the target bitrate on the fly.

Implements ttv::broadcast::IVideoEncoder.

◆ SupportsReceiverProtocol() [1/2]

virtual bool ttv::broadcast::AppleVideoEncoder::SupportsReceiverProtocol ( IVideoFrameReceiver::ReceiverTypeId  typeId) const
overridevirtual

Determines if the concrete implementation supports the given protocol.

Implements ttv::broadcast::IVideoEncoder.

◆ SupportsReceiverProtocol() [2/2]

template<typename T >
bool ttv::broadcast::IVideoEncoder::SupportsReceiverProtocol ( ) const
inlineinherited

Determines if the concrete implementation supports the given protocol. The template parameter must be known to derive from IVideoFrameReceiver.

◆ ValidateFrame()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::ValidateFrame ( const std::shared_ptr< VideoFrame > &  videoframe)
overridevirtual

Called by the system to validate each frame as it is processed.

Implements ttv::broadcast::IVideoEncoder.

◆ ValidateVideoParams()

virtual TTV_ErrorCode ttv::broadcast::AppleVideoEncoder::ValidateVideoParams ( const VideoParams videoParams) const
overridevirtual

◆ WriteEncodedFrame()

void ttv::broadcast::AppleVideoEncoder::WriteEncodedFrame ( std::unique_ptr< Packet > &&  packet)

Member Data Documentation

◆ mInternalData

std::shared_ptr<AppleVideoEncoderInternalData> ttv::broadcast::AppleVideoEncoder::mInternalData
private

The documentation for this class was generated from the following file: