تعرض SDV Media الشاشات المتاحة لتطبيقات OEM باستخدام Linux DRM API.
Framebuffer هو مصدر بيانات البكسل، ويستند إلى بعض مخازن الذاكرة التي تم تخصيصها خارجيًا.
Plane هو مصدر صورة تستخدمه CRTC. وهو مرتبط بـ framebuffer، وقد يمثّل عرضًا تم اقتصاصه من framebuffer.
CRTC يمثّل مسار عرض عامًا. وقد يجمع بين عدة مستويات لإنشاء ناتج الفيديو النهائي، وإرسال الناتج إلى عدة برامج ترميز.
يحوّل برنامج الترميز ناتج الفيديو من CRTC إلى نموذج مناسب لموصّل معيّن.
يمثّل الموصّل موصّل عرض متاحًا. على سبيل المثال، منفذ HDMI.
لمزيد من الوصف التفصيلي، يُرجى الرجوع إلى:
واجهة برمجة التطبيقات
توفّر SDV Media واجهات Linux DRM. على الرغم من إمكانية استخدامها مباشرةً باستخدام استدعاء النظام ioctl، ننصحك باستخدام مكتبة مساعِدة لمساحة المستخدِم لتطوير التطبيقات. على سبيل المثال:
drm-rsحزمة لـ Rust (ننصحك بها)libdrmلـ C/C++: توفّرdrm-kmsصفحة دليل نظرة عامة شاملة على واجهات برمجة التطبيقات واستخدامها.
إعداد العرض على شاشة واحدة
افتح جهاز DRM (
/dev/dri/card*) واستخدِم واجهات Linux DRM API (على سبيل المثال، من خلالlibdrm) على واصف الملف لاختيار الشاشة ووضعها.عادةً، لن يعرض نظام المضيف سوى جهاز وحدة معالجة رسومات افتراضية واحدة، والتي ستظهر على شكل
/dev/dri/card0.خصِّص مخازن مؤقتة أمامية وخلفية باستخدام Linux DRM API.
ننصحك باستخدام
minigbm'sgbm_bo_create()والحصول على واصف ملف DMA-BUF باستخدامgbm_bo_get_fd().أنشئ مخازن مؤقتة لبرنامج OpenGL تستند إلى المخازن المؤقتة التي تم تخصيصها.
أنشئ
EGLImageمن مخزن DRM باستخدامeglCreateImageKHRمعEGL_LINUX_DMA_BUF_EXT(منEGL_EXT_image_dma_buf_importالإضافة).أنشئ مادة عرض GL واستخدِم
glEGLImageTargetTexture2DOES(منGL_OES_EGL_imageالإضافة) لضبط مساحة تخزين مادة العرض على الـEGLImageمن الخطوة السابقة.أنشئ مخزنًا مؤقتًا لبرنامج OpenGL واستخدِم
glFramebufferTexture2Dلضبط مادته الأساسية على مادة العرض التي تم إنشاؤها في الخطوة السابقة.
لعرض إطار:
اربط أحد المخازن المؤقتة لبرنامج OpenGL التي تم إنشاؤها.
ارسم إطارًا باستخدام واجهات GLES API العادية.
اعرض الإطار على شاشة: استخدِم Linux DRM API (
drmModeAtomicCommit()) لإرسالDRM_MODE_PAGE_FLIP_EVENTمع واصف ملف DMA-BUF الذي يستخدمه المخزن المؤقت لبرنامج OpenGL المرتبط.
إنشاء ناتج الفيديو من طبقات متعددة
بالنسبة إلى إنشاء طبقات متعددة (مستويات متعددة) باستخدام تسريع الأجهزة، نعتمد على نظام المضيف الذي يعرض كل طبقة كموصّل DRM منفصل (شاشة عرض افتراضية)، وربطها بموقع الجهاز أو مسار العرض الصحيح.
لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة إعداد العرض على شاشات متعددة.
إعداد العرض على شاشات متعددة
افتح جهاز DRM
/dev/dri/card*كما في مسار العرض على شاشة واحدة.اعرض موصّلات الشاشة المتاحة.
يتم عرض كل شاشة كموصّل DRM منفصل لجهاز DRM.
لكل موصّل شاشة:
اختَر CRTC متوافقًا مع الموصّل. يحتوي كل موصّل على قائمة ببرامج الترميز المتاحة، ويشير كل برنامج ترميز إلى CRTC التي يمكن استخدامه معها. سيكون هناك دائمًا CRTC واحد على الأقل متوافق.
اختَر مستوى متوافقًا مع CRTC.
أنشئ مخازن مؤقتة لبرنامج OpenGL تستند إلى مخازن مؤقتة لوحدة معالجة الرسومات. تبدو هذه العملية مماثلة للعملية في مسار العرض على شاشة واحدة.
اربط المستوى وCRTC والموصّل، واضبط وضع الفيديو على CRTC.
يمكنك ضبط وضع شاشات متعددة في الوقت نفسه باستخدام واجهة برمجة التطبيقات الذرية لضبط خصائص DRM التالية لكل موصّل وCRTC ومجموعة مستويات.
القائمة الكاملة بالخصائص الضرورية:
الهدف الخاصية النوع الوصف موصل CRTC_IDرقم تعريف CRTC رقم تعريف CRTC المطلوب تعيينه للموصّل CRTC MODE_IDرقم تعريف blob رقم تعريف blob خاصية تم إنشاؤه باستخدام drmModeCreatePropertyBlob، ويحتوي على بنيةdrmModeModeInfoلوضع الفيديو المحدّدCRTC ACTIVEقيمة منطقية (Bool) trueلوضع علامة "نشط" على CRTCمستوى FB_IDرقم تعريف المخزن المؤقت لبرنامج OpenGL رقم تعريف المخزن المؤقت لبرنامج OpenGL الذي سيتم عرضه على الشاشة مستوى SRC_Xبكسل الإحداثي X لمستطيل صورة مصدر المخزن المؤقت لبرنامج OpenGL مستوى SRC_Yبكسل الإحداثي Y لمستطيل صورة مصدر المخزن المؤقت لبرنامج OpenGL مستوى SRC_Wنقطة ثابتة 16.16 عرض مستطيل صورة مصدر المخزن المؤقت لبرنامج OpenGL (بكسل تم إزاحتها إلى اليسار بمقدار 16 بت) مستوى SRC_Hنقطة ثابتة 16.16 ارتفاع مستطيل صورة مصدر المخزن المؤقت لبرنامج OpenGL (بكسل تم إزاحتها إلى اليسار بمقدار 16 بت) مستوى CRTC_Xبكسل الإحداثي X لمستطيل صورة وجهة CRTC مستوى CRTC_Yبكسل الإحداثي Y لمستطيل صورة وجهة CRTC مستوى CRTC_Wبكسل عرض مستطيل صورة وجهة CRTC مستوى CRTC_Hبكسل ارتفاع مستطيل صورة وجهة CRTC ابدأ حلقة العرض:
انتظِر حدث قلب الصفحة على CRTC قبل عرض الإطار التالي.
اعرض إطارًا واعرضه على الشاشة من خلال جدولة قلب صفحة لـ CRTC والمخزن المؤقت لبرنامج OpenGL المحدّدَين.