التحكم في تخصيص المخزن المؤقت V4L2/VB2؟
-
21-12-2019 - |
سؤال
أحاول كتابة برنامج تشغيل متوافق مع V4L2 لجهاز كاميرا خاص لدي، لكن الجهاز لا يبدو ملائمًا بشكل خاص لنظام المخزن المؤقت الخاص بـ V4L2.بدلاً من المخازن المؤقتة المخصصة بشكل منفصل، فإنه يريد كتلة واحدة متجاورة من الذاكرة قادرة على الاحتفاظ بمجموعة # من المخازن المؤقتة (عادةً 4)، ثم يوفر سجل حالة يخبرك بما هو الأحدث (يتم تحديثه بعد كل إطار DMA'ed إلى المضيف).لذلك فهو يحتاج بشكل أساسي إلى قطعة ذاكرة واحدة كبيرة مخصصة لـ DMA للعمل معها، وليس 4 قطع منفصلة على الأرجح.
كيف يمكنني استخدام هذا مع V4L؟كل ما أرى عنه VIDIOC_CREATE_BUFS
, VIDIOC_REQBUFS
وهكذا يتم التخصيص الداخلي للمخازن المؤقتة، ولا يمكنني الحصول على أي شيء يعتمد على V4L (مثل qv4l2
للعمل دون نجاح QBUF
و DQBUF
الذي يستخدم بنيتها الداخلية.
كيف يمكن القيام بذلك؟
المحلول
للاستكمال فقط، وجدت أخيرًا حلاً في برنامج التشغيل "meye".لقد قمت بإزالة كل شيء VB2 وكتبت طلباتي الخاصة، وquerybuf، وqbuf، وdqbuf، بالإضافة إلى إجراءات mmap الخاصة بي للتعامل مع التخصيص.وكل شيء يعمل!