Android में ऐसे एपीआई शामिल हैं जिनकी मदद से, ऐप्लिकेशन उन डिवाइसों पर डिसप्ले की सेटिंग में बदलाव कर सकते हैं जिन पर ये एपीआई काम करते हैं. Android TV OS पर, ऐप्लिकेशन इस सुविधा का फ़ायदा उठा सकते हैं. इससे यह पक्का किया जा सकता है कि कॉन्टेंट सबसे अच्छे फ़ॉर्मैट में दिखे. इसके लिए, फ़्रेमरेट और कलर प्रोफ़ाइल को मैच किया जाता है, ताकि कॉन्टेंट देखने का अनुभव बेहतर हो.
डिसप्ले और कॉन्टेंट की फ़्रेम दर एक बराबर सेट करें
जब किसी वीडियो का फ़्रेमरेट, डिसप्ले के रीफ़्रेश रेट से मेल नहीं खाता है, तो फ़्रेमरेट बदलने की वजह से उपयोगकर्ताओं को मोशन जडर आर्टफ़ैक्ट दिख सकते हैं. यह समस्या, धीरे-धीरे पैन किए जाने वाले शॉट में खास तौर पर दिखती है. इस वजह से, फ़्रेमवर्क को कॉन्टेंट के फ़्रेम रेट के बारे में सूचना देने के लिए, SurfaceControl.Transaction.setFrameRate()
एपीआई का इस्तेमाल करना ज़रूरी है. साथ ही, यह सिग्नल देना भी ज़रूरी है कि वीडियो कॉन्टेंट, फ़्रेम रेट स्विच के लिए ज़रूरी शर्तें पूरी करता है या नहीं.
ज़्यादा जानकारी के लिए, फ़्रेम रेट गाइड पढ़ें.
पसंदीदा फ़ोटो प्रोफ़ाइलों से मैच करना
Android 16 में MediaQuality API की मदद से, डेवलपर को पिक्चर प्रोफ़ाइलों को कंट्रोल करने की सुविधा मिलती है.
इसके कुछ उदाहरण यहां दिए गए हैं:
- ज़्यादा डाइनैमिक रेंज वाली फ़िल्मों और टीवी सीरीज़ के लिए, डेवलपर फ़िल्ममेकर मोड का अनुरोध कर सकते हैं. इससे कॉन्टेंट को उसी तरह से दिखाया जा सकेगा जैसा क्रिएटर ने दिखाया था. ज़्यादा सटीक रंगों वाली सिनेमा प्रोफ़ाइल, रोशनी बढ़ाने के लिए परछाइयों में मौजूद बारीकियों को दिखाती है.
- खेल-कूद के लाइव इवेंट अक्सर कम डाइनैमिक रेंज में रिकॉर्ड किए जाते हैं और इन्हें दिन के उजाले में देखा जाता है. इसलिए, इन्हें ऐसी प्रोफ़ाइल से फ़ायदा मिल सकता है जिसमें रंग की सटीक जानकारी के बजाय चमक को प्राथमिकता दी जाती है.
- गेम डेवलपर, कम लेटेन्सी वाली प्रोफ़ाइल का अनुरोध कर सकते हैं. इसमें इमेज प्रोसेसिंग कम से कम होती है, ताकि खिलाड़ियों को अपने डिसप्ले से बेहतरीन परफ़ॉर्मेंस मिल सके.
सिस्टम पिक्चर प्रोफ़ाइल चुनना
पिक्चर प्रोफ़ाइल चुनने से पहले, यह पुष्टि करना ज़रूरी है कि डिवाइस पर यह सुविधा काम करती हो.
यहां दिए गए स्निपेट में, सभी फ़ोटो प्रोफ़ाइलों के बारे में क्वेरी करने और स्पोर्ट्स प्रोफ़ाइल लागू करने के लिए, getAvailablePictureProfiles()
का इस्तेमाल करने का तरीका बताया गया है:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val mediaQualityManager: MediaQualityManager =
context.getSystemService(MediaQualityManager::class.java)
val profiles = mediaQualityManager.getAvailablePictureProfiles(null)
for (profile in profiles) {
// If we have a system sports profile, apply it to our media codec
if (profile.profileType == PictureProfile.TYPE_SYSTEM
&& profile.name == NAME_SPORTS
) {
val bundle = Bundle().apply {
putParcelable(MediaFormat.KEY_PICTURE_PROFILE_INSTANCE, profile)
}
mediaCodec.setParameters(bundle)
}
}
}
नाम के हिसाब से कोई प्रोफ़ाइल पाने के लिए, getPictureProfile()
का इस्तेमाल करें:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.BAKLAVA) {
val profile = mediaQualityManager.getPictureProfile(
PictureProfile.TYPE_SYSTEM, NAME_SPORTS, null)
}
अगर आपको यह क्वेरी करने की ज़रूरत नहीं है कि कोई प्रोफ़ाइल उपलब्ध है या नहीं, तो MediaFormat.KEY_PICTURE_PROFILE_INSTANCE
का इस्तेमाल करके, MediaCodec को सीधे तौर पर आईडी के ज़रिए प्रोफ़ाइलें उपलब्ध कराई जा सकती हैं.
डिवाइस के हिसाब से, इस्तेमाल की जा सकने वाली प्रोफ़ाइलें अलग-अलग हो सकती हैं. हालांकि, यहां दिए गए सिस्टम प्रोफ़ाइल आईडी से मिलान किया जा सकता है:
const val NAME_STANDARD: String = "standard"
const val NAME_VIVID: String = "vivid"
const val NAME_SPORTS: String = "sports"
const val NAME_GAME: String = "game"
const val NAME_MOVIE: String = "movie"
const val NAME_ENERGY_SAVING: String = "energy_saving"
const val NAME_USER: String = "user"