| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 | #include "BinaryReader.h"#include "ByteStream.h"#include "MpegDashTypes.h"#include <memory>namespace bell::mpeg{    class MpegDashDemuxer    {        std::shared_ptr<bell::BinaryReader> reader;        std::unique_ptr<bell::mpeg::MpegBox> lastBox;        std::unique_ptr<bell::mpeg::Moof> lastMoof;        std::vector<bell::mpeg::Mp4Track> tracks;        bool chunkZero = false;    public:        MpegDashDemuxer(std::shared_ptr<ByteStream> stream);        ~MpegDashDemuxer() {            reader->close();        }        void parse();        std::unique_ptr<bell::mpeg::MpegBox> readBox();        // std::vector<Mp4Track> getTracks();        std::vector<uint8_t> readFullBox(std::unique_ptr<bell::mpeg::MpegBox> &);        void ensureBox(std::unique_ptr<bell::mpeg::MpegBox> &);        size_t position();        void close();        std::unique_ptr<bell::mpeg::Mvhd> parseMvhd();        std::unique_ptr<bell::mpeg::Chunk> getNextChunk(bool infoOnly);        std::unique_ptr<bell::mpeg::TrunEntry> getTrunEntry(std::unique_ptr<Trun> &, int);        std::unique_ptr<bell::mpeg::TrunEntry> getAbsoluteTrunEntry(std::unique_ptr<bell::mpeg::Trun> &, int, std::unique_ptr<bell::mpeg::Tfhd> &);        std::vector<bell::mpeg::Trex> parseMvex(std::unique_ptr<bell::mpeg::MpegBox> &, int possibleTrackCount);        std::unique_ptr<bell::mpeg::Mp4DashSample> getNextSample(std::unique_ptr<bell::mpeg::Chunk> &);        bool hasFlag(int flags, int mask);        std::unique_ptr<bell::mpeg::Hdlr> parseHdlr(std::unique_ptr<bell::mpeg::MpegBox> &);        std::unique_ptr<bell::mpeg::Moov> parseMoov(std::unique_ptr<bell::mpeg::MpegBox> &);        int parseMfhd();        std::unique_ptr<bell::mpeg::Traf> parseTraf(std::unique_ptr<bell::mpeg::MpegBox> &, int);        std::unique_ptr<bell::mpeg::Moof> parseMoof(std::unique_ptr<bell::mpeg::MpegBox> &, int);        std::unique_ptr<bell::mpeg::Tfhd> parseTfhd(int);        long parseTfdt();        std::unique_ptr<bell::mpeg::Trun> parseTrun();        std::unique_ptr<bell::mpeg::Tkhd> parseTkhd();        std::unique_ptr<bell::mpeg::Trak> parseTrak(std::unique_ptr<bell::mpeg::MpegBox> &);        bell::mpeg::Trex parseTrex();        std::unique_ptr<bell::mpeg::Mdia> parseMdia(std::unique_ptr<bell::mpeg::MpegBox> &);        std::unique_ptr<bell::mpeg::Minf> parseMinf(std::unique_ptr<bell::mpeg::MpegBox> &);        std::unique_ptr<bell::mpeg::Elst> parseEdts(std::unique_ptr<bell::mpeg::MpegBox> &);        std::vector<uint8_t> parseStbl(std::unique_ptr<bell::mpeg::MpegBox> &);        std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int, int, int);        std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int, int);        std::unique_ptr<bell::mpeg::MpegBox> untilBox(std::unique_ptr<bell::mpeg::MpegBox> &, int);        std::unique_ptr<bell::mpeg::MpegBox> untilAnyBox(std::unique_ptr<MpegBox> &);    };}
 |