mirror of https://github.com/dsoprea/go-exif.git
Revert "Revert "ifd_enumerate.go: Eliminate unnecessary buffering""
This reverts commit 3bd3dd677b
.
Includes fixes.
dustin/master
parent
3bd3dd677b
commit
e0ce96b49e
|
@ -183,8 +183,8 @@ func Test_IfdByteEncoder_encodeTagToBytes_bytes_embedded1(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -352,8 +352,8 @@ func Test_IfdByteEncoder_encodeTagToBytes_childIfd__withAllocate(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -473,8 +473,8 @@ func Test_IfdByteEncoder_encodeTagToBytes_simpleTag_allocate(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -617,8 +617,8 @@ func Test_IfdByteEncoder_encodeIfdToBytes_fullExif(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -667,8 +667,8 @@ func Test_IfdByteEncoder_EncodeToExifPayload(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
@ -718,8 +718,8 @@ func Test_IfdByteEncoder_EncodeToExif_WithChildAndSibling(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
if state := recover(); state != nil {
|
if state := recover(); state != nil {
|
||||||
err := log.Wrap(state.(error))
|
err := log.Wrap(state.(error))
|
||||||
log.PrintErrorf(err, "Test failure.")
|
log.PrintError(err)
|
||||||
panic(err)
|
t.Fatalf("Test failed.")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
@ -77,7 +78,6 @@ type byteParser struct {
|
||||||
byteOrder binary.ByteOrder
|
byteOrder binary.ByteOrder
|
||||||
addressableData []byte
|
addressableData []byte
|
||||||
ifdOffset uint32
|
ifdOffset uint32
|
||||||
buffer *bytes.Buffer
|
|
||||||
currentOffset uint32
|
currentOffset uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,7 +91,6 @@ func newByteParser(addressableData []byte, byteOrder binary.ByteOrder, ifdOffset
|
||||||
bp = &byteParser{
|
bp = &byteParser{
|
||||||
addressableData: addressableData,
|
addressableData: addressableData,
|
||||||
byteOrder: byteOrder,
|
byteOrder: byteOrder,
|
||||||
buffer: bytes.NewBuffer(addressableData[ifdOffset:]),
|
|
||||||
currentOffset: ifdOffset,
|
currentOffset: ifdOffset,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -110,17 +109,13 @@ func (bp *byteParser) getUint16() (value uint16, raw []byte, err error) {
|
||||||
|
|
||||||
// TODO(dustin): Add test
|
// TODO(dustin): Add test
|
||||||
|
|
||||||
needBytes := 2
|
needBytes := uint32(2)
|
||||||
offset := 0
|
|
||||||
raw = make([]byte, needBytes)
|
|
||||||
|
|
||||||
for offset < needBytes {
|
if bp.currentOffset+needBytes > uint32(len(bp.addressableData)) {
|
||||||
n, err := bp.buffer.Read(raw[offset:])
|
return 0, nil, io.EOF
|
||||||
log.PanicIf(err)
|
|
||||||
|
|
||||||
offset += n
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
raw = bp.addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
||||||
value = bp.byteOrder.Uint16(raw)
|
value = bp.byteOrder.Uint16(raw)
|
||||||
|
|
||||||
bp.currentOffset += uint32(needBytes)
|
bp.currentOffset += uint32(needBytes)
|
||||||
|
@ -140,17 +135,13 @@ func (bp *byteParser) getUint32() (value uint32, raw []byte, err error) {
|
||||||
|
|
||||||
// TODO(dustin): Add test
|
// TODO(dustin): Add test
|
||||||
|
|
||||||
needBytes := 4
|
needBytes := uint32(4)
|
||||||
offset := 0
|
|
||||||
raw = make([]byte, needBytes)
|
|
||||||
|
|
||||||
for offset < needBytes {
|
if bp.currentOffset+needBytes > uint32(len(bp.addressableData)) {
|
||||||
n, err := bp.buffer.Read(raw[offset:])
|
return 0, nil, io.EOF
|
||||||
log.PanicIf(err)
|
|
||||||
|
|
||||||
offset += n
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
raw = bp.addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
||||||
value = bp.byteOrder.Uint32(raw)
|
value = bp.byteOrder.Uint32(raw)
|
||||||
|
|
||||||
bp.currentOffset += uint32(needBytes)
|
bp.currentOffset += uint32(needBytes)
|
||||||
|
@ -168,7 +159,6 @@ func (bp *byteParser) CurrentOffset() uint32 {
|
||||||
// containers in the EXIF blob.
|
// containers in the EXIF blob.
|
||||||
type IfdEnumerate struct {
|
type IfdEnumerate struct {
|
||||||
exifData []byte
|
exifData []byte
|
||||||
buffer *bytes.Buffer
|
|
||||||
byteOrder binary.ByteOrder
|
byteOrder binary.ByteOrder
|
||||||
tagIndex *TagIndex
|
tagIndex *TagIndex
|
||||||
ifdMapping *exifcommon.IfdMapping
|
ifdMapping *exifcommon.IfdMapping
|
||||||
|
@ -179,7 +169,6 @@ type IfdEnumerate struct {
|
||||||
func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate {
|
func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate {
|
||||||
return &IfdEnumerate{
|
return &IfdEnumerate{
|
||||||
exifData: exifData,
|
exifData: exifData,
|
||||||
buffer: bytes.NewBuffer(exifData),
|
|
||||||
byteOrder: byteOrder,
|
byteOrder: byteOrder,
|
||||||
ifdMapping: ifdMapping,
|
ifdMapping: ifdMapping,
|
||||||
tagIndex: tagIndex,
|
tagIndex: tagIndex,
|
||||||
|
|
Loading…
Reference in New Issue