/// <summary> /// Creates a new file scanner for scanning (multiple) files. /// </summary> /// <param name="containerDataScanner">The <see cref="IDataScanner"/> for container formats</param> /// <param name="codecDataScanner">The <see cref="IDataScanner"/> for codec formats</param> /// <param name="dataReaderPool">The shared pool of file data readers</param> /// <param name="createDataBlockBuilder">The factory method for creating data blocks</param> /// <param name="createSubProgressReporter">The factory method for creating a sub progress reporter</param> /// data scanner fors canning codec streams (of a detected data block)</param> /// <exception cref="ArgumentNullException">If any argument is <c>null</c></exception> public FileScanner(IDataScanner containerDataScanner, IDataScanner codecDataScanner, IDataScanner codecStreamDataScanner, IDataReaderPool dataReaderPool, Creator <IDataBlockBuilder> createDataBlockBuilder, Creator <IProgressReporter, IProgressReporter, long, long, long> createSubProgressReporter) { PreConditions.Argument("containerDataScanner").Value(containerDataScanner).IsNotNull(); PreConditions.Argument("codecDataScanner").Value(codecDataScanner).IsNotNull(); PreConditions.Argument("codecStreamDataScanner").Value(codecStreamDataScanner).IsNotNull(); PreConditions.Argument("dataReaderPool").Value(dataReaderPool).IsNotNull(); PreConditions.Argument("createDataBlockBuilder").Value(createDataBlockBuilder).IsNotNull(); PreConditions.Argument("createSubProgressReporter").Value(createSubProgressReporter).IsNotNull(); _containerDataScanner = containerDataScanner; _codecDataScanner = codecDataScanner; _codecStreamDataScanner = codecStreamDataScanner; _dataReaderPool = dataReaderPool; _createDataBlockBuilder = createDataBlockBuilder; _createSubProgressReporter = createSubProgressReporter; _codecDataScanner.DataBlockDetected += (sender, e) => FixAndReportDataBlock(e.DataBlock); _containerDataScanner.DataBlockDetected += (sender, e) => ScanCodecStreams(e, e.DataBlock); _containerDataScanner.UnknownDataDetected += (sender, e) => ScanForCodecFormats(_inputFile.CreateDataPacket().GetSubPacket(e.Offset, e.Length)); // The default is that container blocks are allowed to overlap. See also issue DEFR-867. AllowOverlap = true; }
public void TearDown() { _mockRepository = null; _containerDataScanner = null; _codecDataScanner = null; _codecStreamDataScanner = null; _dataReaderPool = null; _progressReporter = null; _createDataBlockBuilder = null; _createSubProgressReporter = null; _inputFile = null; _fileScanner = null; }
public void SetUp() { _mockRepository = new MockRepository(); _containerDataScanner = MockRepository.GenerateStub <IDataScanner>(); _codecDataScanner = MockRepository.GenerateStub <IDataScanner>(); _codecStreamDataScanner = MockRepository.GenerateStub <IDataScanner>(); _dataReaderPool = MockRepository.GenerateStub <IDataReaderPool>(); _progressReporter = MockRepository.GenerateStub <IProgressReporter>(); _createDataBlockBuilder = MockRepository.GenerateStub <Creator <IDataBlockBuilder> >(); _createSubProgressReporter = MockRepository.GenerateStub <Creator <IProgressReporter, IProgressReporter, long, long, long> >(); _inputFile = MockRepository.GenerateStub <IInputFile>(); _fileScanner = new FileScanner(_containerDataScanner, _codecDataScanner, _codecStreamDataScanner, _dataReaderPool, _createDataBlockBuilder, _createSubProgressReporter); }
internal CompleteCodecStreamScanner(IDataScanner dataScanner, IDataBlockBuilder dataBlockBuilder, ICodecStream completeCodecStream, IProgressReporter progressReporter) { _dataScanner = dataScanner; _dataBlockBuilder = dataBlockBuilder; _completeCodecStream = completeCodecStream; _progressReporter = progressReporter; _codecStreamFragments = new List <IFragment>(); long length = _completeCodecStream.Length; _maxUnknownDataForCompleteStream = Math.Max((MaxPercentageUnkownDataForCompleteStream * length) / 100, Math.Min((2 * MaxUnparsableBytes), length)); long detectBytes = Math.Min(length, MaxBytesForDetect); _maxUnknownDataForDetect = Math.Max((MaxPercentageUnkownDataForDetect * detectBytes) / 100, Math.Min((2 * MaxUnparsableBytes), detectBytes)); }