00001 #pragma once
00002 #include <vector>
00003 using namespace std;
00004
00005 #include <libOOOgg/libOOOgg.h>
00006 #include "OggStreamValidationState.h"
00007 class OggValidationState
00008 : public IOggCallback
00009 {
00010 public:
00011 OggValidationState(void);
00012 virtual ~OggValidationState(void);
00013 enum eOggValidationErrors {
00014 OVE_OK,
00015
00016 OVE_STRUCTURE_VERSION_NOT_ZERO,
00017
00018 OVE_GRANULE_POS_DECREASED,
00019
00020 OVE_MORE_THAN_ONE_BOS,
00021 OVE_BOS_PAGE_NOT_AT_START,
00022
00023 OVE_MORE_THAN_ONE_EOS,
00024 OVE_EOS_BEFORE_BOS,
00025
00026 OVE_DATA_AFTER_VALID_STREAM,
00027
00028 OVE_SEQUENCE_NO_REPEATED,
00029 OVE_SEQUENCE_NO_DECREASED,
00030
00031 OVE_UNUSED_HEADER_BITS_SET,
00032 OVE_CONTINUATION_FLAG_EXPECTED,
00033 OVE_UNEXPECTED_CONTINUATION_FLAG,
00034
00035 OVE_BOS_
00036 };
00037 enum eOggValidationState {
00038 FVS_OK,
00039 FVS_SEEN_NOTHING,
00040 FVS_AWAITING_BOS,
00041 FVS_AWAITING_EOS,
00042 FVS_INVALID
00043 };
00044
00045
00046
00047
00048 virtual bool acceptOggPage(OggPage* inOggPage);
00049
00050 OggStreamValidationState* getStream(unsigned long inIndex);
00051 OggStreamValidationState* getStreamBySerialNo(unsigned long inSerialNo);
00052 unsigned long numStreams();
00053 vector<OggStreamValidationState*> mStreams;
00054
00055 bool notify(bool inIsBOS, bool inIsEOS);
00056 void error_write(short int inErrNo, OggPage* inOggPage, OggStreamValidationState* inStreamState);
00057
00058 eOggValidationState validationState();
00059
00060 bool isValid();
00061 protected:
00062 bool mExpectingBOS;
00063 unsigned long mNumBOS;
00064 unsigned long mNumEOS;
00065 bool mIsValid;
00066 eOggValidationState mState;
00067 };