#pragma once #include #include #include #include"dtsc.h" #include "theora.h" #include "vorbis.h" #include "json.h" namespace OGG{ class Page{ public: Page(); ~Page(); bool read(std::string & newData); long unsigned int getMagicNumber(); void setMagicNumber(); char getVersion(); void setVersion(char newVal = 0); char getHeaderType(); void setHeaderType(char newVal); long long unsigned int getGranulePosition(); void setGranulePosition(long long unsigned int newVal); long unsigned int getBitstreamSerialNumber(); void setBitstreamSerialNumber(long unsigned int newVal); long unsigned int getPageSequenceNumber(); void setPageSequenceNumber(long unsigned int newVal); long unsigned int getCRCChecksum(); void setCRCChecksum(long unsigned int newVal); char getPageSegments(); inline void setPageSegments(char newVal); char* getSegmentTable(); std::deque & getSegmentTableDeque(); bool setSegmentTable(std::vector layout); void setSegmentTable(char* newVal, unsigned int length); char* getPage();//returns complete page with header unsigned long int getPageSize(); char* getFullPayload();//returns all segments in the page int getPayloadSize(); bool typeBOS(); bool typeEOS(); bool typeContinue(); bool typeNone(); std::string toPrettyString(size_t indent = 0); void setInternalCodec(std::string myCodec); long unsigned int calcChecksum(); bool clear(); bool setPayload(char* newData, unsigned int length); void readDTSCVector(std::vector DTSCVec, unsigned int serial, unsigned int sequence); private: std::deque segmentTableDeque; char* data;//pointer to the beginning of the Page data unsigned int datasize;//size of the allocated memory unsigned int dataSum;//size of the total segments bool checkDataSize(unsigned int size); std::string codec;//codec in the page }; class headerPages{ public: void readDTSCHeader(JSON::Value meta); std::map DTSCID2OGGSerial; std::map DTSCID2seqNum; std::string parsedPages; }; }