mirror of
https://github.com/dsoprea/go-exif.git
synced 2025-05-31 11:41:57 +00:00
Revert "ifd_enumerate.go: Eliminate unnecessary buffering"
This reverts commit 4692087c1a8840c3d1593b3df89a19ea2c8d31c4. Broke unit-tests. Will unbreak shortly.
This commit is contained in:
parent
4692087c1a
commit
3bd3dd677b
@ -77,6 +77,7 @@ type byteParser struct {
|
|||||||
byteOrder binary.ByteOrder
|
byteOrder binary.ByteOrder
|
||||||
addressableData []byte
|
addressableData []byte
|
||||||
ifdOffset uint32
|
ifdOffset uint32
|
||||||
|
buffer *bytes.Buffer
|
||||||
currentOffset uint32
|
currentOffset uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,6 +91,7 @@ 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,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,12 +111,16 @@ func (bp *byteParser) getUint16() (value uint16, raw []byte, err error) {
|
|||||||
// TODO(dustin): Add test
|
// TODO(dustin): Add test
|
||||||
|
|
||||||
needBytes := 2
|
needBytes := 2
|
||||||
|
offset := 0
|
||||||
|
raw = make([]byte, needBytes)
|
||||||
|
|
||||||
if bp.currentOffset+needBytes >= len(bp.addressableData) {
|
for offset < needBytes {
|
||||||
return 0, nil, io.EOF
|
n, err := bp.buffer.Read(raw[offset:])
|
||||||
|
log.PanicIf(err)
|
||||||
|
|
||||||
|
offset += n
|
||||||
}
|
}
|
||||||
|
|
||||||
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
|
||||||
value = bp.byteOrder.Uint16(raw)
|
value = bp.byteOrder.Uint16(raw)
|
||||||
|
|
||||||
bp.currentOffset += uint32(needBytes)
|
bp.currentOffset += uint32(needBytes)
|
||||||
@ -135,13 +141,17 @@ func (bp *byteParser) getUint32() (value uint32, raw []byte, err error) {
|
|||||||
// TODO(dustin): Add test
|
// TODO(dustin): Add test
|
||||||
|
|
||||||
needBytes := 4
|
needBytes := 4
|
||||||
|
offset := 0
|
||||||
|
raw = make([]byte, needBytes)
|
||||||
|
|
||||||
if bp.currentOffset+needBytes >= len(bp.addressableData) {
|
for offset < needBytes {
|
||||||
return 0, nil, io.EOF
|
n, err := bp.buffer.Read(raw[offset:])
|
||||||
|
log.PanicIf(err)
|
||||||
|
|
||||||
|
offset += n
|
||||||
}
|
}
|
||||||
|
|
||||||
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes]
|
value = bp.byteOrder.Uint32(raw)
|
||||||
value = bp.byteOrder.Uint16(raw)
|
|
||||||
|
|
||||||
bp.currentOffset += uint32(needBytes)
|
bp.currentOffset += uint32(needBytes)
|
||||||
|
|
||||||
@ -158,6 +168,7 @@ 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
|
||||||
@ -168,6 +179,7 @@ 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…
x
Reference in New Issue
Block a user