سؤال

لا بد لي من تحويل العديد من مقاطع الفيديو الكاملة (720 × 576@25) من YUV 4: 2: 2 إلى RGB ، في الوقت الحقيقي ، وربما تغيير حجم مخصص لكل منهما. لقد فكرت في استخدام وحدة معالجة الرسومات ، كما رأيت بعض الأمثلة التي تفعل هذا فقط (باستثناء أنه 4: 4: 4 ، لذا فإن BPP هو نفسه في المصدر والمصدر)- http://www.fourcc.org/source/yuv420p-opengl-glslang.c

ومع ذلك ، ليس لدي أي خبرة في استخدام GPU's ولست متأكدًا مما يمكن القيام به. المثال ، كما أفهمه ، فقط يحول إطار الفيديو إلى YUV ويعرضه في الشاشة.

هل من الممكن الحصول على الإطار المعالج بدلاً من ذلك؟ هل يستحق الأمر الجهد المبذول لإرساله إلى وحدة معالجة الرسومات ، وتحويله ، وإرساله مرة أخرى إلى الذاكرة الرئيسية ، أم أنها ستقتل الأداء؟

كونه خاصًا بالمنصة ، على افتراض أنني أعمل على Windows ، هل من الممكن الحصول على سطح OpenGL أو Direcdraw من نافذة حتى يمكن لقياس GPU رسمه مباشرةً؟

هل كانت مفيدة؟

المحلول

السؤال الحقيقي هو ، ماذا تأمل في الخروج من هذا؟

وفقًا لمعدل الإطار الذي تتلقى فيه الفيديو ، يمكنك استخدام شيء مثل Primitives Performance Intel للقيام بالعمليات التي تحتاجها بسهولة ومواكبة الدفق.

إذا كنت ترغب في معرفة كيفية القيام برمجة GPU ، فهذه مشكلة سهلة لطيفة يمكنك تنفيذها.

من الممكن الحصول على الإطار المعالج عن طريق إجراء إعادة استعراض من وحدة معالجة الرسومات إلى الذاكرة. سيختلف الميكانيكي الفعلي اعتمادًا على واجهة برمجة التطبيقات التي تستخدمها (OpenGL ، DirectX ، CUDA ، OpenCl). لقد فعلت ذلك بفيديو دقة أكبر بكثير وما زلت مواكبة دفق 25 إطارًا في الثانية. ومع ذلك ، كل هذا يعتمد على الأجهزة التي ستستخدمها.

لدى DirectX و OpenGL برامج تعليمية رائعة حول استخدام أسطح Windows كأهداف عرض.

نصائح أخرى

لقد قمت بالفعل ببرمجة هذا الأمر لـ CUDA في C ، و PTHReads واحد في C. (فقط للمتعة ، رغم أنه ، مانع لك.) ووجدت أن وحدة معالجة الرسومات تعمل بسرعة لدرجة أنك تنفق 50-80 ٪ من وقتك في إرسال البيانات مرة أخرى والخلف ، حتى لو قمت بملء ذاكرة وحدة معالجة الرسومات في كل مرة. بسبب هذا ، قامت وحدة المعالجة المركزية بهذا العمل إلى حد كبير بنفس سرعة وحدة معالجة الرسومات. هذه المشكلة صديقة للغاية لخيط الخيط كما قد تكون قد اكتشفت ، لذلك مع الأجهزة الحديثة ، فإن عرض النطاق الترددي للذاكرة هو أكبر مشكلة.

لقد اختبرت هذا باستخدام Core i7 كوحدة المعالجة المركزية ، و GeForce 8800GT/GTX 285 كبطاقة رسومات. GTX285 تمت معالجته AFAIK 1500FPS من الفيديو 1920x1080 ، لذلك بغض النظر عن ما تختاره ، ستكون الأمور سريعة بشكل كبير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top