def METHOD_NAME(self, buffer: ctypes.c_void_p, buffer_size: int,
                 rowlen_bytes: int,  # this param is ignored in this implementation
                 width: int, height: int, frame_id: int = -1) -> List[QrCodeResult]:
    LIBZBAR.zbar_image_set_sequence(self.zbar_image, frame_id)
    LIBZBAR.zbar_image_set_size(self.zbar_image, width, height)
    LIBZBAR.zbar_image_set_format(self.zbar_image, FOURCC_Y800)
    LIBZBAR.zbar_image_set_data(self.zbar_image, buffer, buffer_size, zbar_cleanup)
    LIBZBAR.zbar_image_scanner_recycle_image(self.zbar_scanner, self.zbar_image)
    LIBZBAR.zbar_scan_image(self.zbar_scanner, self.zbar_image)
    result_set = LIBZBAR.zbar_image_scanner_get_results(self.zbar_scanner)
    res = []
    symbol = LIBZBAR.zbar_symbol_set_first_symbol(result_set)
    while symbol:
        symbol_data_len = LIBZBAR.zbar_symbol_get_data_length(symbol)
        symbol_data_ptr = LIBZBAR.zbar_symbol_get_data(symbol)
        symbol_data_bytes = ctypes.string_at(symbol_data_ptr, symbol_data_len)
        symbol_data = symbol_data_bytes.decode('utf-8')
        symbol_loc = []
        symbol_loc_len = LIBZBAR.zbar_symbol_get_loc_size(symbol)
        for i in range(0, symbol_loc_len):
            # Normalize the coordinates into 0..1 range by dividing by width / height
            symbol_loc_x = LIBZBAR.zbar_symbol_get_loc_x(symbol, i)
            symbol_loc_y = LIBZBAR.zbar_symbol_get_loc_y(symbol, i)
            symbol_loc.append((symbol_loc_x, symbol_loc_y))
        # Find the center by getting the average values of the corners x and y coordinates
        symbol_loc_sum_x = sum([l[0] for l in symbol_loc])
        symbol_loc_sum_y = sum([l[1] for l in symbol_loc])
        symbol_loc_center = (int(symbol_loc_sum_x / symbol_loc_len), int(symbol_loc_sum_y / symbol_loc_len))
        res.append(QrCodeResult(symbol_data, symbol_loc_center, symbol_loc))
        symbol = LIBZBAR.zbar_symbol_next(symbol)
    return res