SDV Media: إدارة شاشات العرض

تعرض SDV Media الشاشات المتاحة لتطبيقات المصنّعين الأصليين للأجهزة باستخدام واجهة برمجة تطبيقات Linux DRM.

التفاعل بين مكونات إدارة الحقوق الرقمية

الشكل 1: التفاعل بين مكوّنات إدارة الحقوق الرقمية

  • مخزن مؤقت للإطارات هو مصدر لبيانات البكسل، ويتم الاحتفاظ بنسخة احتياطية منه في بعض مخازن الذاكرة المؤقتة المخصّصة خارجيًا.

  • الطائرة هي مصدر صور تستخدمه CRTC. وهي مرتبطة بمخزن مؤقت للإطارات، ويمكن أن تمثّل عرضًا تم اقتصاصه من المخزن المؤقت للإطارات.

  • تمثّل CRTC مسار عرض إجماليًا. ويمكنه دمج عدة طبقات لإنشاء الفيديو النهائي، وإرسال الناتج إلى عدة برامج ترميز.

  • يحوّل برنامج الترميز مخرجات الفيديو من CRTC إلى شكل مناسب لموصل معيّن.

  • يمثّل الموصّل موصّل شاشة متاحًا. على سبيل المثال، منفذ HDMI.

للحصول على وصف أكثر تفصيلاً، يُرجى الاطّلاع على:

مساحة عرض واجهة برمجة التطبيقات

توفّر شركة SDV Media واجهات إدارة الحقوق الرقمية (DRM) لنظام التشغيل Linux. مع أنّه يمكن استخدامها مباشرةً من خلال استدعاء النظام ioctl، ننصح باستخدام مكتبة مساعدة في مساحة المستخدم عند تطوير التطبيقات. على سبيل المثال:

  • drm-rs crate للغة Rust (يُنصح به)،
  • libdrm للغة C/C++‎. يقدّم drm-kms صفحة الدليل نظرة عامة شاملة على واجهات برمجة التطبيقات واستخدامها.

إعداد العرض على شاشة واحدة

  1. افتح جهاز إدارة الحقوق الرقمية (/dev/dri/card*) واستخدِم واجهات برمجة تطبيقات إدارة الحقوق الرقمية في Linux، على سبيل المثال، من خلال libdrm، في واصف الملف لاختيار الشاشة ووضعها.

    عادةً، يعرض نظام التشغيل المضيف جهازًا واحدًا فقط لوحدة معالجة الرسومات الافتراضية، ويظهر هذا الجهاز على النحو التالي: /dev/dri/card0.

  2. تخصيص المخزن المؤقت الأمامي والخلفي باستخدام واجهة برمجة تطبيقات Linux DRM

    يُنصح باستخدام minigbm gbm_bo_create() والحصول على واصف ملف DMA-BUF باستخدام gbm_bo_get_fd().

  3. أنشِئ مخازن مؤقتة لإطارات GL تستند إلى المخازن المؤقتة المخصّصة.

    1. أنشئ EGLImage من مخزن DRM المؤقت باستخدام eglCreateImageKHR مع EGL_LINUX_DMA_BUF_EXT (من إضافة EGL_EXT_image_dma_buf_import).

    2. أنشئ مادة GL واستخدِم glEGLImageTargetTexture2DOES (من إضافة GL_OES_EGL_image) لضبط مساحة تخزين المادة على EGLImage من الخطوة السابقة.

    3. أنشِئ إطارًا مؤقتًا لـ GL واستخدِم glFramebufferTexture2D لضبط نسخ احتياطي للنسيج الذي تم إنشاؤه في الخطوة السابقة.

  4. لعرض إطار:

    1. اربط أحد مخازن الإطارات التي تم إنشاؤها في GL.

    2. ارسم إطارًا باستخدام واجهات برمجة تطبيقات GLES العادية.

    3. اعرض الإطار على الشاشة: استخدِم واجهة برمجة التطبيقات Linux DRM API‏ (drmModeAtomicCommit()) لإرسال DRM_MODE_PAGE_FLIP_EVENT مع واصف ملف DMA-BUF الذي يستخدمه إطار المخزن المؤقت GL المرتبط.

إنشاء ناتج فيديو من طبقات متعددة

بالنسبة إلى عملية إنشاء الطبقات المتعددة (اللوحات المتعددة) التي يتم تسريعها باستخدام الأجهزة، نعتمد على النظام المضيف الذي يعرض كل طبقة كأداة ربط منفصلة لإدارة الحقوق الرقمية (شاشة عرض افتراضية)، وربطها بالموقع الجغرافي أو مسار المعالجة الصحيحَين للأجهزة.

اطّلِع على مقالة إعداد العرض على شاشات متعددة لمعرفة التفاصيل.

إعداد العرض على شاشات متعددة

  1. افتح جهاز /dev/dri/card* DRM كما هو الحال في مسار العرض الفردي.

  2. تعرض هذه السمة قائمة بموصلات العرض المتاحة.

    يتم عرض كل شاشة كموصل منفصل لإدارة الحقوق الرقمية (DRM) في جهاز إدارة الحقوق الرقمية.

  3. لكل موصِّل شاشة:

    1. اختَر جهاز تحكّم عن بُعد متوافقًا مع الموصّل. يتضمّن كل موصّل قائمة ببرامج الترميز المتاحة، ويشير كل برنامج ترميز إلى أنواع CRTC التي يمكن استخدامه معها. يتوفّر دائمًا جهاز تحكّم عن بُعد واحد على الأقل متوافق مع CRTC.

      1. اختَر طائرة متوافقة مع هيئة CRTC.

      2. إنشاء مخازن مؤقتة لإطارات إدارة الحقوق الرقمية (DRM) تستند إلى مخازن مؤقتة لوحدة معالجة الرسومات تبدو هذه العملية مماثلة لتلك الخاصة بخيار العرض الفردي.

      3. وصِّل الطائرة وCRTC والموصّل، واضبط وضع الفيديو على CRTC.

        يمكن ضبط وضع شاشات عرض متعددة في الوقت نفسه باستخدام واجهة برمجة التطبيقات الذرية لضبط خصائص إدارة الحقوق الرقمية التالية لكل موصّل وCRTC ومجموعة طائرات.

    في ما يلي القائمة الكاملة بالسمات الضرورية:

    الهدف الخاصيةالنوعالوصف
    رابط العلاقاتCRTC_IDمعرّف CRTCمعرّف CRTC المطلوب تعيينه للموصّل
    CRTCMODE_IDمعرّف Blob معرّف كائن ثنائي كبير الحجم خاص بموقع إلكتروني تم إنشاؤه باستخدام drmModeCreatePropertyBlob، ويحتوي على بنية drmModeModeInfo لوضع الفيديو المحدّد
    CRTCACTIVEقيمة منطقيةtrue لوضع علامة "نشط" على CRTC
    طائرةFB_IDرقم تعريف مخزن الإطاراتمعرّف إطار العرض المؤقت لنظام إدارة الحقوق الرقمية (DRM) الذي سيتم عرضه على الشاشة
    طائرةSRC_Xصورة من البكسلاتالإحداثي X لمستطيل الصورة المصدر لإطار التخزين المؤقت
    طائرةSRC_Yصورة من البكسلاتالإحداثي Y لمستطيل الصورة المصدر في إطار المخزن المؤقت
    طائرةSRC_W16.16 fixed pointعرض مستطيل صورة مصدر إطار العرض (وحدات البكسل التي تم نقلها إلى اليسار بمقدار 16 بت)
    طائرةSRC_H16.16 fixed pointارتفاع مستطيل صورة مصدر إطار العرض (وحدات البكسل التي تم نقلها إلى اليسار بمقدار 16 بت)
    طائرةCRTC_Xصورة من البكسلاتالإحداثي السيني لمستطيل صورة الوجهة في CRTC
    طائرةCRTC_Yصورة من البكسلاتالإحداثي Y لمستطيل صورة الوجهة في CRTC
    طائرةCRTC_Wصورة من البكسلاتعرض مستطيل صورة الوجهة في CRTC
    طائرةCRTC_Hصورة من البكسلاتارتفاع مستطيل صورة وجهة CRTC
  4. أدخِل حلقة العرض:

    1. انتظِر حدث تبديل الصفحة على CRTC قبل عرض الإطار التالي.

    2. عرض إطار على الشاشة من خلال جدولة تبديل الصفحة لإطار CRTC+framebuffer معيّن