49 lines
1.2 KiB
C
49 lines
1.2 KiB
C
|
/*
|
|||
|
* H264FrameParser.h
|
|||
|
*
|
|||
|
* Created on: 2016年9月24日
|
|||
|
* Author: liu
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef LIVE_IPCPROGRAM_INTERFACE_H264FRAMEPARSER_H_
|
|||
|
#define LIVE_IPCPROGRAM_INTERFACE_H264FRAMEPARSER_H_
|
|||
|
|
|||
|
#include <stdint.h>
|
|||
|
#include <vector>
|
|||
|
|
|||
|
namespace Byl {
|
|||
|
|
|||
|
class H264FrameParser {
|
|||
|
public:
|
|||
|
enum H264FrameParserType { ManagerBuffer, NotManagerBuffer };
|
|||
|
|
|||
|
H264FrameParser(H264FrameParserType type);
|
|||
|
H264FrameParser(uint8_t *buffer, int32_t size);
|
|||
|
~H264FrameParser();
|
|||
|
|
|||
|
void setBuffer(uint8_t *buffer, uint32_t size);
|
|||
|
void resetParser();
|
|||
|
// note: 先调用findNalu判断有没有,再使用getNextNaluBuffer去读取
|
|||
|
bool findNalu();
|
|||
|
bool getNextNaluBuffer(uint8_t *&buffer, uint32_t &size, bool &isLastNalu);
|
|||
|
void dumpStartcode();
|
|||
|
|
|||
|
private:
|
|||
|
bool findStartcode(uint8_t *start, uint8_t *end, uint8_t *&startcode, uint32_t &startcodeSize);
|
|||
|
|
|||
|
private:
|
|||
|
H264FrameParserType _type;
|
|||
|
uint8_t *_buffer;
|
|||
|
uint32_t _bufferSize;
|
|||
|
uint8_t *_currStartPtr;
|
|||
|
uint8_t *_nextStartPtr;
|
|||
|
uint32_t _currStartcodeSize;
|
|||
|
uint32_t _nextStartcodeSize;
|
|||
|
bool _isLastNalu;
|
|||
|
std::vector<uint8_t *> startcodeOffsets;
|
|||
|
};
|
|||
|
|
|||
|
} /* namespace Byl */
|
|||
|
|
|||
|
#endif /* LIVE_IPCPROGRAM_INTERFACE_H264FRAMEPARSER_H_ */
|