...
1 package exifundefined
2
3 import (
4 "fmt"
5 "strings"
6
7 "crypto/sha1"
8 "encoding/binary"
9
10 "github.com/dsoprea/go-logging"
11
12 "github.com/dsoprea/go-exif/v3/common"
13 )
14
15 type Tag927CMakerNote struct {
16 MakerNoteType []byte
17 MakerNoteBytes []byte
18 }
19
20 func (Tag927CMakerNote) EncoderName() string {
21 return "Codec927CMakerNote"
22 }
23
24 func (mn Tag927CMakerNote) String() string {
25 parts := make([]string, len(mn.MakerNoteType))
26
27 for i, c := range mn.MakerNoteType {
28 parts[i] = fmt.Sprintf("%02x", c)
29 }
30
31 h := sha1.New()
32
33 _, err := h.Write(mn.MakerNoteBytes)
34 log.PanicIf(err)
35
36 digest := h.Sum(nil)
37
38 return fmt.Sprintf("MakerNote<TYPE-ID=[%s] LEN=(%d) SHA1=[%020x]>", strings.Join(parts, " "), len(mn.MakerNoteBytes), digest)
39 }
40
41 type Codec927CMakerNote struct {
42 }
43
44 func (Codec927CMakerNote) Encode(value interface{}, byteOrder binary.ByteOrder) (encoded []byte, unitCount uint32, err error) {
45 defer func() {
46 if state := recover(); state != nil {
47 err = log.Wrap(state.(error))
48 }
49 }()
50
51 mn, ok := value.(Tag927CMakerNote)
52 if ok == false {
53 log.Panicf("can only encode a Tag927CMakerNote")
54 }
55
56
57
58 return mn.MakerNoteBytes, uint32(len(mn.MakerNoteBytes)), nil
59 }
60
61 func (Codec927CMakerNote) Decode(valueContext *exifcommon.ValueContext) (value EncodeableValue, err error) {
62 defer func() {
63 if state := recover(); state != nil {
64 err = log.Wrap(state.(error))
65 }
66 }()
67
68
69
70
71
72 valueContext.SetUndefinedValueType(exifcommon.TypeByte)
73
74 valueBytes, err := valueContext.ReadBytes()
75 log.PanicIf(err)
76
77
78
79
80
81
82
83
84
85
86
87 var makerNoteType []byte
88 if len(valueBytes) >= 20 {
89 makerNoteType = valueBytes[:20]
90 } else {
91 makerNoteType = valueBytes
92 }
93
94 mn := Tag927CMakerNote{
95 MakerNoteType: makerNoteType,
96
97
98
99 MakerNoteBytes: valueBytes,
100 }
101
102 return mn, nil
103 }
104
105 func init() {
106 registerEncoder(
107 Tag927CMakerNote{},
108 Codec927CMakerNote{})
109
110 registerDecoder(
111 exifcommon.IfdExifStandardIfdIdentity.UnindexedString(),
112 0x927c,
113 Codec927CMakerNote{})
114 }
115
View as plain text