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()));
        }