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

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

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

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

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

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

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

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

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

इस्तेमाल किए जा सकने वाले फ़ॉर्मैट

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: यह नेटिव लाइब्रेरी है, जो ट्रांसकोडिंग करती है. यह लाइब्रेरी, मीडिया फ़्रेमवर्क NDK के ऊपर बनाई गई है, ताकि यह मॉड्यूल के साथ काम कर सके.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

एचडीआर से एसडीआर में एन्कोड करना

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

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

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

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

बैकग्राउंड

Android, android::hardware::media::c2 पर Codec 2.0 इंटरफ़ेस और android.hardware.media.c2 HAL इंटरफ़ेस के बीच, अडैप्टेशन लेयर लागू करता है. फ़िल्टर प्लग इन के लिए, AOSP में एक रैपर मशीन शामिल होती है, जो फ़िल्टर प्लग इन के साथ डिकोडर को रैप करती है. 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