'Decode the variable length encoded camera info section.'

def _canon_decode_camera_info(self, camera_info_tag):

    model = self.tags.get('Image    Model', None)
    if (not model):
        return
    model = str(model.values)
    camera_info_tags = None
    for (model_name_re, tag_desc) in makernote.canon.CAMERA_INFO_MODEL_MAP.items():
        if re.search(model_name_re, model):
            camera_info_tags = tag_desc
            break
    else:
        return
    if (camera_info_tag.field_type not in (1, 7)):
        return
    camera_info = struct.pack(('<%dB' % len(camera_info_tag.values)), *camera_info_tag.values)
    for (offset, tag) in camera_info_tags.items():
        tag_format = tag[1]
        tag_size = struct.calcsize(tag_format)
        if (len(camera_info) < (offset + tag_size)):
            continue
        packed_tag_value = camera_info[offset:(offset + tag_size)]
        tag_value = struct.unpack(tag_format, packed_tag_value)[0]
        tag_name = tag[0]
        if (len(tag) > 2):
            if callable(tag[2]):
                tag_value = tag[2](tag_value)
            else:
                tag_value = tag[2].get(tag_value, tag_value)
        logger.debug('    %s    %s', tag_name, tag_value)
        self.tags[('MakerNote    ' + tag_name)] = IfdTag(str(tag_value), None, 0, None, None, None)
