#pragma once #include #include #include namespace theora { bool isHeader(const char * newData, unsigned int length); class header { public: ~header(); header(char * newData, unsigned int length); // if managed is true, this class manages the data pointer int getHeaderType(); char getVMAJ(); char getVMIN(); char getVREV(); short getFMBW(); short getFMBH(); long unsigned int getPICW();//movie width long unsigned int getPICH();//movie height char getPICX(); char getPICY(); long unsigned int getFRN();//frame rate numerator long unsigned int getFRD();//frame rate denominator long unsigned int getPARN(); long unsigned int getPARD(); char getCS(); long unsigned int getNOMBR(); char getQUAL(); char getPF(); char getKFGShift(); std::string getVendor(); long unsigned int getNComments(); std::string getUserComment(size_t index); char getLFLIMS(size_t index); std::string toPrettyString(size_t indent = 0); //update this, it should check (header) type and output relevant stuff only. //long long unsigned int parseGranuleUpper(long long unsigned int granPos); //long long unsigned int parseGranuleLower(long long unsigned int granPos); ///\todo put this back in pravate unsigned int datasize; bool isHeader(); char getFTYPE();//for frames protected: uint32_t getInt32(size_t index); uint32_t getInt24(size_t index); uint16_t getInt16(size_t index); uint32_t commentLen(size_t index); private: char * data; bool checkDataSize(unsigned int size); }; /* class frame{ // we don't need this. I hope. public: frame(); ~frame(); bool read(const char* newData, unsigned int length); char getFTYPE(); char getNQIS(); char getQIS(size_t index); std::string toPrettyString(size_t indent = 0); private: char * data; unsigned int datasize; bool checkDataSize(unsigned int size); };*/ }