public static SoundInput FindFormat(Stream file) { uint signature = FormatCatalog.ReadSignature(file); for (;;) { var range = FormatCatalog.Instance.LookupSignature <AudioFormat> (signature); foreach (var impl in range) { try { file.Position = 0; SoundInput sound = impl.TryOpen(file); if (null != sound) { return(sound); } } catch (System.Exception X) { FormatCatalog.Instance.LastError = X; } } if (0 == signature) { break; } signature = 0; } return(null); }
public static System.Tuple <ImageFormat, ImageMetaData> FindFormat(Stream file, string filename = null) { if (file.Length < 4) { return(null); } uint signature = FormatCatalog.ReadSignature(file); Lazy <string> ext = null; if (!string.IsNullOrEmpty(filename)) { ext = new Lazy <string> (() => Path.GetExtension(filename).TrimStart('.').ToLowerInvariant()); } for (;;) { var range = FormatCatalog.Instance.LookupSignature <ImageFormat> (signature); // check formats that match filename extension first if (ext != null && range.Skip(1).Any()) { range = range.OrderByDescending(f => f.Extensions.Any(e => e == ext.Value)); } foreach (var impl in range) { try { file.Position = 0; ImageMetaData metadata = impl.ReadMetaData(file); if (null != metadata) { metadata.FileName = filename; return(Tuple.Create(impl, metadata)); } } catch { } } if (0 == signature) { break; } signature = 0; } return(null); }