A stream filter: the codec for one encoding a stream's Filter entry can name. The filter extension point: every engine
holds one filter per name, the managed defaults unless UseFilter(IStreamFilter) replaced or added one.
public interface IStreamFilter
ISO 32000-2 §7.4.1. A document decodes a stream by running the filters its Filter entry names, in order, each one over the
previous one's output (§7.3.8.2, Table 5). The pipeline around the filters, not the filters, handles everything shared:
reading Filter and DecodeParms, the inline-image abbreviations of §8.9.7 Table 92, the predictor functions of
§7.4.4.4 after any filter named LZWDecode or FlateDecode (a replacement for either gets them too and must not apply
them itself), the Crypt filter of §7.4.10 (handled by the security handler, never by a registered filter), the
decoded-length limit (MaxDecodedStreamLength), and converting any exception other than a strict-mode
DiagnosticException into a diagnostic.
Thread safety: one instance serves every document of every thread of the engines it is registered with. An implementation keeps no state between calls; everything a decode needs lives in locals, pooled buffers or the FilterContext.
Leniency: on malformed data a filter writes what it can decode, reports one diagnostic per kind of deviation through Report(String, DiagnosticSeverity, String), and returns. In strict mode Report(String, DiagnosticSeverity, String) throws, which ends the decode.
kind:method, kind:property, kind:ctor. Press Esc to clear.NameGets the name the filter has in a Filter entry, such as FlateDecode: the key it is registered under.Decode(ReadOnlyMemory<Byte>, IBufferWriter<Byte>, FilterContext)Decodes encoded and writes the result to output.