...
1 package exif
2
3 import (
4 "io"
5
6 "github.com/dsoprea/go-logging"
7 "github.com/dsoprea/go-utility/v2/filesystem"
8 )
9
10 type ExifBlobSeeker interface {
11 GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error)
12 }
13
14
15
16
17 type ExifReadSeeker struct {
18 rs io.ReadSeeker
19 }
20
21 func NewExifReadSeeker(rs io.ReadSeeker) *ExifReadSeeker {
22 return &ExifReadSeeker{
23 rs: rs,
24 }
25 }
26
27 func NewExifReadSeekerWithBytes(exifData []byte) *ExifReadSeeker {
28 sb := rifs.NewSeekableBufferWithBytes(exifData)
29 edbs := NewExifReadSeeker(sb)
30
31 return edbs
32 }
33
34
35
36 func (edbs *ExifReadSeeker) GetReadSeeker(initialOffset int64) (rs io.ReadSeeker, err error) {
37 defer func() {
38 if state := recover(); state != nil {
39 err = log.Wrap(state.(error))
40 }
41 }()
42
43 br, err := rifs.NewBouncebackReader(edbs.rs)
44 log.PanicIf(err)
45
46 _, err = br.Seek(initialOffset, io.SeekStart)
47 log.PanicIf(err)
48
49 return br, nil
50 }
51
View as plain text