Process([NotNull] Stream stream, [CanBeNull] ICollection <IJpegSegmentMetadataReader> readers = null) { if (readers == null) { readers = _allReaders; } // Build the union of segment types desired by all readers var segmentTypes = new HashSet <JpegSegmentType>(readers.SelectMany(reader => reader.SegmentTypes)); // Read out those segments var segments = JpegSegmentReader.ReadSegments(new SequentialStreamReader(stream), segmentTypes); // Process them return(ProcessJpegSegments(readers, segments.ToList())); }