#pragma once #include #include #include #include #include "dtsc.h" #include "theora.h" #include "vorbis.h" #include "json.h" namespace OGG{ enum HeaderType{ Continued = 1, BeginOfStream = 2, EndOfStream = 4 }; class Page{ public: Page(); ~Page(); bool read(std::string & newData); bool read(FILE * inFile); bool getSegment(unsigned int index, char * data, unsigned int & len); 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(); 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(DTSC::Meta & meta); std::map DTSCID2OGGSerial; std::map DTSCID2seqNum; std::string parsedPages; }; }