#pragma once #include #include #include #include "bitstream.h" #include "mp4_generic.h" #include "nal.h" namespace h265{ std::deque analysePackets(const char *data, unsigned long len); const char *typeToStr(uint8_t type); bool isKeyframe(const char *data, uint32_t len); void updateProfileTierLevel(Utils::bitstream &bs, MP4::HVCC &hvccBox, unsigned long maxSubLayersMinus1); std::string printProfileTierLevel(Utils::bitstream &bs, unsigned long maxSubLayersMinus1, size_t indent); struct metaInfo{ uint64_t width; uint64_t height; double fps; }; class initData{ public: initData(); initData(const std::string &hvccData); void addUnit(const char *data); void addUnit(const std::string &data); bool haveRequired(); std::string generateHVCC(); metaInfo getMeta(); const std::set &getVPS() const; const std::set &getSPS() const; const std::set &getPPS() const; protected: std::map > nalUnits; }; class vpsUnit{ public: vpsUnit(const std::string &_data); void updateHVCC(MP4::HVCC &hvccBox); std::string toPrettyString(size_t indent); private: std::string data; }; class spsUnit{ public: spsUnit(const std::string &_data); void updateHVCC(MP4::HVCC &hvccBox); std::string toPrettyString(size_t indent = 0); void getMeta(metaInfo &res); private: std::string data; }; // NOTE: no ppsUnit, as the only information it contains is parallelism mode, which can be set to // 0 for 'unknown' }// namespace h265