HEVC फ़ॉर्मैट पर काम न करने वाले ऐप्लिकेशन के लिए मीडिया ट्रांसकोडिंग

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

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

यह कैसे काम करता है

HEVC फ़ॉर्मैट पर काम न करने वाले ऐप्लिकेशन के लिए मीडिया ट्रांसकोडिंग की सुविधा के दो मुख्य हिस्से होते हैं:

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

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

HEVC फ़ॉर्मैट पर काम न करने वाले ऐप्लिकेशन के लिए मीडिया ट्रांसकोडिंग की प्रोसेस

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

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

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

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

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

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

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

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

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

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

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

डिवाइस बनाने वाली कंपनियां, 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

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

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

media-transcoding-architecture

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

मीडिया ट्रांसकोडिंग के लिए डिवाइस की परफ़ॉर्मेंस अच्छी हो, इसके लिए ज़रूरी है कि वीडियो हार्डवेयर और डिवाइस के रीड/राइट ऐक्सेस की परफ़ॉर्मेंस को ऑप्टिमाइज़ किया जाए. जब मीडिया कोडेक को 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 सैंपल कोडेक 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 दिखाता है.

FilterWrapper की जानकारी

इस सेक्शन में, 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