2013-01-12 03:20:40 +00:00
|
|
|
#ifndef _VIDEOSTREAM_READMACROBLOCK_H_
|
|
|
|
#define _VIDEOSTREAM_READMACROBLOCK_H_
|
|
|
|
|
|
|
|
#include <functional>
|
|
|
|
#include "MpegVideoState.h"
|
|
|
|
#include "VideoStream_Program.h"
|
|
|
|
#include "VideoStream_ReadMacroblockModes.h"
|
|
|
|
#include "VideoStream_ReadMotionVectors.h"
|
|
|
|
#include "VideoStream_ReadBlock.h"
|
|
|
|
|
|
|
|
namespace VideoStream
|
|
|
|
{
|
|
|
|
class ReadMacroblock
|
|
|
|
{
|
|
|
|
public:
|
2018-04-30 21:01:23 +01:00
|
|
|
typedef std::function<void(MPEG_VIDEO_STATE*)> OnMacroblockDecodedHandler;
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
ReadMacroblock();
|
|
|
|
virtual ~ReadMacroblock();
|
|
|
|
|
|
|
|
void Reset();
|
|
|
|
void Execute(void*, Framework::CBitStream&);
|
|
|
|
|
|
|
|
void RegisterOnMacroblockDecodedHandler(const OnMacroblockDecodedHandler&);
|
2013-01-12 03:20:40 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
enum PROGRAM_STATE
|
|
|
|
{
|
|
|
|
STATE_INIT,
|
|
|
|
STATE_ESCAPE,
|
|
|
|
STATE_SKIPESCAPE,
|
|
|
|
STATE_READMBINCREMENT,
|
|
|
|
STATE_READMBMODES,
|
|
|
|
STATE_READDCTTYPE,
|
|
|
|
STATE_CHECKMBMODES,
|
|
|
|
STATE_CHECKMBMODES_QSC,
|
|
|
|
STATE_CHECKMBMODES_FWM_INIT,
|
|
|
|
STATE_CHECKMBMODES_FWM,
|
|
|
|
STATE_CHECKMBMODES_BKM_INIT,
|
|
|
|
STATE_CHECKMBMODES_BKM,
|
|
|
|
STATE_CHECKMBMODES_CBP,
|
|
|
|
STATE_READBLOCKINIT,
|
|
|
|
STATE_READBLOCK,
|
|
|
|
};
|
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
ReadMacroblockModes m_macroblockModesReader;
|
|
|
|
ReadMotionVectors m_motionVectorsReader;
|
|
|
|
ReadMotionVector m_singleMotionVectorReader;
|
|
|
|
ReadBlock m_blockReader;
|
|
|
|
|
|
|
|
PROGRAM_STATE m_programState;
|
2013-01-12 03:20:40 +00:00
|
|
|
|
2018-04-30 21:01:23 +01:00
|
|
|
OnMacroblockDecodedHandler m_OnMacroblockDecodedHandler;
|
2013-01-12 03:20:40 +00:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|