سؤال

أنا أستخدم MediaCodec API في أحد تطبيقاتي.لقد استخدمت الكود من bigflake والتطبيق يعمل بشكل جيد.لكن ما زلت غير قادر على فهم المعلمة timeoutUs في كلتا الوظيفتين dequeueInputBuffer() والوظيفة dequeueOutputBuffer() حتى بعد القراءة عنها في مرجع API.سيكون أمرًا رائعًا أن يتمكن أي شخص من شرح استخدام هذه المعلمة وتأثيرها بشكل جيد.وهل يجب أن يكون هو نفسه في كل من استدعاءات الوظائف المذكورة أعلاه؟

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

المحلول

حسنًا، الفكرة الرئيسية هي أن عمل مكونات طبقة MediaCodec داخليًا غير متزامن.لذلك عندما تتصل dequeueInputBuffer() أو dequeueOutputBuffer() لم يتم تنفيذ أي عمل فعلي في مؤشر ترابط الاستدعاء، ما عليك سوى التحقق من حالة المكون الداخلي أثناء المهلة المحددة حتى تصبح الاستجابة جاهزة أو تنتهي المهلة.من تجربتي، حتى تخصيص المخزن المؤقت يكون غير متزامن، لذا إذا لم يكن هناك مخزن مؤقت داخلي جاهز لإيقافه...يمكن أن تؤدي المهلة الصغيرة إلى INFO_TRY_AGAIN_LATER.ولكن بشكل أساسي مخصص لفك التشفير/التشفير.يمكنك إرسال إطار الإدخال للمعالجة عن طريق مكالمة غير محظورة، وتتم المعالجة في مؤشر ترابط آخر ويمكنك التحقق من جاهزية إطار الإخراج أيضًا مع مكالمة غير محظورة.لذا فإن جميع خطوط الأنابيب لا تنطفئ عند كل عملية ثقيلة (فك التشفير\التشفير\إلخ) ويمكنها إجراء عمليات أخرى

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