...
1 package exifundefined
2
3 import (
4 "encoding/binary"
5
6 "github.com/dsoprea/go-logging"
7
8 "github.com/dsoprea/go-exif/v3/common"
9 )
10
11
12 func Encode(value EncodeableValue, byteOrder binary.ByteOrder) (encoded []byte, unitCount uint32, err error) {
13 defer func() {
14 if state := recover(); state != nil {
15 err = log.Wrap(state.(error))
16 }
17 }()
18
19 encoderName := value.EncoderName()
20
21 encoder, found := encoders[encoderName]
22 if found == false {
23 log.Panicf("no encoder registered for type [%s]", encoderName)
24 }
25
26 encoded, unitCount, err = encoder.Encode(value, byteOrder)
27 log.PanicIf(err)
28
29 return encoded, unitCount, nil
30 }
31
32
33 func Decode(valueContext *exifcommon.ValueContext) (value EncodeableValue, err error) {
34 defer func() {
35 if state := recover(); state != nil {
36 err = log.Wrap(state.(error))
37 }
38 }()
39
40 uth := UndefinedTagHandle{
41 IfdPath: valueContext.IfdPath(),
42 TagId: valueContext.TagId(),
43 }
44
45 decoder, found := decoders[uth]
46 if found == false {
47
48
49 return nil, exifcommon.ErrUnhandledUndefinedTypedTag
50 }
51
52 value, err = decoder.Decode(valueContext)
53 if err != nil {
54 if err == ErrUnparseableValue {
55 return nil, err
56 }
57
58 log.Panic(err)
59 }
60
61 return value, nil
62 }
63
View as plain text