![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /proc/self/root/usr/local/lib/node_modules/mediasoup/worker/include/RTC/Codecs/ |
Upload File : |
#ifndef MS_RTC_CODECS_H264_HPP #define MS_RTC_CODECS_H264_HPP #include "common.hpp" #include "RTC/Codecs/PayloadDescriptorHandler.hpp" #include "RTC/RtpPacket.hpp" namespace RTC { namespace Codecs { class H264 { public: struct PayloadDescriptor : public RTC::Codecs::PayloadDescriptor { /* Pure virtual methods inherited from RTC::Codecs::PayloadDescriptor. */ ~PayloadDescriptor() = default; void Dump() const override; // Fields in frame-marking extension. uint8_t s : 1; // Start of Frame. uint8_t e : 1; // End of Frame. uint8_t i : 1; // Independent Frame. uint8_t d : 1; // Discardable Frame. uint8_t b : 1; // Base Layer Sync. uint8_t tid{ 0 }; // Temporal layer id. uint8_t lid{ 0 }; // Spatial layer id. uint8_t tl0picidx{ 0 }; // TL0PICIDX // Parsed values. bool hasLid{ false }; bool hasTid{ false }; bool hasTl0picidx{ false }; bool isKeyFrame{ false }; }; public: static H264::PayloadDescriptor* Parse( const uint8_t* data, size_t len, RTC::RtpPacket::FrameMarking* frameMarking = nullptr, uint8_t frameMarkingLen = 0); static void ProcessRtpPacket(RTC::RtpPacket* packet); public: class EncodingContext : public RTC::Codecs::EncodingContext { public: explicit EncodingContext(RTC::Codecs::EncodingContext::Params& params) : RTC::Codecs::EncodingContext(params) { } ~EncodingContext() = default; /* Pure virtual methods inherited from RTC::Codecs::EncodingContext. */ public: void SyncRequired() override { } }; public: class PayloadDescriptorHandler : public RTC::Codecs::PayloadDescriptorHandler { public: explicit PayloadDescriptorHandler(PayloadDescriptor* payloadDescriptor); ~PayloadDescriptorHandler() = default; public: void Dump() const override { this->payloadDescriptor->Dump(); } bool Process(RTC::Codecs::EncodingContext* encodingContext, uint8_t* data, bool& marker) override; void Restore(uint8_t* data) override; uint8_t GetSpatialLayer() const override { return 0u; } uint8_t GetTemporalLayer() const override { return this->payloadDescriptor->tid; } bool IsKeyFrame() const override { return this->payloadDescriptor->isKeyFrame; } private: std::unique_ptr<PayloadDescriptor> payloadDescriptor; }; }; } // namespace Codecs } // namespace RTC #endif