I recently noticed an undocumented API/Documentation breaking change in the Realsense SDK v10.
The face landmarks can be obtained by calling one of the functions QueryPoints(...) or QueryPointsByGroup() of an instance of PXCFaceData::LandmarksData. Both have a pointer argument to an array of element type PXCFaceData::LandmarkPoint provided by the caller where the function stores the result.
In some situations one wants to copy the landmark coordinates to other data structures. Therefore one can loop through the array and check the entry source of type PXCFaceData::LandmarkPointSource which contains (beside other entries) and entry called alias of type enum LandmarkType indicating a specific landmark point. For example the nose tip has value LandmarkType::LANDMARK_NOSE_TIP - at least until SDKv8 or earlier.
Since SDKv10, the source value of all landmarks has the value LandmarkType::LANDMARK_NOT_NAMED, which is according to the documentation, only a placeholder for those landmarks which do not have a particular enum LandmarkType value.
I observed this behavior on two i5 computers running Windows 10 Pro 64 Bit and the latest SDKv10 installed and therefore think that this is a bug.
Furthermore, it is stated in the documentation : "Do not hard-code the index value as the supported number of points might change."
Therefore a workaround could be to map the LandMarktype to the index with the function QueryPointIndex(lm_type) and then access the appropriate index in the array directly. However, this does not work for data obtained by calling the QueryPointsByGroup() function. Here one needs to loop through the array and compare the source.index values to the index of interest - this would of course work also for the data obtained by QueryPoints().
Happy coding :)