diff options
author | Jack <jackdeng@gmail.com> | 2015-09-23 20:10:11 -0700 |
---|---|---|
committer | Jack <jackdeng@gmail.com> | 2015-09-23 20:10:11 -0700 |
commit | 8617c6a4a345b047d7a48a34644ff157ef1ba1ec (patch) | |
tree | c422d2d5b7af210fd08dfbe90108657fa55e0d22 /Godeps/_workspace/src/golang.org/x/image/tiff/compress.go | |
parent | dd94a3df5de6cbb4e3351c4731221d3142b60500 (diff) | |
download | chat-8617c6a4a345b047d7a48a34644ff157ef1ba1ec.tar.gz chat-8617c6a4a345b047d7a48a34644ff157ef1ba1ec.tar.bz2 chat-8617c6a4a345b047d7a48a34644ff157ef1ba1ec.zip |
godep fix
Diffstat (limited to 'Godeps/_workspace/src/golang.org/x/image/tiff/compress.go')
-rw-r--r-- | Godeps/_workspace/src/golang.org/x/image/tiff/compress.go | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/golang.org/x/image/tiff/compress.go b/Godeps/_workspace/src/golang.org/x/image/tiff/compress.go new file mode 100644 index 000000000..3f176f00a --- /dev/null +++ b/Godeps/_workspace/src/golang.org/x/image/tiff/compress.go @@ -0,0 +1,58 @@ +// Copyright 2011 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package tiff + +import ( + "bufio" + "io" +) + +type byteReader interface { + io.Reader + io.ByteReader +} + +// unpackBits decodes the PackBits-compressed data in src and returns the +// uncompressed data. +// +// The PackBits compression format is described in section 9 (p. 42) +// of the TIFF spec. +func unpackBits(r io.Reader) ([]byte, error) { + buf := make([]byte, 128) + dst := make([]byte, 0, 1024) + br, ok := r.(byteReader) + if !ok { + br = bufio.NewReader(r) + } + + for { + b, err := br.ReadByte() + if err != nil { + if err == io.EOF { + return dst, nil + } + return nil, err + } + code := int(int8(b)) + switch { + case code >= 0: + n, err := io.ReadFull(br, buf[:code+1]) + if err != nil { + return nil, err + } + dst = append(dst, buf[:n]...) + case code == -128: + // No-op. + default: + if b, err = br.ReadByte(); err != nil { + return nil, err + } + for j := 0; j < 1-code; j++ { + buf[j] = b + } + dst = append(dst, buf[:1-code]...) + } + } +} |