एंड्रॉइड 12 में पेश की गई संगत मीडिया ट्रांसकोडिंग एक ऐसी सुविधा है जो ऐप्स के साथ संगतता बनाए रखते हुए उपकरणों को वीडियो कैप्चर करने के लिए एचईवीसी जैसे अधिक आधुनिक, स्टोरेज-कुशल मीडिया प्रारूपों का उपयोग करने की अनुमति देती है। इस सुविधा के साथ, डिवाइस निर्माता स्टोरेज और बैंडविड्थ आवश्यकताओं को कम करते हुए वीडियो की गुणवत्ता में सुधार करने के लिए डिफ़ॉल्ट रूप से AVC के बजाय HEVC का उपयोग कर सकते हैं। संगत मीडिया ट्रांसकोडिंग सक्षम वाले उपकरणों के लिए, एंड्रॉइड स्वचालित रूप से HEVC या HDR जैसे प्रारूपों में रिकॉर्ड किए गए वीडियो (एक मिनट तक की लंबाई) को परिवर्तित कर सकता है, जब वीडियो किसी ऐसे ऐप द्वारा खोले जाते हैं जो प्रारूप का समर्थन नहीं करता है। यह ऐप्स को डिवाइस पर नए प्रारूपों में वीडियो कैप्चर किए जाने पर भी काम करने की अनुमति देता है।
संगत मीडिया ट्रांसकोडिंग सुविधा डिफ़ॉल्ट रूप से बंद है। मीडिया ट्रांसकोडिंग का अनुरोध करने के लिए, ऐप्स को अपनी मीडिया क्षमताओं की घोषणा करनी होगी। मीडिया क्षमताओं की घोषणा के बारे में अधिक जानकारी के लिए, एंड्रॉइड डेवलपर्स साइट पर संगत मीडिया ट्रांसकोडिंग देखें।
यह काम किस प्रकार करता है
संगत मीडिया ट्रांसकोडिंग सुविधा में दो मुख्य भाग होते हैं:
- मीडिया फ्रेमवर्क में ट्रांसकोडिंग सेवाएँ: ये सेवाएँ कम विलंबता और उच्च गुणवत्ता वाले रूपांतरणों के लिए हार्डवेयर का उपयोग करके फ़ाइलों को एक प्रारूप से दूसरे प्रारूप में परिवर्तित करती हैं। इसमें ट्रांसकोडिंग एपीआई, ट्रांसकोडिंग सेवा, कस्टम फ़िल्टर के लिए एक ओईएम प्लगइन और हार्डवेयर शामिल हैं। अधिक जानकारी के लिए, आर्किटेक्चर अवलोकन देखें।
- मीडिया प्रदाताओं में संगत मीडिया ट्रांसकोडिंग सुविधा: मीडिया प्रदाताओं में पाया जाने वाला यह घटक मीडिया फ़ाइलों तक पहुंचने वाले ऐप्स को रोकता है और ऐप की घोषित क्षमताओं के आधार पर या तो मूल फ़ाइल या ट्रांसकोडेड फ़ाइल परोसता है। यदि कोई ऐप मीडिया फ़ाइल के प्रारूप का समर्थन करता है, तो किसी विशेष प्रबंधन की आवश्यकता नहीं है। यदि कोई ऐप प्रारूप का समर्थन नहीं करता है, तो ऐप फ़ाइल तक पहुंचने पर फ्रेमवर्क फ़ाइल को पुराने प्रारूप, जैसे एवीसी, में परिवर्तित कर देता है।
चित्र 1 मीडिया ट्रांसकोडिंग प्रक्रिया का अवलोकन दिखाता है।
चित्र 1. संगत मीडिया ट्रांसकोडिंग का अवलोकन।
समर्थित प्रारूप
संगत मीडिया ट्रांसकोडिंग सुविधा निम्नलिखित प्रारूप रूपांतरणों का समर्थन करती है:
- HEVC (8-बिट) से AVC: कोडेक रूपांतरण एक मीडियाकोडेक डिकोडर और एक मीडियाकोड एनकोडर को जोड़कर किया जाता है।
- एचडीआर10+ (10-बिट) से एवीसी (एसडीआर): एचडीआर से एसडीआर रूपांतरण मीडियाकोडेक इंस्टेंस और डिकोडर इंस्टेंस में एक विक्रेता प्लगइन हुक का उपयोग करके किया जाता है। अधिक जानकारी के लिए, एचडीआर से एसडीआर एन्कोडिंग देखें।
समर्थित सामग्री स्रोत
संगत मीडिया ट्रांसकोडिंग सुविधा मूल ओईएम कैमरा ऐप द्वारा उत्पन्न ऑन-डिवाइस मीडिया का समर्थन करती है जो प्राथमिक बाहरी वॉल्यूम में DCIM/Camera/
फ़ोल्डर में संग्रहीत होती है। यह सुविधा सेकेंडरी स्टोरेज पर मीडिया का समर्थन नहीं करती है। ईमेल या एसडी कार्ड के माध्यम से डिवाइसों को भेजी गई सामग्री समर्थित नहीं है।
ऐप्स विभिन्न फ़ाइलपथों के आधार पर फ़ाइलों तक पहुँचते हैं। निम्नलिखित उन फ़ाइलपथों का वर्णन करता है जहां ट्रांसकोडिंग सक्षम या बायपास की गई है:
ट्रांसकोडिंग सक्षम:
- मीडियास्टोर एपीआई के माध्यम से ऐप एक्सेस
- जावा और मूल कोड सहित सीधे फ़ाइलपथ एपीआई के माध्यम से ऐप तक पहुंच
- स्टोरेज एक्सेस फ्रेमवर्क (SAF) के माध्यम से ऐप एक्सेस
- ओएस शेयर शीट इरादों के माध्यम से ऐप का उपयोग। (केवल मीडियास्टोर यूआरआई)
- फ़ोन से पीसी पर एमटीपी/पीटीपी फ़ाइल स्थानांतरण
ट्रांसकोडिंग को बायपास किया गया:
- एसडी कार्ड को बाहर निकालकर किसी डिवाइस से फ़ाइल स्थानांतरित करना
- नियरबाई शेयर या ब्लूटूथ ट्रांसफर जैसे विकल्पों का उपयोग करके फ़ाइलों को एक डिवाइस से दूसरे डिवाइस पर स्थानांतरित करना।
ट्रांसकोडिंग के लिए अनुकूलित फ़ाइलपथ जोड़ें
डिवाइस निर्माता वैकल्पिक रूप से DCIM/
निर्देशिका के अंतर्गत मीडिया ट्रांसकोडिंग के लिए फ़ाइल पथ जोड़ सकते हैं। DCIM/
निर्देशिका के बाहर का कोई भी पथ अस्वीकार कर दिया जाता है। वाहक आवश्यकताओं या स्थानीय नियमों को पूरा करने के लिए ऐसे फ़ाइलपथ को जोड़ने की आवश्यकता हो सकती है।
फ़ाइलपथ जोड़ने के लिए, ट्रांसकोड पथ रनटाइम रिसोर्स ओवरले (आरआरओ) , config_supported_transcoding_relative_paths
का उपयोग करें। फ़ाइलपथ कैसे जोड़ें इसका एक उदाहरण निम्नलिखित है:
<string-array name="config_supported_transcoding_relative_paths" translatable="false">
<item>DCIM/JCF/</item>
</string-array>
कॉन्फ़िगर किए गए फ़ाइलपथ को सत्यापित करने के लिए, इसका उपयोग करें:
adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20
वास्तुकला सिंहावलोकन
यह अनुभाग मीडिया ट्रांसकोडिंग सुविधा की वास्तुकला का वर्णन करता है।
चित्र 2. मीडिया ट्रांसकोडिंग आर्किटेक्चर।
मीडिया ट्रांसकोडिंग आर्किटेक्चर में निम्नलिखित घटक शामिल हैं:
- MediaTranscodingManager सिस्टम API: इंटरफ़ेस जो क्लाइंट को MediaTranscoding सेवा के साथ संचार करने की अनुमति देता है। MediaProvider मॉड्यूल इस API का उपयोग करता है।
- MediaTranscodingService: मूल सेवा जो क्लाइंट कनेक्शन का प्रबंधन करती है, ट्रांसकोडिंग अनुरोधों को शेड्यूल करती है, और
TranscodingSessions
के लिए बहीखाता का प्रबंधन करती है। - मीडियाट्रांसकोडर: मूल पुस्तकालय जो ट्रांसकोडिंग करता है। यह लाइब्रेरी मॉड्यूल के साथ संगत होने के लिए मीडिया फ्रेमवर्क एनडीके के शीर्ष पर बनाई गई है।
संगत मीडिया ट्रांसकोडिंग सुविधा सेवा और मीडिया ट्रांसकोडर दोनों में ट्रांसकोडिंग मेट्रिक्स को लॉग करती है। समय पर बग फिक्स और अपडेट की अनुमति देने के लिए क्लाइंट साइड और सर्विस साइड कोड MediaProvider मॉड्यूल में हैं।
फ़ाइल पहुँच
संगत मीडिया ट्रांसकोडिंग को यूजरस्पेस (FUSE) फ़ाइल सिस्टम में फ़ाइल सिस्टम के शीर्ष पर बनाया गया है, जिसका उपयोग स्कोप्ड स्टोरेज के लिए किया जाता है। FUSE मीडियाप्रोवाइडर मॉड्यूल को उपयोगकर्ता स्थान में फ़ाइल संचालन की जांच करने और अनुमति देने, अस्वीकार करने या पहुंच को संशोधित करने की नीति के आधार पर फ़ाइलों तक पहुंच प्राप्त करने में सक्षम बनाता है।
जब कोई ऐप किसी फ़ाइल तक पहुंचने का प्रयास करता है, तो FUSE डेमॉन ऐप से फ़ाइल पढ़ने की पहुंच को रोक देता है। यदि ऐप नए प्रारूप (जैसे HEVC) का समर्थन करता है, तो मूल फ़ाइल वापस आ जाती है। यदि ऐप प्रारूप का समर्थन नहीं करता है, तो फ़ाइल को पुराने प्रारूप (जैसे एवीसी) में ट्रांसकोड किया जाता है या ट्रांसकोडेड संस्करण उपलब्ध होने पर कैश से वापस कर दिया जाता है।
ट्रांसकोड की गई फ़ाइलों का अनुरोध करें
संगत मीडिया ट्रांसकोडिंग सुविधा डिफ़ॉल्ट रूप से अक्षम है, जिसका अर्थ है कि यदि डिवाइस HEVC का समर्थन करता है, तो एंड्रॉइड फ़ाइलों को ट्रांसकोड नहीं करता है जब तक कि किसी ऐप द्वारा मैनिफ़ेस्ट फ़ाइल या फ़ोर्स ट्रांसकोड सूची में निर्दिष्ट न किया गया हो।
ऐप्स निम्नलिखित विकल्पों का उपयोग करके ट्रांसकोडेड संपत्तियों का अनुरोध कर सकते हैं:
- मैनिफ़ेस्ट फ़ाइल में असमर्थित प्रारूप घोषित करें। विवरण के लिए, संसाधन में क्षमताओं की घोषणा करें और कोड में क्षमताओं की घोषणा करें देखें।
- MediaProvider मॉड्यूल में शामिल फ़ोर्स ट्रांसकोड सूची में ऐप्स जोड़ें। यह उन ऐप्स के लिए ट्रांसकोडिंग सक्षम करता है जिन्होंने अपनी मेनिफेस्ट फ़ाइल अपडेट नहीं की है। एक बार जब कोई ऐप अपनी मेनिफेस्ट फ़ाइल को असमर्थित प्रारूपों के साथ अपडेट कर देता है, तो उसे फ़ोर्स ट्रांसकोड सूची से हटा दिया जाना चाहिए। डिवाइस निर्माता पैच सबमिट करके या बग की रिपोर्ट करके अपने ऐप्स को फ़ोर्स ट्रांसकोड सूची से जोड़ने या हटाने के लिए नामांकित कर सकते हैं। एंड्रॉइड टीम समय-समय पर सूची की समीक्षा करती है और ऐप्स को सूची से हटा सकती है।
- रन टाइम पर ऐप संगतता ढांचे के साथ समर्थित प्रारूपों को अक्षम करें (उपयोगकर्ता सेटिंग्स में प्रत्येक ऐप के लिए इसे अक्षम भी कर सकते हैं)।
-
openTypedAssetFileDescriptor
API के साथ असमर्थित प्रारूपों को स्पष्ट रूप से निर्दिष्ट करते हुएMediaStore
के साथ एक फ़ाइल खोलें।
यूएसबी ट्रांसफर (डिवाइस से पीसी तक) के लिए, ट्रांसकोडिंग डिफ़ॉल्ट रूप से अक्षम है लेकिन उपयोगकर्ता यूएसबी प्राथमिकता सेटिंग स्क्रीन में कन्वर्ट वीडियो को एवीसी टॉगल का उपयोग करके ट्रांसकोडिंग सक्षम करना चुन सकते हैं जैसा कि चित्र 3 में दिखाया गया है।
चित्र 3. USB प्राथमिकताएँ स्क्रीन में मीडिया ट्रांसकोडिंग सक्षम करने के लिए टॉगल करें।
ट्रांसकोड की गई फ़ाइलों के अनुरोध पर प्रतिबंध
ट्रांसकोडिंग अनुरोधों को विस्तारित अवधि के लिए सिस्टम संसाधनों को लॉक करने से रोकने के लिए, ट्रांसकोडिंग सत्रों का अनुरोध करने वाले ऐप्स इन तक सीमित हैं:
- लगातार 10 सत्र
- कुल चलने का समय तीन मिनट
यदि कोई ऐप इन सभी प्रतिबंधों को पार कर जाता है, तो फ्रेमवर्क मूल फ़ाइल डिस्क्रिप्टर लौटा देता है।
डिवाइस आवश्यकताएँ
संगत मीडिया ट्रांसकोडिंग सुविधा का समर्थन करने के लिए, उपकरणों को निम्नलिखित आवश्यकताओं को पूरा करना होगा:
- डिवाइस में मूल कैमरा ऐप पर डिफ़ॉल्ट रूप से HEVC एन्कोडिंग सक्षम है
- (डिवाइस एचडीआर से एसडीआर ट्रांसकोडिंग का समर्थन करते हैं) डिवाइस एचडीआर वीडियो कैप्चर का समर्थन करता है
मीडिया ट्रांसकोडिंग के लिए डिवाइस के प्रदर्शन को सुनिश्चित करने के लिए, वीडियो हार्डवेयर और स्टोरेज रीड/राइट एक्सेस प्रदर्शन को अनुकूलित किया जाना चाहिए। जब मीडिया कोडेक्स को 1
के बराबर प्राथमिकता के साथ कॉन्फ़िगर किया जाता है, तो कोडेक्स को उच्चतम संभव थ्रूपुट पर काम करना चाहिए। हम अनुशंसा करते हैं कि ट्रांसकोडिंग प्रदर्शन न्यूनतम 200 एफपीएस प्राप्त करे। अपने हार्डवेयर प्रदर्शन का परीक्षण करने के लिए, frameworks/av/media/libmediatranscoding/transcoder/benchmark
पर मीडिया ट्रांसकोडर बेंचमार्क चलाएं।
मान्यकरण
संगत मीडिया ट्रांसकोडिंग सुविधा को मान्य करने के लिए, निम्नलिखित सीटीएस परीक्षण चलाएँ:
-
android.media.mediatranscoding.cts
-
android.mediaprovidertranscode.cts
विश्व स्तर पर मीडिया ट्रांसकोडिंग सक्षम करें
ट्रांसकोडिंग के साथ मीडिया ट्रांसकोडिंग फ्रेमवर्क या ऐप व्यवहार का परीक्षण करने के लिए, आप विश्व स्तर पर संगत मीडिया ट्रांसकोडिंग सुविधा को सक्षम या अक्षम कर सकते हैं। सेटिंग्स > सिस्टम > डेवलपर > मीडिया ट्रांसकोडिंग डेवलपर विकल्प पृष्ठ में, ओवरराइड ट्रांसकोडिंग डिफ़ॉल्ट टॉगल को चालू पर सेट करें और फिर ट्रांसकोडिंग सक्षम करें टॉगल को चालू या बंद पर सेट करें। यदि यह सेटिंग सक्षम है, तो आपके द्वारा विकसित किए जा रहे ऐप्स के अलावा अन्य ऐप्स की पृष्ठभूमि में मीडिया ट्रांसकोडिंग हो सकती है।
ट्रांसकोडिंग स्थिति जांचें
परीक्षण के दौरान, आप वर्तमान और पिछले ट्रांसकोडिंग सत्रों सहित ट्रांसकोडिंग स्थिति की जांच करने के लिए निम्नलिखित एडीबी शेल कमांड का उपयोग कर सकते हैं:
adb shell dumpsys media.transcoding
वीडियो की लंबाई सीमा बढ़ाएँ
परीक्षण उद्देश्यों के लिए, आप निम्नलिखित कमांड का उपयोग करके ट्रांसकोडिंग के लिए एक मिनट की वीडियो लंबाई सीमा को बढ़ा सकते हैं। इस आदेश को चलाने के बाद रीबूट की आवश्यकता हो सकती है।
adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>
एओएसपी स्रोत और संदर्भ
संगत मीडिया ट्रांसकोडिंग से संबंधित AOSP स्रोत कोड निम्नलिखित हैं।
ट्रांसकोडिंग सिस्टम एपीआई (केवल MediaProvider द्वारा उपयोग किया जाता है)
एप्लीकेशनमीडियाकैपेबिलिटीज एपीआई
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
मीडियाट्रांसकोडिंग सेवा
-
frameworks/av/services/mediatranscoding/
-
frameworks/av/media/libmediatranscoding/
-
नेटिव मीडियाट्रांसकोडर
-
frameworks/av/media/libmediatranscoding/transcoder
-
मीडियाट्रांसकोडर के लिए एचडीआर नमूना प्लगइन
MediaProvider फ़ाइल अवरोधन और ट्रांसकोडिंग कोड
मीडियाट्रांसकोडर बेंचमार्क
-
frameworks/av/media/libmediatranscoding/transcoder/benchmark
-
सीटीएस परीक्षण
-
cts/tests/tests/mediatranscoding/
-
एचडीआर से एसडीआर एन्कोडिंग
एचडीआर से एसडीआर एन्कोडिंग का समर्थन करने के लिए, डिवाइस निर्माता /platform/frameworks/av/media/codec2/hidl/plugin/
में स्थित AOSP नमूना कोडेक 2.0 फ़िल्टर प्लगइन का उपयोग कर सकते हैं। यह अनुभाग बताता है कि फ़िल्टर प्लगइन कैसे काम करता है, प्लगइन को कैसे कार्यान्वित करें और प्लगइन का परीक्षण कैसे करें।
यदि किसी डिवाइस में कोई प्लगइन शामिल नहीं है जो एचडीआर से एसडीआर एन्कोडिंग का समर्थन करता है, तो एचडीआर वीडियो तक पहुंचने वाले ऐप को मूल फ़ाइल डिस्क्रिप्टर मिलता है, भले ही ऐप की मीडिया क्षमताओं को मेनिफेस्ट में घोषित किया गया हो।
यह काम किस प्रकार करता है
यह अनुभाग कोडेक 2.0 फ़िल्टर प्लगइन के सामान्य व्यवहार का वर्णन करता है।
पृष्ठभूमि
एंड्रॉइड कोडेक 2.0 इंटरफ़ेस और android.hardware.media.c2
HAL इंटरफ़ेस के बीच android::hardware::media::c2
पर एक अनुकूलन परत कार्यान्वयन प्रदान करता है। फ़िल्टर प्लगइन्स के लिए, AOSP में एक रैपर तंत्र शामिल होता है जो डिकोडर्स को फ़िल्टर प्लगइन्स के साथ लपेटता है। MediaCodec
इन लिपटे घटकों को फ़िल्टरिंग सुविधाओं के साथ डिकोडर के रूप में पहचानता है।
अवलोकन
FilterWrapper
वर्ग विक्रेता कोडेक्स लेता है और लिपटे हुए कोडेक्स को वापस media.c2
अनुकूलन परत पर लौटाता है। FilterWrapper
वर्ग FilterWrapper::Plugin
एपीआई के माध्यम से libc2filterplugin.so
लोड करता है और प्लगइन से उपलब्ध फिल्टर को रिकॉर्ड करता है। निर्माण पर, FilterWrapper
सभी उपलब्ध फ़िल्टर को तुरंत चालू कर देता है। केवल वे फ़िल्टर जो बफ़र को बदलते हैं, प्रारंभ में प्रारंभ किए जाते हैं।
चित्र 1. फ़िल्टर प्लगइन आर्किटेक्चर।
फ़िल्टर प्लगइन इंटरफ़ेस
FilterPlugin.h
इंटरफ़ेस फ़िल्टर को उजागर करने के लिए निम्नलिखित एपीआई को परिभाषित करता है:
std::shared_ptr<C2ComponentStore>getComponentStore()
एक
C2ComponentStore
ऑब्जेक्ट लौटाता है जिसमें फ़िल्टर शामिल हैं। यह विक्रेता के कोडेक 2.0 कार्यान्वयन द्वारा उजागर की गई बातों से अलग है। आमतौर पर, इस स्टोर में केवलFilterWrapper
क्लास द्वारा उपयोग किए जाने वाले फ़िल्टर होते हैं।bool describe(C2String name, Descriptor *desc)
C2ComponentStore
पर जो उपलब्ध है उसके अतिरिक्त फ़िल्टर का वर्णन करता है। निम्नलिखित विवरण परिभाषित हैं:-
controlParam
: पैरामीटर जो फ़िल्टर के व्यवहार को नियंत्रित करते हैं। उदाहरण के लिए, एचडीआर से एसडीआर टोन-मैपर के लिए, नियंत्रण पैरामीटर लक्ष्य स्थानांतरण फ़ंक्शन है। -
affectedParams
: पैरामीटर जो फ़िल्टरिंग परिचालन से प्रभावित होते हैं। उदाहरण के लिए, एचडीआर से एसडीआर टोन-मैपर के लिए, प्रभावित पैरामीटर रंग पहलू हैं।
-
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)
यदि फ़िल्टर घटक बफ़र को बदल देता है तो
true
लौटाता है। उदाहरण के लिए, यदि लक्ष्य ट्रांसफर फ़ंक्शन एसडीआर है और इनपुट ट्रांसफर फ़ंक्शन एचडीआर (एचएलजी या पीक्यू) है तो टोन-मैपिंग फ़िल्टरtrue
रिटर्न देता है।
फ़िल्टररैपर विवरण
यह अनुभाग FilterWrapper
वर्ग के विवरण का वर्णन करता है।
निर्माण
लपेटा हुआ घटक निर्माण के समय अंतर्निहित डिकोडर और सभी परिभाषित फ़िल्टर को तुरंत सक्रिय करता है।
क्वेरी और कॉन्फ़िगरेशन
लपेटा हुआ घटक फ़िल्टर विवरण के अनुसार आने वाले पैरामीटर को प्रश्नों या कॉन्फ़िगरेशन अनुरोधों से अलग करता है। उदाहरण के लिए, फ़िल्टर नियंत्रण पैरामीटर का कॉन्फ़िगरेशन संबंधित फ़िल्टर पर रूट किया जाता है, और फ़िल्टर से प्रभावित पैरामीटर क्वेरी पर मौजूद होते हैं (डिकोडर से पढ़ने के बजाय जिसमें अप्रभावित पैरामीटर होते हैं)।
चित्र 2. क्वेरी और कॉन्फ़िगरेशन.
शुरू
शुरुआत में, लपेटा हुआ घटक डिकोडर और सभी फिल्टर शुरू करता है जो बफ़र्स को बदलते हैं। यदि कोई फ़िल्टर सक्षम नहीं है, तो लपेटा हुआ घटक डिकोडर और पास-थ्रू बफ़र्स शुरू करता है और डिकोडर को ही कमांड भेजता है।
बफ़र हैंडलिंग
चित्रा 3. बफर हैंडलिंग।
लपेटे गए डिकोडर में पंक्तिबद्ध बफ़र्स अंतर्निहित डिकोडर पर जाते हैं। लपेटा हुआ घटक onWorkDone_nb()
कॉलबैक के माध्यम से डिकोडर से आउटपुट बफर को पकड़ता है, और फिर इसे फ़िल्टर पर कतारबद्ध करता है। अंतिम फ़िल्टर से अंतिम आउटपुट बफ़र क्लाइंट को रिपोर्ट किया जाता है।
इस बफ़र हैंडलिंग को काम करने के लिए, लपेटे गए घटक को C2PortBlockPoolsTuning
को अंतिम फ़िल्टर पर कॉन्फ़िगर करना होगा ताकि फ़्रेमवर्क आउटपुट अपेक्षित ब्लॉक पूल से बफ़र हो।
रोकें, रीसेट करें और छोड़ें
रुकने पर, लपेटा हुआ घटक डिकोडर और प्रारंभ किए गए सभी सक्षम फ़िल्टर को रोक देता है। रीसेट और रिलीज़ होने पर, सभी घटक रीसेट या रिलीज़ हो जाते हैं, भले ही वे सक्षम हों या नहीं।
नमूना फ़िल्टर प्लगइन लागू करें
प्लगइन को सक्षम करने के लिए, निम्न कार्य करें:
- किसी लाइब्रेरी में
FilterPlugin
इंटरफ़ेस लागू करें और इसे/vendor/lib[64]/libc2filterplugin.so.
- यदि आवश्यक हो तो
mediacodec.te
में अतिरिक्त अनुमतियाँ जोड़ें। - अनुकूलन परत को Android 12 में अपडेट करें और
media.c2
सेवा का पुनर्निर्माण करें।
प्लगइन का परीक्षण करें
नमूना प्लगइन का परीक्षण करने के लिए, निम्नलिखित कार्य करें:
- डिवाइस को पुन: बनाएँ और फ़्लैश करें।
निम्नलिखित कमांड का उपयोग करके नमूना प्लगइन बनाएं:
m sample-codec2-filter-plugin
डिवाइस को पुनः माउंट करें और विक्रेता प्लगइन का नाम बदलें ताकि इसे कोडेक सेवा द्वारा पहचाना जा सके।
adb root adb remount adb reboot adb wait-for-device adb root adb remount adb push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \ /vendor/lib64/libc2filterplugin.so adb push /out/target/<...>/lib/sample-codec2-filter-plugin.so \ /vendor/lib/libc2filterplugin.so adb reboot