XR_ANDROID_face_tracking_data_source
নামের স্ট্রিং
XR_ANDROID_face_tracking_data_source
এক্সটেনশনের ধরন
ইনস্ট্যান্স এক্সটেনশন
রেজিস্টার করা এক্সটেনশন নম্বর
707
সংশোধন
1
অনুমোদনের স্ট্যাটাস
অনুমোদিত নয়
এক্সটেনশন ও ভার্সন ডিপেন্ডেন্সি
XR_ANDROID_face_tracking
শেষবার পরিবর্তন করার তারিখ
2025-12-16
IP স্ট্যাটাস
IP সংক্রান্ত কোনও দাবি নেই।
কন্ট্রিবিউটর
Kenny Vercaemer, Google
Yinglei Zhang, Google
Nihav Jain, Google
Spencer Quin, Google
এক নজরে
এই এক্সটেনশন একাধিক ডেটা সোর্স থেকে ফেস ট্র্যাকিং ডেটা পাওয়ার জন্য অ্যাপ্লিকেশনকে অনুমতি দেয়।
ডেটা সোর্স কোয়েরি করা
ফেস ট্র্যাকিং ডেটা সোর্সের তালিকা পেতে অ্যাপ্লিকেশনকে xrEnumerateFaceTrackingDataSourcesANDROID কল করতে হবে।
xrEnumerateFaceTrackingDataSourcesANDROID ফাংশনটি এইভাবে সংজ্ঞায়িত করা হয়েছে:
XrResult xrEnumerateFaceTrackingDataSourcesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedDataSourcesInputCapacity,
uint32_t* supportedDataSourcesOutputCount,
XrFaceTrackingDataSourceANDROID* supportedDataSources);
প্যারামিটারের বিবরণ
instanceহল XrInstance-এর হ্যান্ডেল।systemIdহলXrSystemIdযার জন্য ফেস ট্র্যাকিং ডেটা সোর্স গণনা করা হবে।supportedDataSourcesInputCapacityহলsupportedDataSourcesঅ্যারের ক্যাপাসিটি, অথবা প্রয়োজনীয় ক্যাপাসিটি ফিরিয়ে আনার অনুরোধ জানাতে 0।supportedDataSourcesOutputCountহল কাজ করে এমন ডেটা সোর্সের সংখ্যা অথবাsupportedDataSourcesInputCapacityপর্যাপ্ত না হলে প্রয়োজনীয় ক্যাপাসিটি।supportedDataSourcesহল XrFaceTrackingDataSourceANDROID-এর একটি অ্যারে।supportedDataSourcesInputCapacity০ হলে এটিNULLহতে পারে।- প্রয়োজনীয়
supportedDataSourcesসাইজ ফিরিয়ে আনার বিস্তারিত বিবরণের জন্য বাফার সাইজ প্যারামিটার বিভাগ দেখুন।
অ্যাপ্লিকেশনটি xrEnumerateFaceTrackingDataSourcesANDROID ফাংশন কল করে সিস্টেম দ্বারা সমর্থিত ডেটা সোর্সের তালিকা গণনা করতে পারে।
XrSystemFaceTrackingPropertiesANDROID :: supportsFaceTracking যদি XR_TRUE হয়, তাহলে রানটাইমকে xrEnumerateFaceTrackingDataSourcesANDROID থেকে XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID-ও ফেরত দিতে হবে।
রানটাইম যদি শূন্য ডেটা সোর্স রিটার্ন করে, তাহলে এটি কোনও ধরনের ফেস ট্র্যাকিং সাপোর্ট করে না।
রানটাইমকে অবশ্যই সর্বোচ্চ কোয়ালিটি থেকে সর্বনিম্ন কোয়ালিটির ক্রমে ডেটা সোর্স দেখাতে হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- xrEnumerateFaceTrackingDataSourcesANDROID কল করার আগে
XR_ANDROID_face_tracking_data_sourceএক্সটেনশন অবশ্যই চালু করতে হবে -
instanceঅবশ্যই একটি সঠিক XrInstance হ্যান্ডেল হতে হবে -
supportedDataSourcesOutputCountঅবশ্যইuint32_tভ্যালুর পয়েন্টার হতে হবে -
supportedDataSourcesInputCapacityযদি0না হয়, তাহলেsupportedDataSourcesঅবশ্যইsupportedDataSourcesInputCapacityXrFaceTrackingDataSourceANDROID মানের অ্যারের পয়েন্টার হতে হবে
রিটার্ন কোড
XR_SUCCESS
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
XrFaceTrackingDataSourceANDROID এনিউমারেশন বিভিন্ন ডেটা সোর্স শনাক্ত করে যা রানটাইম হয়ত সাপোর্ট করে।
typedef enum XrFaceTrackingDataSourceANDROID {
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID = 1,
XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID = 2,
XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID = 3,
XR_FACE_TRACKING_DATA_SOURCE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrFaceTrackingDataSourceANDROID;
The enumerants have the following meanings:
Enum-এর বিবরণ
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID
এই কনফিগারেশন যে ছবির ডেটা ব্যবহার করে তা দেখায়
XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID
এই কনফিগারেশন অডিও ডেটা ব্যবহার করে তা দেখায়
XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID
এই কনফিগারেশন যে ছবি ও অডিও ডেটা ব্যবহার করে তা দেখায়
ডেটা সোর্স কনফিগার করা হচ্ছে
XrFaceTrackingDataSourceInfoANDROID স্ট্রাকচারটি এইভাবে বর্ণনা করা হয়েছে:
typedef struct XrFaceTrackingDataSourceInfoANDROID {
XrStructureType type;
const void* next;
uint32_t requestedDataSourceCount;
const XrFaceTrackingDataSourceANDROID* requestedDataSources;
} XrFaceTrackingDataSourceInfoANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।requestedDataSourceCountহল অ্যাপ্লিকেশন দ্বারা অনুরোধ করা ডেটা সোর্সের সংখ্যা।requestedDataSourcesহল XrFaceTrackingDataSourceANDROID ভ্যালুর একটি অ্যারে, যা অ্যাপ্লিকেশনের অনুরোধ করা ডেটা সোর্স নির্দিষ্ট করে।
XrFaceTrackingDataSourceInfoANDROID স্ট্রাকচারটি XrFaceTrackerANDROID হ্যান্ডেল তৈরি করার জন্য ডেটা সোর্স বর্ণনা করে।
xrCreateFaceTrackerANDROID কল করার সময় ফেস ট্র্যাকিংয়ের জন্য এক বা একাধিক ডেটা সোর্সের অনুরোধ করতে, কোনও অ্যাপ্লিকেশন XrFaceTrackerCreateInfoANDROID স্ট্রাকচারের পরবর্তী চেনে XrFaceTrackingDataSourceInfoANDROID স্ট্রাকচার পাস করতে পারে।
অ্যাপ্লিকেশনটি শূন্য ডেটা সোর্স পাস করলে বা কোনও ডেটা সোর্স xrEnumerateFaceTrackingDataSourcesANDROID দ্বারা গণনা করা না হলে, রানটাইম অবশ্যই XR_ERROR_VALIDATION_FAILURE রিটার্ন করবে।
ব্যবহারকারী যদি অনুরোধ করা সব ডেটা সোর্সের জন্য প্রয়োজনীয় সব অনুমতি না দিয়ে থাকেন, তাহলে রানটাইম অবশ্যই XR_ERROR_PERMISSION_INSUFFICIENT রিটার্ন করবে।
প্রতিটি ডেটা সোর্সের জন্য প্রয়োজনীয় অনুমতি এইভাবে সংজ্ঞায়িত করা হয়:
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID-এর android.permission.FACE_TRACKING অনুমতি প্রয়োজন।XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID-এর জন্য android.permission.RECORD_AUDIO অনুমতি প্রয়োজন।XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID-এর জন্য android.permission.FACE_TRACKING এবং android.permission.RECORD_AUDIO, এই দুটি অনুমতিই প্রয়োজন।
রানটাইমকে XrFaceTrackingDataSourceInfoANDROID : requestedDataSources অ্যারে অবশ্যই ব্যাখ্যা করতে হবে, যাতে অ্যাপ্লিকেশন দ্বারা সর্বোচ্চ থেকে সর্বনিম্ন পছন্দ হিসেবে দেখানো হয়। রানটাইমকে অবশ্যই প্রথম অনুরোধ করা ডেটা সোর্স ব্যবহার করে ট্র্যাকিং ডেটা তৈরি করতে হবে যা এখনও প্রয়োজনীয় অনুমতি মেনে চলে। ট্র্যাকার লাইফটাইম চলাকালীন কোনও অনুমতি প্রত্যাহার করা হলে, যার ফলে ডেটা সোর্স আর ব্যবহারযোগ্য না থাকে, রানটাইমকে পরবর্তী সর্বোচ্চ পছন্দের ডেটা সোর্স ব্যবহার করার চেষ্টা চালিয়ে যেতে হবে। অনুরোধ করা ডেটা সোর্সের কোনওটিই ব্যবহারযোগ্য না হলে, রানটাইম অবশ্যই XrFaceStateANDROID :: isValid-কে XR_FALSE-এ সেট করবে, xrGetFaceStateANDROID-এ কল করার জন্য এবং অন্যান্য ফিল্ডকে সংজ্ঞায়িত নয় বলে বিবেচনা করা হবে।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrFaceTrackingDataSourceInfoANDROID ব্যবহার করার আগে
XR_ANDROID_face_tracking_data_sourceএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
requestedDataSourcesঅবশ্যইrequestedDataSourceCountটি সঠিক XrFaceTrackingDataSourceANDROID মানের অ্যারের পয়েন্টার হতে হবে -
requestedDataSourceCountপ্যারামিটার অবশ্যই0-এর থেকে বেশি হতে হবে
অনুমতি
Android অ্যাপ্লিকেশনের ম্যানিফেস্টে, যে অনুমতিগুলি অনুরোধ করার জন্য নির্ধারিত, সেগুলি অবশ্যই তালিকাভুক্ত থাকতে হবে। android.permission.FACE_TRACKING অনুমতিকে বিপজ্জনক অনুমতি হিসেবে বিবেচনা করা হয়। android.permission.RECORD_AUDIO অনুমতিকে বিপজ্জনক অনুমতি হিসেবে বিবেচনা করা হয়। এইসব ফাংশন ব্যবহার করার জন্য অ্যাপ্লিকেশনকে রানটাইমে অবশ্যই অনুমতি চাইতে হবে:
(সুরক্ষা লেভেল: বিপজ্জনক)
XrFaceTrackingDataSourceStateANDROID স্ট্রাকচারটি এইভাবে বর্ণনা করা হয়েছে:
typedef struct XrFaceTrackingDataSourceStateANDROID {
XrStructureType type;
void* next;
XrFaceTrackingDataSourceANDROID dataSource;
} XrFaceTrackingDataSourceStateANDROID;
মেম্বারদের বিবরণ
typeহল এই স্ট্রাকচারের XrStructureType।nextহলNULLঅথবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের পয়েন্টার। কোর OpenXR বা এই এক্সটেনশনে এই ধরনের কোনও স্ট্রাকচার সংজ্ঞায়িত করা নেই।dataSourceহল XrFaceTrackingDataSourceANDROID যা ফেস ট্র্যাকিং ডেটা তৈরি করতে ব্যবহার করা হয়।
xrGetFaceStateANDROID-এ পাস করা XrFaceStateANDROID স্ট্রাকচারের সাথে কোনও অ্যাপ্লিকেশন XrFaceTrackingDataSourceStateANDROID স্ট্রাকচার চেন করতে পারে, যাতে সেই কলের জন্য ফেস ট্র্যাকিং ডেটা তৈরি করতে ব্যবহৃত ডেটা সোর্স কোয়েরি করা যায়।
সঠিক ব্যবহার (অন্তর্নিহিত)
- XrFaceTrackingDataSourceStateANDROID ব্যবহার করার আগে
XR_ANDROID_face_tracking_data_sourceএক্সটেনশন অবশ্যই চালু করতে হবে -
typeঅবশ্যইXR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROIDহতে হবে -
nextঅবশ্যইNULLবা স্ট্রাকচার চেনের পরবর্তী স্ট্রাকচারের সঠিক পয়েন্টার হতে হবে -
dataSourceঅবশ্যই একটি সঠিক XrFaceTrackingDataSourceANDROID ভ্যালু হতে হবে
ডেটা সোর্স সহ ফেস ট্র্যাকিংয়ের জন্য উদাহরণ কোড।
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. created at app startup.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrEnumerateFaceTrackingDataSourcesANDROID xrEnumerateFaceTrackingDataSourcesANDROID; // previously initialized
bool (*requestPermission)(const char* permission);
// Inspect data sources supported by the system.
uint32_t dataSourcesCount = 0;
CHK_XR(xrEnumerateFaceTrackingDataSourcesANDROID(instance, systemId, dataSourcesCount,
&dataSourcesCount, nullptr));
std::vector<XrFaceTrackingDataSourceANDROID> dataSources(dataSourcesCount);
CHK_XR(xrEnumerateFaceTrackingDataSourcesANDROID(instance, systemId, dataSourcesCount,
&dataSourcesCount, dataSources.data()));
if (dataSources.size() == 0) {
// System does not support face tracking at all ...
return;
}
auto requestDataSourcePermissions = [requestPermission](XrFaceTrackingDataSourceANDROID dataSource) {
switch (dataSource) {
case XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID:
return requestPermission("android.permission.FACE_TRACKING");
case XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID:
return requestPermission("android.permission.RECORD_AUDIO");
case XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID:
return requestPermission("android.permission.FACE_TRACKING") &&
requestPermission("android.permission.RECORD_AUDIO");
default:
return false;
}
};
// Request permissions and remove data sources that are not granted.
for (uint32_t i = 0; i < dataSources.size();) {
if (requestDataSourcePermissions(dataSources[i])) {
++i;
continue;
}
dataSources.erase(dataSources.begin() + i);
}
if (dataSources.size() == 0) {
// User denied all permissions, cannot create face tracker.
return;
}
// Create face tracker with requested data sources.
XrFaceTrackerANDROID faceTracker;
XrFaceTrackingDataSourceInfoANDROID
faceTrackerModeInfo{.type = XR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROID,
.next = nullptr,
.requestedDataSourceCount = static_cast<uint32_t>(
dataSources.size()),
.requestedDataSources = dataSources.data()};
XrFaceTrackerCreateInfoANDROID
createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
.next = &faceTrackerModeInfo};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));
XrFaceTrackingDataSourceStateANDROID dataSourceState{
.type = XR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROID,
.next = nullptr};
XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = &dataSourceState;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
while (1) {
// ...
// For every frame in the frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
XrFaceStateGetInfoANDROID faceGetInfo{
.type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
.next = nullptr,
.time = frameState.predictedDisplayTime,
};
CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
if (faceState.isValid) {
for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
// parameters[i] contains a weight of specific blend shape
}
// If the system changes data source because of permission changes,
// handle the new data source ...
switch (dataSourceState.dataSource) {
default:
break;
}
}
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
সমস্যা
ভার্সনের ইতিহাস
সংশোধন ১, ০৭-১০-২০২৪ (Kenny Vercaemer)
- প্রাথমিক এক্সটেনশনের বিবরণ