예제 #1
0
 public MainPresenter(MainForm form)
 {
     _form       = form;
     _folderData = new FolderData();
     _folderData.CurrentImageLoaded += OnCurrentImageJustLoaded;
     _state = new ReaderState();
 }
예제 #2
0
 public CarverState(IReaderState readerState, IDataBlockCarver dataBlockCarver, IResultMetadata resultMetadata, IDataReader dataReader, IDataBlockBuilder dataBlockBuilder)
 {
     _readerState      = readerState;
     _dataBlockCarver  = dataBlockCarver;
     _resultMetadata   = resultMetadata;
     _dataReader       = dataReader;
     _dataBlockBuilder = dataBlockBuilder;
 }
예제 #3
0
 public RetryReader(TextReader reader)
 {
     this.reader     = reader;
     this.retry      = new Stack <char>();
     this.readState  = new ReaderState(this);
     this.retryState = new RetryState(this);
     this.state      = readState;
 }
        public Mpeg2SystemReader(BitStreamDataReader dataReader, IMpeg2SystemState state, IReaderState readerState)
        {
            _dataReader  = dataReader;
            _state       = state;
            _readerState = readerState;

            _maxZeroByteStuffingLength    = (uint)Mpeg2SystemDetector.Configurable[Mpeg2SystemDetector.ConfigurationKey.MaxZeroByteStuffingLength];
            _stuffingBytesResultFormatter = new StuffingBytesResultFormatter();
        }
예제 #5
0
        public Mpeg2VideoReader(BitStreamDataReader dataReader, IMpeg2VideoState state, IReaderState readerState)
        {
            _dataReader  = dataReader;
            _state       = state;
            _readerState = readerState;

            _maxZeroByteStuffingLength = (uint)Mpeg2VideoDetector.Configurable[Mpeg2VideoDetector.ConfigurationKey.ParserMaxZeroByteStuffingLength];

            ReferenceHeaders = NoDefaultHeaders;
        }
예제 #6
0
 private void undo(char[] items, int length)
 {
     if (length == 0)
     {
         return;
     }
     do
     {
         --length;
         retry.Push(items[length]);
     }while (length != 0);
     state = retryState;
 }
        public void ParseHeader(IReaderState readerState)
        {
            bool firstHeader             = (_state.NalUnitType == NalUnitType.Invalid);
            uint maxGapAfterNalUnit      = GetMaxGapAfterNalUnit(_state.NalUnitType);
            long startPosition           = _reader.Position;
            long maxNalUnitStartPosition = Math.Min(_reader.Length, (startPosition + maxGapAfterNalUnit));

            NalUnitType previousNalUnitType = _state.NalUnitType;

            while (_dataReader.State == DataReaderState.Ready)
            {
                if (!firstHeader)
                {
                    while (true)
                    {
                        if ((FindNalUnit(false) == null) || (_reader.Position >= maxNalUnitStartPosition) || (_dataReader.State != DataReaderState.Ready))
                        {
                            _reader.Position = startPosition;
                            readerState.Invalidate();
                            return;
                        }

                        var nextNalUnitType = (NalUnitType)(GetNalUnitByte() & 0x1f);
                        if ((_reader.Position - startPosition) <= GetMaxGapBetweenNalUnits(previousNalUnitType, nextNalUnitType))
                        {
                            break;
                        }

                        _reader.Position++;
                    }
                }

                long nalUnitStartPosition = _reader.Position;
                readerState.Parse(_streamParser, _reader);

                if (readerState.Valid)
                {
                    return;                     // Result is valid
                }
                if (firstHeader || (nalUnitStartPosition >= (maxNalUnitStartPosition - 1)))
                {
                    return;                     // Done scanning for a valid result
                }

                readerState.Recover();
                _reader.Position = (nalUnitStartPosition + 1);
            }

            // Nothing was found, so the result is invalid
            readerState.Invalidate();
        }
        public H264Reader(BitStreamDataReader dataReader, IH264State state, IReaderState readerState)
        {
            _dataReader  = dataReader;
            _state       = state;
            _readerState = readerState;

            Configurable <H264Detector.ConfigurationKey> configurable = H264Detector.Configurable;
            uint maxGapBetweenPpsAndSlice = (uint)configurable[H264Detector.ConfigurationKey.MaxGapBetweenPpsAndSlice];
            uint maxGapBetweenPpsAndSps   = (uint)configurable[H264Detector.ConfigurationKey.MaxGapBetweenPpsAndSps];
            uint maxGapBetweenNalUnits    = (uint)configurable[H264Detector.ConfigurationKey.MaxGapBetweenNalUnits];
            uint maxBytesBetweenNalUnits  = Math.Max(maxGapBetweenNalUnits, Math.Max(maxGapBetweenPpsAndSps, maxGapBetweenPpsAndSlice));

            _maxNalUnitDistance = maxBytesBetweenNalUnits + (uint)configurable[H264Detector.ConfigurationKey.MaxSliceNalUnitLength];
        }
예제 #9
0
        public void ParseHeader(IReaderState readerState)
        {
            // TODO: if a default header is available, try it here!

            readerState.Parse(_systemHeaderParser, _reader);
        }
예제 #10
0
 public void ParseHeader(IReaderState readerState)
 {
     readerState.Parse(_videoHeaderParser, _reader);
 }
예제 #11
0
 private void undo(char item)
 {
     retry.Push(item);
     state = retryState;
 }
예제 #12
0
 public void ParseHeader(IReaderState readerState)
 {
     readerState.Parse(_exampleParser, _exampleReader);
 }