public void Carve(string path, long position, long length, StringList codecDetectors, StringList containerDetectors, IDataBlockCallback callback, IBaseProgressListener baseProgressListener) { IProject project = CreateProject("C:/nonExistingFolder"); IInputFile inputFile = CreateInputFile(project, path); IFileScanner fileScanner = CreateFileScanner(); IDetectorFactory detectorFactory = CreateDetectorFactory(); CancelableProgressAdapter progressReporter = new CancelableProgressAdapter(baseProgressListener); fileScanner.CodecDetectors = detectorFactory.CodecDetectors.Where(detector => codecDetectors.Contains(detector.Name)); fileScanner.ContainerDetectors = detectorFactory.ContainerDetectors.Where(detector => containerDetectors.Contains(detector.Name)); fileScanner.DataBlockDetected += (o, e) => { callback.DataBlockDetectedWithCodecs(e.DataBlock.StartOffset, e.DataBlock.EndOffset, GetCodecStreamsAndKeyFrames(e.DataBlock)); }; try { StartPolling(progressReporter); (fileScanner as FileScanner).Scan(inputFile, CreateDataReaderPool().CreateDataReader(inputFile.CreateDataPacket().GetSubPacket(position, length)), progressReporter); } finally { _polling = false; } }
public CancelableProgressAdapter(IBaseProgressListener listener) { _listener = listener; }