diff options
Diffstat (limited to 'decoder.h')
-rw-r--r-- | decoder.h | 80 |
1 files changed, 76 insertions, 4 deletions
@@ -57,15 +57,87 @@ private: bool SetVideoInfos(MarkAdContext *maContext,AVCodecContext *Video_Context, AVFrame *Video_Frame, AVRational *DAR); #endif + // taken from femon + enum + { + NAL_SEI = 0x06, // Supplemental Enhancement Information + NAL_SPS = 0x07, // Sequence Parameter Set + NAL_AUD = 0x09, // Access Unit Delimiter + NAL_END_SEQ = 0x0A // End of Sequence + }; + int nalUnescape(uint8_t *dst, const uint8_t *src, int len); + + void FindH264VideoInfos(MarkAdContext *maContext, uchar *pkt, int len); + void FindH262VideoInfos(MarkAdContext *maContext, uchar *pkt, int len); public: - void FindAC3AudioInfos(MarkAdContext *maContext, uchar *espkt, int eslen); - void FindH264VideoInfos(MarkAdContext *maContext, uchar *pespkt, int peslen); - void FindH262VideoInfos(MarkAdContext *maContext, uchar *pespkt, int peslen); - bool DecodeVideo(MarkAdContext *maContext, uchar *pespkt, int peslen); + void FindVideoInfos(MarkAdContext *maContext, uchar *pkt, int len); + bool DecodeVideo(MarkAdContext *maContext, uchar *pkt, int len); bool DecodeMP2(MarkAdContext *maContext, uchar *espkt, int eslen); + void FindAC3AudioInfos(MarkAdContext *maContext, uchar *espkt, int eslen); bool DecodeAC3(MarkAdContext *maContext, uchar *espkt, int eslen); cMarkAdDecoder(int recvnumber, bool useH264, bool hasAC3); ~cMarkAdDecoder(); }; +// taken from femon +class cBitStream +{ +private: + const uint8_t *data; + int count; // in bits + int index; // in bits + +public: + cBitStream(const uint8_t *buf, const int len); + ~cBitStream(); + + int getBit(); + uint32_t getBits(uint32_t n); + void skipBits(uint32_t n); + uint32_t getUeGolomb(); + int32_t getSeGolomb(); + void skipGolomb(); + void skipUeGolomb(); + void skipSeGolomb(); + void byteAlign(); + + void skipBit() + { + skipBits(1); + } + uint32_t getU8() + { + return getBits(8); + } + uint32_t getU16() + { + return ((getBits(8) << 8) | getBits(8)); + } + uint32_t getU24() + { + return ((getBits(8) << 16) | (getBits(8) << 8) | getBits(8)); + } + uint32_t getU32() + { + return ((getBits(8) << 24) | (getBits(8) << 16) | (getBits(8) << 8) | getBits(8)); + } + bool isEOF() + { + return (index >= count); + } + void reset() + { + index = 0; + } + int getIndex() + { + return (isEOF() ? count : index); + } + const uint8_t *getData() + { + return (isEOF() ? NULL : data + (index / 8)); + } +}; + + #endif |