code: func (_ *canon) Parse(x *exif.Exif) error {
  	m, err := x.Get(exif.MakerNote)
  	if err != nil {
  		return nil
  	}
  
  	mk, err := x.Get(exif.Make)
  	if err != nil {
  		return nil
  	}
  
  	if val, err := mk.StringVal(); err != nil || val != "Canon" {
  		return nil
  	}
  
  	// Canon notes are a single IFD directory with no header.
  	// Reader offsets need to be w.r.t. the original tiff structure.
  	buf := bytes.NewReader(append(make([]byte, m.ValOffset), m.Val...))
  	buf.Seek(int64(m.ValOffset), 0)
  
  	mkNotesDir, _, err := tiff.DecodeDir(buf, x.Tiff.Order)
  	if err != nil {
  		return err
  	}
  	x.LoadTags(mkNotesDir, makerNoteCanonFields, false)
  	return nil
  }
docs: // Parse decodes all Canon makernote data found in x and adds it to x.