इस सुविधा के साथ काम करने वाली मीडिया ट्रांसकोडिंग

Android 12 में काम करने वाली मीडिया ट्रांसकोडिंग सुविधा की मदद से डिवाइस, वीडियो कैप्चर करने के लिए ज़्यादा आधुनिक और स्टोरेज की कम खपत करने वाले मीडिया फ़ॉर्मैट इस्तेमाल कर सकते हैं, जैसे कि HEVC. साथ ही, ऐप्लिकेशन के साथ काम करने की सुविधा बनाए रखते हैं. इस सुविधा की मदद से डिवाइस बनाने वाली कंपनियां, वीडियो क्वालिटी को बेहतर बनाने के लिए डिफ़ॉल्ट रूप से एवीसी के बजाय एचईवीसी का इस्तेमाल कर सकती हैं. इससे डिवाइस का स्टोरेज और बैंडविथ कम हो जाता है. जिन डिवाइसों पर डिवाइस के साथ काम करने वाली मीडिया ट्रांसकोडिंग की सुविधा चालू है उन पर एचईवीसी या एचडीआर जैसे फ़ॉर्मैट में रिकॉर्ड किए गए वीडियो, Android अपने-आप (एक मिनट तक की अवधि वाले) में बदल सकता है. ऐसा तब होता है, जब वीडियो को ऐसे ऐप्लिकेशन से खोला जाता है जो इस फ़ॉर्मैट पर काम नहीं करता. इससे ऐप्लिकेशन तब भी काम करते हैं, जब डिवाइस पर वीडियो नए फ़ॉर्मैट में कैप्चर किए गए हों.

इसके साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा डिफ़ॉल्ट रूप से बंद रहती है. मीडिया ट्रांसकोडिंग का अनुरोध करने के लिए, ऐप्लिकेशन को मीडिया की अपनी क्षमताओं के बारे में बताना होगा. मीडिया की सुविधाओं का एलान करने के बारे में ज़्यादा जानकारी के लिए, Android Developers साइट पर काम करने वाले मीडिया ट्रांसकोडिंग देखें.

स्पेस कैसे काम करता है

साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा के दो मुख्य हिस्से हैं:

  • मीडिया फ़्रेमवर्क में ट्रांसकोडिंग सेवाएं: ये सेवाएं हार्डवेयर का इस्तेमाल करके फ़ाइलों को एक फ़ॉर्मैट से दूसरे फ़ॉर्मैट में बदलती हैं. ऐसा करने के लिए हार्डवेयर का इस्तेमाल किया जाता है, ताकि कन्वर्ज़न को कम समय में और अच्छी क्वालिटी में बदला जा सके. इसमें ट्रांसकोडिंग एपीआई, ट्रांसकोडिंग सेवा, कस्टम फ़िल्टर के लिए OEM प्लगिन, और हार्डवेयर शामिल हैं. ज़्यादा जानकारी के लिए, स्ट्रक्चर की खास जानकारी देखें.
  • मीडिया कंपनियों में इसके साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा: मीडिया सेवा देने वाली कंपनियों में मौजूद यह कॉम्पोनेंट, ऐप्लिकेशन को मीडिया फ़ाइलें ऐक्सेस करने से रोकता है. साथ ही, ऐप्लिकेशन की बताई गई क्षमताओं के हिसाब से, ओरिजनल फ़ाइल या ट्रांसकोड की गई फ़ाइल दिखाता है. अगर कोई ऐप्लिकेशन, मीडिया फ़ाइल के फ़ॉर्मैट के साथ काम करता है, तो इसके लिए किसी खास तरीके की ज़रूरत नहीं है. अगर कोई ऐप्लिकेशन इस फ़ॉर्मैट पर काम नहीं करता, तो फ़्रेमवर्क फ़ाइल को पुराने फ़ॉर्मैट में बदल देता है, जैसे कि AVC. ऐसा तब होता है, जब ऐप्लिकेशन फ़ाइल को ऐक्सेस करता है.

पहली इमेज में, मीडिया ट्रांसकोडिंग की प्रोसेस की खास जानकारी दिखाई गई है.

साथ काम करने वाली मीडिया ट्रांसकोडिंग प्रोसेस

पहला डायग्राम. साथ काम करने वाले मीडिया ट्रांसकोडिंग की खास जानकारी.

पेज पर काम करने वाले फ़ॉर्मैट

संगत मीडिया ट्रांसकोडिंग सुविधा नीचे दिए गए फ़ॉर्मैट कन्वर्ज़न के साथ काम करती है:

  • एचईवीसी (8-बिट) से एवीसी: एक मीडियाकोडर डिकोडर और एक मीडियाकोड एन्कोडर को जोड़कर, कोडेक कन्वर्ज़न किए जाते हैं.
  • HDR10+ (10-बिट) से एवीसी (एसडीआर): एचडीआर से एसडीआर में बदलाव करने के लिए, Mediacodec इंस्टेंस और वेंडर प्लगिन हुक का इस्तेमाल किया जाता है. ज़्यादा जानकारी के लिए, एचडीआर से एसडीआर कोड में बदलने का तरीका देखें.

कॉन्टेंट के वे सोर्स जिन्हें इस्तेमाल किया जा सकता है

इस सुविधा के साथ काम करने वाली मीडिया ट्रांसकोडिंग की सुविधा, डिवाइस में मौजूद उस मीडिया के साथ काम करती है जो मूल OEM कैमरा ऐप्लिकेशन से जनरेट होता है. यह मीडिया, मुख्य बाहरी वॉल्यूम में DCIM/Camera/ फ़ोल्डर में सेव होता है. यह सुविधा, दूसरे स्टोरेज में मौजूद मीडिया के साथ काम नहीं करती. डिवाइस को ईमेल या एसडी कार्ड से भेजा गया कॉन्टेंट इस्तेमाल नहीं किया जा सकता.

ऐप्लिकेशन अलग-अलग फ़ाइल पाथ के आधार पर, फ़ाइलें ऐक्सेस करते हैं. यहां उन फ़ाइल पाथ के बारे में बताया गया है जहां ट्रांसकोडिंग चालू या बायपास की जाती है:

  • ट्रांसकोडिंग की सुविधा चालू है:

    • MediaStore API के ज़रिए ऐप्लिकेशन का ऐक्सेस
    • Java और नेटिव कोड के साथ-साथ, डायरेक्ट फ़ाइल पाथ एपीआई से ऐप्लिकेशन का ऐक्सेस
    • स्टोरेज ऐक्सेस फ़्रेमवर्क (SAF) के ज़रिए ऐप्लिकेशन का ऐक्सेस
    • ओएस शेयर शीट इंटेंट के ज़रिए ऐप्लिकेशन को ऐक्सेस करने की सुविधा. (सिर्फ़ MediaStore यूआरआई)
    • फ़ोन से पीसी पर MTP/PTP फ़ाइल ट्रांसफ़र
  • ट्रांसकोडिंग को बायपास किया गया:

    • एसडी कार्ड को निकालकर, डिवाइस से फ़ाइल ट्रांसफ़र करना
    • आस-पास शेयर करने या ब्लूटूथ ट्रांसफ़र करने जैसे विकल्पों का इस्तेमाल करके, फ़ाइलों को एक डिवाइस से दूसरे डिवाइस पर ट्रांसफ़र किया जा सकता है.

ट्रांसकोडिंग के लिए, पसंद के मुताबिक फ़ाइल पाथ जोड़ें

डिवाइस बनाने वाली कंपनियां, DCIM/ डायरेक्ट्री में मीडिया ट्रांसकोडिंग के लिए विकल्प के तौर पर फ़ाइल पाथ जोड़ सकती हैं. DCIM/ डायरेक्ट्री के बाहर के सभी पाथ अस्वीकार कर दिए गए हैं. मोबाइल और इंटरनेट सेवा देने वाली कंपनी की शर्तों या स्थानीय कानूनों को पूरा करने के लिए, इस तरह के फ़ाइल पाथ जोड़ने की ज़रूरत पड़ सकती है.

फ़ाइलपाथ जोड़ने के लिए, ट्रांसकोड पाथ का इस्तेमाल करें रनटाइम रिसॉर्स ओवरले (RRO), 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

आर्किटेक्चर की खास जानकारी

इस सेक्शन में मीडिया ट्रांसकोडिंग सुविधा के आर्किटेक्चर के बारे में बताया गया है.

मीडिया-ट्रांसकोडिंग-आर्किटेक्चर

दूसरा डायग्राम. मीडिया ट्रांसकोडिंग आर्किटेक्चर.

मीडिया ट्रांसकोडिंग आर्किटेक्चर में ये कॉम्पोनेंट शामिल होते हैं:

  • MediaTranscodingManager सिस्टम एपीआई: ऐसा इंटरफ़ेस जो क्लाइंट को MediaTranscoding सेवा से संपर्क करने की अनुमति देता है. MediaProvider मॉड्यूल इस एपीआई का इस्तेमाल करता है.
  • MediaTranscodingService: यह ऐसी मूल सेवा है जो क्लाइंट कनेक्शन को मैनेज करती है, ट्रांसकोडिंग के अनुरोधों को शेड्यूल करती है, और TranscodingSessions के लिए हिसाब-किताब को मैनेज करती है.
  • MediaTranscoder: ट्रांसकोडिंग करने वाली नेटिव लाइब्रेरी. यह लाइब्रेरी, मीडिया फ़्रेमवर्क एनडीके पर बनी है, जो मॉड्यूल के साथ काम करती है.

साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा, सेवा और मीडिया ट्रांसकोडर, दोनों में ट्रांसकोडिंग मेट्रिक लॉग करती है. क्लाइंट साइड और सर्विस साइड कोड MediaProvider मॉड्यूल में होता है, ताकि समय पर गड़बड़ियां ठीक की जा सकें और अपडेट किए जा सकें.

फ़ाइल का ऐक्सेस

साथ काम करने वाली मीडिया ट्रांसकोडिंग की सुविधा फ़ाइल सिस्टम इन यूज़रस्पेस (एफ़यूएसई) फ़ाइल सिस्टम के ऊपर बनाई गई है, जिसका इस्तेमाल स्कोप वाले स्टोरेज के लिए किया जाता है. FUSE, MediaProvider मॉड्यूल को उपयोगकर्ता के स्पेस में फ़ाइल की कार्रवाइयों की जांच करने और ऐक्सेस की अनुमति देने, उसे अस्वीकार करने या छिपाने के लिए बनी नीति के आधार पर, फ़ाइलों के ऐक्सेस को सीमित करने की सुविधा देता है.

जब कोई ऐप्लिकेशन किसी फ़ाइल को ऐक्सेस करने की कोशिश करता है, तो FUSE डीमन, ऐप्लिकेशन से फ़ाइल का डेटा पढ़ने का ऐक्सेस ब्लॉक कर देता है. अगर ऐप्लिकेशन नए फ़ॉर्मैट (जैसे कि HEVC) पर काम करता है, तो ओरिजनल फ़ाइल वापस आ जाती है. अगर ऐप्लिकेशन इस फ़ॉर्मैट पर काम नहीं करता, तो फ़ाइल को पुराने फ़ॉर्मैट (जैसे कि एवीसी) में ट्रांसकोड किया जाता है या ट्रांसकोड किया गया वर्शन उपलब्ध होने पर कैश मेमोरी से वापस भेज दिया जाता है.

ट्रांसकोड की गई फ़ाइलों का अनुरोध करें

इस सुविधा के साथ काम करने वाली मीडिया ट्रांसकोडिंग की सुविधा डिफ़ॉल्ट रूप से बंद रहती है. इसका मतलब है कि अगर डिवाइस पर HEVC काम करता है, तो Android, फ़ाइलों को तब तक ट्रांसकोड नहीं करता, जब तक कि किसी मेनिफ़ेस्ट फ़ाइल या हर हाल में ट्रांसकोडिंग की सूची में इसकी जानकारी न दी गई हो.

ऐप्लिकेशन इन विकल्पों का इस्तेमाल करके, ट्रांसकोड की गई एसेट के लिए अनुरोध कर सकते हैं:

  • मेनिफ़ेस्ट फ़ाइल में, इस्तेमाल न किए जा सकने वाले फ़ॉर्मैट के बारे में बताएं. ज़्यादा जानकारी के लिए, संसाधन में सुविधाओं के बारे में बताना और कोड में सुविधाओं का एलान करना देखें.
  • ऐप्लिकेशन को MediaProvider मॉड्यूल में शामिल हर हाल में ट्रांसकोड करने की सुविधा की सूची में जोड़ें. इससे उन ऐप्लिकेशन के लिए ट्रांसकोडिंग चालू होती है जिन्होंने अपनी मेनिफ़ेस्ट फ़ाइल अपडेट नहीं की है. जब कोई ऐप्लिकेशन अपनी मेनिफ़ेस्ट फ़ाइल को काम न करने वाले फ़ॉर्मैट से अपडेट करता है, तो उसे फ़ोर्स ट्रांसकोड सूची से हटाना होगा. डिवाइस बनाने वाली कंपनियां, पैच सबमिट करके या गड़बड़ी की शिकायत करके, अपने ऐप्लिकेशन को फ़ोर्स ट्रांसकोड सूची में जोड़ने या हटाने के लिए नॉमिनेट कर सकती हैं. Android टीम समय-समय पर सूची की समीक्षा करती है और उस सूची से ऐप्लिकेशन हटा सकती है.
  • रनटाइम के दौरान, ऐप्लिकेशन के साथ काम करने वाले फ़्रेमवर्क के साथ काम करने वाले फ़ॉर्मैट बंद करें. उपयोगकर्ता इसे सेटिंग में जाकर हर ऐप्लिकेशन के लिए भी बंद कर सकते हैं.
  • openTypedAssetFileDescriptor एपीआई की मदद से, काम न करने वाले फ़ॉर्मैट की जानकारी साफ़ तौर पर बताते हुए, MediaStore की मदद से कोई फ़ाइल खोलें.

यूएसबी ट्रांसफ़र (डिवाइस से पीसी पर) के लिए, ट्रांसकोडिंग डिफ़ॉल्ट रूप से बंद रहती है. हालांकि, उपयोगकर्ता यूएसबी प्राथमिकताएं सेटिंग स्क्रीन में वीडियो को एवीसी में बदलें टॉगल का इस्तेमाल करके ट्रांसकोडिंग चालू कर सकते हैं, जैसा कि इमेज 3 में दिखाया गया है.

मीडिया ट्रांसकोडिंग चालू करने के लिए टॉगल करें

तीसरी इमेज. यूएसबी की प्राथमिकता वाली स्क्रीन में, मीडिया ट्रांसकोडिंग चालू करने के लिए टॉगल करें.

ट्रांसकोड की गई फ़ाइलों के अनुरोध पर पाबंदियां

लंबे समय तक ट्रांसकोडिंग के अनुरोधों को सिस्टम के संसाधन लॉक होने से रोकने के लिए, ट्रांसकोडिंग सेशन का अनुरोध करने वाले ऐप्लिकेशन इन तक सीमित हैं:

  • लगातार 10 सेशन
  • चलने का कुल समय तीन मिनट है

अगर कोई ऐप्लिकेशन इन सभी पाबंदियों को पार कर जाता है, तो फ़्रेमवर्क मूल फ़ाइल डिस्क्रिप्टर को दिखाता है.

डिवाइस से जुड़ी ज़रूरी शर्तें

डिवाइस पर काम करने वाली मीडिया ट्रांसकोडिंग सुविधा काम कर सके, इसके लिए डिवाइस को ये ज़रूरी शर्तें पूरी करनी होंगी:

  • डिवाइस में मूल कैमरा ऐप्लिकेशन के लिए, एचईवीसी एन्कोडिंग डिफ़ॉल्ट रूप से चालू है
  • (ऐसे डिवाइस जिनमें एचडीआर से एसडीआर ट्रांसकोडिंग की सुविधा है) डिवाइस पर एचडीआर वीडियो कैप्चर करने की सुविधा काम करती है

मीडिया ट्रांसकोडिंग के लिए डिवाइस की परफ़ॉर्मेंस अच्छी हो, इसके लिए ज़रूरी है कि वीडियो हार्डवेयर और डिवाइस के रीड/राइट ऐक्सेस की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जाए. जब मीडिया कोडेक को 1 के बराबर प्राथमिकता के साथ कॉन्फ़िगर किया जाता है, तो कोडेक को सबसे ज़्यादा थ्रूपुट पर काम करना चाहिए. हमारा सुझाव है कि ट्रांसकोडिंग की परफ़ॉर्मेंस कम से कम 200 एफ़पीएस (फ़्रेम प्रति सेकंड) हो. अपने हार्डवेयर की परफ़ॉर्मेंस की जांच करने के लिए, frameworks/av/media/libmediatranscoding/transcoder/benchmark पर मीडिया ट्रांसकोडर मानदंड चलाएं.

पुष्टि करें

साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा की पुष्टि करने के लिए, ये सीटीएस टेस्ट करें:

  • android.media.mediatranscoding.cts
  • android.mediaprovidertranscode.cts

दुनिया भर में मीडिया ट्रांसकोडिंग चालू करें

मीडिया ट्रांसकोडिंग फ़्रेमवर्क या ट्रांसकोडिंग के साथ ऐप्लिकेशन के काम करने के तरीके की जांच करने के लिए, दुनिया भर में इसके साथ काम करने वाली मीडिया ट्रांसकोडिंग सुविधा को चालू या बंद किया जा सकता है. सेटिंग > सिस्टम > डेवलपर > मीडिया ट्रांसकोडिंग डेवलपर के लिए विकल्प पेज पर जाकर, ट्रांसकोडिंग डिफ़ॉल्ट सेटिंग को बदलें टॉगल को चालू पर सेट करें. इसके बाद, ट्रांसकोडिंग चालू करें टॉगल को चालू या बंद पर सेट करें. अगर यह सेटिंग चालू है, तो बैकग्राउंड में मीडिया ट्रांसकोडिंग की सुविधा चालू हो सकती है.

ट्रांसकोडिंग का स्टेटस देखें

जांच के दौरान, ट्रांसकोडिंग की स्थिति के बारे में जानने के लिए, यहां दिए गए ADB शेल कमांड का इस्तेमाल किया जा सकता है. इसमें मौजूदा और पिछले ट्रांसकोडिंग सेशन भी शामिल हैं:

adb shell dumpsys media.transcoding

वीडियो की लंबाई की सीमा बढ़ाएं

इस सुविधा की जांच करने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करके, ट्रांसकोडिंग के लिए एक मिनट के वीडियो की अवधि को बढ़ाया जा सकता है. इस निर्देश को चलाने के बाद, डिवाइस को फिर से चालू करने की ज़रूरत पड़ सकती है.

adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>

एओएसपी सोर्स और रेफ़रंस

यहां दिए गए AOSP सोर्स कोड, YouTube के साथ काम करने वाले मीडिया ट्रांसकोडिंग से जुड़े हैं.

एचडीआर से एसडीआर में कोड में बदलने का तरीका

एचडीआर से एसडीआर कोड में बदलने के लिए, डिवाइस बनाने वाली कंपनियां, /platform/frameworks/av/media/codec2/hidl/plugin/ में मौजूद AOSP सैंपल Codec 2.0 के फ़िल्टर प्लगिन का इस्तेमाल कर सकती हैं. इस सेक्शन में बताया गया है कि फ़िल्टर प्लगिन कैसे काम करता है, प्लगिन को लागू करने का तरीका, और प्लगिन की जांच करने का तरीका क्या है.

अगर किसी डिवाइस में ऐसा प्लगिन मौजूद नहीं है जो एचडीआर से एसडीआर एन्कोडिंग के साथ काम करता है, तो एचडीआर वीडियो ऐक्सेस करने वाले ऐप्लिकेशन को ओरिजनल फ़ाइल डिस्क्रिप्टर मिलता है. भले ही, मेनिफ़ेस्ट में ऐप्लिकेशन की मीडिया क्षमताओं के बारे में कुछ भी बताया गया हो.

स्पेस कैसे काम करता है

इस सेक्शन में, कोडेक 2.0 फ़िल्टर प्लगिन के सामान्य व्यवहार के बारे में बताया गया है.

बैकग्राउंड

Android, कोडेक 2.0 इंटरफ़ेस और android::hardware::media::c2 पर android.hardware.media.c2 HAL इंटरफ़ेस के बीच, एक एडैप्शन लेयर लागू करने की सुविधा देता है. फ़िल्टर प्लगिन के लिए, एओएसपी में एक रैपर प्रोसेस शामिल होता है, जो फ़िल्टर प्लगिन के साथ डिकोडर को रैप करता है. MediaCodec , रैप किए गए इन कॉम्पोनेंट को फ़िल्टर करने की सुविधाओं के साथ डिकोडर के तौर पर पहचानता है.

खास जानकारी

FilterWrapper क्लास, वेंडर कोडेक को लेकर, रैप किए गए कोडेक को फिर से media.c2 के हिसाब से बनाने की लेयर पर वापस ले जाती है. FilterWrapper क्लास, FilterWrapper::Plugin एपीआई के ज़रिए libc2filterplugin.so को लोड करती है. साथ ही, प्लगिन के लिए उपलब्ध फ़िल्टर को रिकॉर्ड करती है. बनाए जाने के बाद, FilterWrapper सभी उपलब्ध फ़िल्टर को तुरंत चालू कर देता है. बफ़र में बदलाव करने वाले फ़िल्टर ही शुरुआत में शुरू होते हैं.

फ़िल्टर प्लगिन आर्किटेक्चर

पहला डायग्राम. फ़िल्टर प्लगिन आर्किटेक्चर.

फ़िल्टर प्लगिन इंटरफ़ेस

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 दिखाता है. उदाहरण के लिए, अगर टारगेट ट्रांसफ़र फ़ंक्शन SDR है और इनपुट ट्रांसफ़र फ़ंक्शन HDR (HLG या PQ) है, तो टोन-मैपिंग फ़िल्टर true दिखाता है.

LookWrapper की जानकारी

इस सेक्शन में, FilterWrapper क्लास की जानकारी दी गई है.

क्रिएशन

रैप किया गया कॉम्पोनेंट, मौजूदा डिकोडर और तय किए गए सभी फ़िल्टर को इंस्टैंशिएट करता है.

क्वेरी और कॉन्फ़िगरेशन

रैप किया गया कॉम्पोनेंट, फ़िल्टर की जानकारी के हिसाब से आने वाले पैरामीटर को क्वेरी या कॉन्फ़िगरेशन अनुरोधों से अलग करता है. उदाहरण के लिए, फ़िल्टर कंट्रोल पैरामीटर के कॉन्फ़िगरेशन को उससे जुड़े फ़िल्टर पर रूट किया जाता है. फ़िल्टर से जिन पैरामीटर पर असर हुआ है वे क्वेरी में मौजूद होते हैं (न कि ऐसे डिकोडर से पढ़ने के लिए जिसमें जिस पैरामीटर पर कार्रवाई नहीं हुई है), मौजूद होता है.

क्वेरी और कॉन्फ़िगरेशन

दूसरा डायग्राम. क्वेरी और कॉन्फ़िगरेशन.

शुरू करें

शुरुआत में, रैप किया गया कॉम्पोनेंट डिकोडर और वे सभी फ़िल्टर शुरू करता है जो बफ़र को बदलते हैं. अगर कोई फ़िल्टर चालू नहीं है, तो रैप किया गया कॉम्पोनेंट, डिकोडर और पास-थ्रू बफ़र शुरू करता है और डिकोडर को निर्देश भेजता है.

बफ़र हैंडलिंग

बफ़र हैंडलिंग

तीसरी इमेज. बफ़र हैंडलिंग.

रैप किए गए डिकोडर की सूची में जोड़े गए बफ़र, मूल डिकोडर पर जाते हैं. रैप किया गया कॉम्पोनेंट, onWorkDone_nb()कॉलबैक के ज़रिए डिकोडर से आउटपुट बफ़र को इकट्ठा करता है. इसके बाद, उसे फ़िल्टर में जोड़ देता है. आखिरी फ़िल्टर का फ़ाइनल आउटपुट बफ़र, क्लाइंट को रिपोर्ट किया जाता है.

यह बफ़र हैंडलिंग काम करे, इसके लिए रैप किए गए कॉम्पोनेंट को C2PortBlockPoolsTuning को आखिरी फ़िल्टर के साथ कॉन्फ़िगर करना होगा, ताकि फ़्रेमवर्क आउटपुट बफ़र, उसके हिसाब से बनाए गए ब्लॉक पूल से करे.

रोकें, रीसेट करें, और रिलीज़ करें

स्टॉप पर, रैप किया गया कॉम्पोनेंट डिकोडर और चालू किए गए सभी चालू फ़िल्टर बंद कर देता है. रीसेट और रिलीज़ करने के दौरान, सभी कॉम्पोनेंट रीसेट या रिलीज़ हो जाते हैं. भले ही, वे चालू हों या नहीं.

सैंपल फ़िल्टर प्लगिन लागू करना

प्लग इन को चालू करने के लिए, ये काम करें:

  1. लाइब्रेरी में FilterPlugin इंटरफ़ेस को लागू करें और उसे /vendor/lib[64]/libc2filterplugin.so. पर छोड़ें
  2. अगर ज़रूरी हो, तो mediacodec.te में और अनुमतियां जोड़ें.
  3. अडैप्टेशन लेयर को Android 12 में अपडेट करें और media.c2 सेवा को फिर से बनाएं.

प्लग इन की जांच करें

सैंपल प्लगिन की जांच करने के लिए, ये काम करें:

  1. डिवाइस को फिर से बनाएं और फ़्लैश करें.
  2. यहां दिए गए निर्देश का इस्तेमाल करके, प्लगिन का सैंपल बनाएं:

    m sample-codec2-filter-plugin
    
  3. डिवाइस को फिर से माउंट करें और वेंडर प्लगिन का नाम बदलें, ताकि उसे कोडेक सेवा से पहचाना जा सके.

    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