public HashChecksumTranscodingStream(Stream innerStream, IStreamHashGenerator streamHashGenerator)
            {
                if (!innerStream.CanWrite || !innerStream.CanRead || !innerStream.CanSeek)
                {
                    throw new ArgumentException("Inner stream must be seekable, readable and writable", "innerStream");
                }

                this.innerStream = innerStream;
                this.streamHashGenerator = streamHashGenerator;

                this.bufferStream = new MemoryStream();
                innerStream.Position = 0;
                innerStream.CopyTo(this.bufferStream);

                this.bufferStream.Position = innerStream.Position;
            }
 public HashChecksumTranscodingStreamFactory(IStreamHashGenerator streamHashGenerator, ITranscodingStreamFactory transcodingStreamFactory)
 {
     this.streamHashGenerator = streamHashGenerator;
     this.transcodingStreamFactory = transcodingStreamFactory;
 }
 public HashChecksumTranscodingStreamFactory(IStreamHashGenerator streamHashGenerator)
     : this(streamHashGenerator, new PassThroughTranscodingStreamFactory())
 {
 }