Play-/tools/MediaCenter/Source/ProgramStreamDecoder.h

48 lines
1.3 KiB
C
Raw Permalink Normal View History

#ifndef _PROGRAMSTREAMDECODER_H_
#define _PROGRAMSTREAMDECODER_H_
#include <functional>
#include "StreamBitStream.h"
#include "Stream.h"
#include "VideoContainer.h"
class ProgramStreamDecoder : public CVideoContainer
{
public:
struct PRIVATE_STREAM1_INFO
{
2018-04-30 21:01:23 +01:00
uint8 subStreamNumber;
uint8 frameCount;
uint16 firstAccessUnit;
};
2018-04-30 21:01:23 +01:00
typedef std::function<bool(Framework::CBitStream&, uint32)> VideoStreamHandler;
typedef std::function<bool(Framework::CBitStream&, const PRIVATE_STREAM1_INFO&, uint32)> PrivateStreamHandler;
2018-04-30 21:01:23 +01:00
ProgramStreamDecoder(Framework::CStream&);
virtual ~ProgramStreamDecoder();
2018-04-30 21:01:23 +01:00
STATUS Read();
2018-04-30 21:01:23 +01:00
void RegisterVideoStreamHandler(const VideoStreamHandler&);
void RegisterPrivateStream1Handler(const PrivateStreamHandler&);
private:
2018-04-30 21:01:23 +01:00
uint32 ReadPesExtension(Framework::CBitStream&);
2018-04-30 21:01:23 +01:00
void ReadProgramStreamPackHeader(Framework::CBitStream&);
void ReadSystemHeader(Framework::CBitStream&);
bool ReadPrivateStream1(Framework::CBitStream&);
void ReadPrivateStream2(Framework::CBitStream&);
bool ReadVideoStream(Framework::CBitStream&);
2018-04-30 21:01:23 +01:00
static void ReadAndValidateMarker(Framework::CBitStream&, unsigned int, uint32);
2018-04-30 21:01:23 +01:00
VideoStreamHandler m_videoStreamHandler;
PrivateStreamHandler m_privateStream1Handler;
Framework::CStream& m_inputStream;
Framework::CStreamBitStream m_stream;
};
#endif