फ़्रेम दर

फ़्रेम रेट एपीआई की मदद से, ऐप्लिकेशन Android प्लैटफ़ॉर्म को सही फ़्रेम के बारे में जानकारी देते हैं रेट करें और Android 11 (एपीआई लेवल 30) या उसके बाद के वर्शन को टारगेट करने वाले ऐप्लिकेशन पर उपलब्ध है. पारंपरिक रूप से, ज़्यादातर डिवाइस सिर्फ़ एक डिसप्ले की रीफ़्रेश दर पर काम करते हैं. आम तौर पर 60 हर्ट्ज़ पर सेट हो जाती है, लेकिन अब इसमें बदलाव किया जा रहा है. कई डिवाइस अब अतिरिक्त सुविधाओं का इस्तेमाल करते हैं रीफ़्रेश दरें, जैसे कि 90 हर्ट्ज़ या 120 हर्ट्ज़. कुछ डिवाइसों पर आसानी से रीफ़्रेश दर काम करती है तो कुछ समय के लिए डार्क स्क्रीन दिखाई जाती है, जो आम तौर पर एक सेकंड तक चलती है.

इस एपीआई का मुख्य मकसद, ऐप्लिकेशन को ऐसी सुविधा उपलब्ध कराना है जिससे सभी डिवाइसों का बेहतर तरीके से इस्तेमाल किया जा सके काम करने वाली डिसप्ले रीफ़्रेश दरों का इस्तेमाल किया जा सकता है. उदाहरण के लिए, 24 हर्ट्ज़ वाला वीडियो चलाने वाला ऐप्लिकेशन अगर आपने setFrameRate() को कॉल किया है, तो डिवाइस का डिसप्ले बदल सकता है रीफ़्रेश दर 60 हर्ट्ज़ से 120 हर्ट्ज़ तक. यह नई रीफ़्रेश दर आसान, बिना किसी भेदभाव के 24 हर्ट्ज़ वाले वीडियो के साथ काम करता है. इसके लिए, 3:2 पुलडाउन की ज़रूरत नहीं होती उसी वीडियो को 60 हर्ट्ज़ के डिसप्ले पर चलाना ज़रूरी है. इससे उपयोगकर्ताओं की संख्या बेहतर होती है अनुभव.

बुनियादी इस्तेमाल

Android प्लैटफ़ॉर्म को ऐक्सेस और कंट्रोल करने के कई तरीके उपलब्ध कराता है. इसलिए, ऐसे कई तरीके हैं setFrameRate() एपीआई के कई वर्शन हैं. API के प्रत्येक वर्शन को पैरामीटर एक जैसे होते हैं और दूसरों की तरह ही काम करते हैं:

इस ऐप्लिकेशन को काम करने वाली असल रीफ़्रेश दरों को ध्यान में रखने की ज़रूरत नहीं है. जिसे कॉल करके लिया जा सकता है Display.getSupportedModes() ताकि setFrameRate() को सुरक्षित रूप से कॉल किया जा सके. उदाहरण के लिए, भले ही सिर्फ़ डिवाइस 60 हर्ट्ज़ पर काम करता है. इसलिए, setFrameRate() को अपने ऐप्लिकेशन की पसंद के फ़्रेम रेट के साथ कॉल करें. जिन डिवाइसों का फ़्रेम रेट, ऐप्लिकेशन के फ़्रेम रेट के हिसाब से बेहतर नहीं है वे आपके साथ बने रहेंगे मौजूदा डिसप्ले रीफ़्रेश दर के हिसाब से.

यह देखने के लिए कि setFrameRate() को कॉल करने पर, डिसप्ले रीफ़्रेश होता है या नहीं रेट करें, डिसप्ले में बदलाव की सूचनाएं पाने के लिए कॉल करके रजिस्टर करें DisplayManager.registerDisplayListener() या AChoreographer_registerRefreshRateCallback().

setFrameRate() को कॉल करते समय, बेहतर फ़्रेम रेट के बजाय सटीक फ़्रेम रेट का इस्तेमाल करें पूर्णांकन करें. उदाहरण के लिए, 29.97 हर्ट्ज़, 30 के पूर्णांक में होने के बजाय 29.97 में पास करें.

वीडियो ऐप्लिकेशन के लिए, setFrameRate() को पास किया गया साथ काम करने वाला पैरामीटर सेट होना चाहिए Surface.FRAME_RATE_COMPATIBILITY_FIXED_SOURCE को अतिरिक्त संकेत देने के लिए यह ऐप्लिकेशन, पुलडाउन का इस्तेमाल करके दिखाने की रीफ़्रेश दर (जिसकी वजह से फ़ैसला लिया जाएगा).

कुछ मामलों में, वीडियो प्लैटफ़ॉर्म, फ़्रेम सबमिट करना बंद कर देगा. हालांकि, यह प्रोसेस बना रहेगा स्क्रीन पर कुछ समय के लिए दिखेगा. सामान्य स्थितियों में, वीडियो चलाना शामिल है वीडियो के आखिर में या जब उपयोगकर्ता वीडियो को रोक देता है. ऐसे मामलों में, मौजूदा फ़्रेम को हटाने के लिए, setFrameRate() को कॉल करें. इसमें फ़्रेम रेट पैरामीटर 0 पर सेट है फ़्रेम रेट की सेटिंग को वापस डिफ़ॉल्ट वैल्यू पर सेट करें. फ़्रेम रेट की सेटिंग हटाई जा रही है ज़रूरी नहीं है, क्योंकि सतह को नष्ट करते समय या जब सतह छिपा दिया गया है, क्योंकि उपयोगकर्ता किसी दूसरे ऐप्लिकेशन पर स्विच कर रहा है. फ़्रेम रेट हटाएं सेटिंग सिर्फ़ तब सेट की जा सकती है, जब सतह इस्तेमाल किए बिना स्क्रीन पर दिखे.

फ़्रेम रेट का नॉन-सीमलेस स्विच

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

कुछ उपयोगकर्ता चाहते हैं कि वीडियो की शुरुआत में ही विज़ुअल रुकावट हो और लंबी अवधि वाले वीडियो खत्म होते हैं. इससे डिसप्ले की रीफ़्रेश दर एक जैसी रहेगी वीडियो फ़्रेम रेट तय करें और फ़्रेम-रेट वाले कन्वर्ज़न आर्टफ़ैक्ट, जैसे कि 3:2 से बचें फ़िल्म चलाने के लिए पुलडाउन जडर.

इसी वजह से, बिना किसी रुकावट के रीफ़्रेश दर वाले स्विच को चालू किया जा सकता है. अगर दोनों उपयोगकर्ता और ऐप्लिकेशन ऑप्ट-इन करें:

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

कुछ और सुझाव

सामान्य स्थितियों के लिए इन सुझावों को अपनाएं.

एक से ज़्यादा प्लैटफ़ॉर्म

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

प्लैटफ़ॉर्म, ऐप्लिकेशन के फ़्रेम रेट में नहीं बदलता

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

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

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

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

कुछ मामलों में, प्लैटफ़ॉर्म, ऐप्लिकेशन के फ़्रेम रेट के मल्टीपल पर स्विच कर सकता है setFrameRate() में बताया गया है. उदाहरण के लिए, कोई ऐप्लिकेशन setFrameRate() को कॉल कर सकता है और डिवाइस, डिसप्ले को 120 हर्ट्ज़ पर स्विच कर सकता है. इसकी एक वजह ऐसा तब होता है, जब किसी दूसरे ऐप्लिकेशन में फ़्रेम रेट की सेटिंग 24 हर्ट्ज़ पर सेट हो. तय सीमा में ऐसी स्थिति में, डिसप्ले को 120 हर्ट्ज़ पर चलाने से 60 हर्ट्ज़ की सतह और बिना किसी पुलडाउन के चलाने के लिए 24 हर्ट्ज़ की सतह.

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

setFrameRate() बनाम पसंदीदाDisplayModeId

WindowManager.LayoutParams.preferredDisplayModeId है, जिससे ऐप्लिकेशन प्लैटफ़ॉर्म पर अपना फ़्रेम रेट दिखा सकते हैं. कुछ सूचनाएं मिल रही हैं ऐप्लिकेशन, अन्य ऐप्लिकेशन के बजाय सिर्फ़ डिसप्ले रीफ़्रेश दर में बदलाव करना चाहते हैं डिसप्ले मोड की सेटिंग, जैसे कि डिसप्ले रिज़ॉल्यूशन. आम तौर पर, इस्तेमाल करें preferredDisplayModeId के बजाय setFrameRate(). setFrameRate() फ़ंक्शन का इस्तेमाल करना आसान है, क्योंकि ऐप्लिकेशन को खास फ़्रेम रेट वाला मोड ढूंढने के लिए, डिसप्ले मोड की सूची देखें.

setFrameRate(), प्लैटफ़ॉर्म को, काम करने वाला कोई वर्शन चुनने के ज़्यादा मौके देता है उन स्थितियों में फ़्रेम रेट का इस्तेमाल करता है जिनमें कई प्लैटफ़ॉर्म इस समय चल रहे हैं अलग-अलग फ़्रेम रेट तय करें. उदाहरण के लिए, एक ऐसा उदाहरण दें जिसमें दो ऐप्लिकेशन Pixel 4 पर स्प्लिट स्क्रीन मोड में चल रहा हो. इसमें एक ऐप्लिकेशन 24 हर्ट्ज़ वाला वीडियो चला रहा है और दूसरा उपयोगकर्ता को स्क्रोल की जा सकने वाली सूची दिखा रहा है. Pixel 4, दो डिवाइसों पर काम करता है डिसप्ले रीफ़्रेश दर: 60 हर्ट्ज़ और 90 हर्ट्ज़. preferredDisplayModeId एपीआई का इस्तेमाल करके, वीडियो सरफ़ेस को 60 हर्ट्ज़ या 90 हर्ट्ज़ पर सेट करना ज़रूरी है. कॉल करके 24 हर्ट्ज़ वाला setFrameRate(). वीडियो का प्लैटफ़ॉर्म, प्लैटफ़ॉर्म को ज़्यादा सुविधाएं देता है सोर्स वीडियो के फ़्रेम रेट की जानकारी देता है. इससे प्लैटफ़ॉर्म डिसप्ले की रीफ़्रेश दर के लिए 90 हर्ट्ज़ चुनें. यह दर 60 हर्ट्ज़ से बेहतर होगी स्थिति के हिसाब से बदलें.

हालांकि, कुछ मामलों में preferredDisplayModeId का इस्तेमाल करना चाहिए के बजाय setFrameRate() है, जैसे कि:

  • अगर ऐप्लिकेशन रिज़ॉल्यूशन या डिसप्ले मोड की अन्य सेटिंग में बदलाव करना चाहता है, preferredDisplayModeId का इस्तेमाल करें.
  • यह प्लैटफ़ॉर्म, कॉल के जवाब में ही डिसप्ले मोड को स्विच करेगा अगर मोड स्विच लाइटवेट है और यह संभावना कम है, तो setFrameRate() उपयोगकर्ता को आसानी होती है. अगर ऐप्लिकेशन, डिसप्ले को रीफ़्रेश करना चाहता है, तो रेट करना, भले ही उसके लिए बहुत ज़्यादा मोड पर स्विच करने की ज़रूरत हो (उदाहरण के लिए, Android TV पर) डिवाइस), preferredDisplayModeId का इस्तेमाल करें.
  • ऐसे ऐप्लिकेशन जो ऐप्लिकेशन के एक से ज़्यादा फ़्रेम पर चलने वाले डिसप्ले को हैंडल नहीं कर सकते दर के लिए, हर फ़्रेम पर प्रज़ेंटेशन टाइमस्टैंप सेट करना ज़रूरी होता है. preferredDisplayModeId का इस्तेमाल करें.

setFrameRate() बनाम निजी रीफ़्रेश दर

WindowManager.LayoutParams#preferredRefreshRate ऐप्लिकेशन की विंडो पर पसंदीदा फ़्रेम रेट सेट करता हो. साथ ही, लागू दर लागू हो सभी प्लैटफ़ॉर्म पर दिखाने के लिए. ऐप्लिकेशन को अपनी पसंदीदा सेटिंग बतानी चाहिए फ़्रेम दर चाहे डिवाइस की काम करने वाली रीफ़्रेश दरों पर ध्यान दिए बिना, setFrameRate(), ताकि शेड्यूलर को ऐप्लिकेशन के लक्ष्य के बारे में बेहतर संकेत दिया जा सके फ़्रेम रेट.

preferredRefreshRate को setFrameRate() का इस्तेमाल करने वाले प्लैटफ़ॉर्म के लिए अनदेखा कर दिया जाता है. तय सीमा में अगर हो सके, तो setFrameRate() का सामान्य इस्तेमाल करें.

PreferredRate बनाम पसंदीदा DisplayModeId

अगर ऐप्लिकेशन सिर्फ़ पसंदीदा रीफ़्रेश दर में बदलाव करना चाहते हैं, तो उन्हें preferredDisplayModeId के बजाय, preferredRefreshRate.

कई बार setFrameRate() को कॉल करने से बचना

हालांकि, परफ़ॉर्मेंस के लिहाज़ से setFrameRate() कॉल ज़्यादा महंगा नहीं है, लेकिन ऐप्लिकेशन को हर फ़्रेम में या एक से ज़्यादा बार setFrameRate() को कॉल करने से बचना चाहिए सेकंड. setFrameRate() को किए जाने वाले कॉल के कारण रीफ़्रेश दर दिखाता है, जिसकी वजह से ट्रांज़िशन के दौरान फ़्रेम में गिरावट आ सकती है. आपको कॉल करने से पहले ही सही फ़्रेम रेट पता कर लेना चाहिए एक बार setFrameRate().

गेम या वीडियो के अलावा अन्य ऐप्लिकेशन के लिए इस्तेमाल

हालांकि, setFrameRate() एपीआई के लिए मुख्य रूप से वीडियो का इस्तेमाल किया जाता है, लेकिन यह अन्य ऐप्लिकेशन के लिए इस्तेमाल किया जाता है. उदाहरण के लिए, कोई गेम जो 60 हर्ट्ज़ (पावर का इस्तेमाल कम करने और लंबे समय तक वीडियो चलाने के सेशन के लिए) के ज़रिए कॉल किया जा सकता है Surface.setFrameRate(60, Surface.FRAME_RATE_COMPATIBILITY_DEFAULT). इसमें डिफ़ॉल्ट रूप से 90 हर्ट्ज़ पर चलने वाला डिवाइस 60 हर्ट्ज़ पर चलेगा, गेम चालू है. इसमें फ़ैसला लेने से बचने के लिए कहा जाएगा, अगर गेम 60 हर्ट्ज़ पर और डिसप्ले 90 हर्ट्ज़ पर चलाया गया.

FRAME_RATE_COMPATIBILITY_FIXED_SOURCE का उपयोग

FRAME_RATE_COMPATIBILITY_FIXED_SOURCE सिर्फ़ वीडियो ऐप्लिकेशन के लिए है. इसके लिए गैर-वीडियो इस्तेमाल, FRAME_RATE_COMPATIBILITY_DEFAULT इस्तेमाल करें.

फ़्रेम रेट बदलने के लिए रणनीति चुनना

  • हमारा सुझाव है कि लंबे समय तक चलने वाले वीडियो दिखाते समय, जैसे कि मूवी, setFrameRate(फ़्रेम प्रति सेकंड, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, CHANGE_FRAME_RATE_ALWAYS) पर कॉल करें जहां FPS (फ़्रेम प्रति सेकंड) वीडियो का फ़्रेम रेट होता है.
  • हमारा सुझाव है कि setFrameRate() को CHANGE_FRAME_RATE_ALWAYS से कॉल करने वाले ऐप्लिकेशन न इस्तेमाल करें जब आपको लगे कि वीडियो कुछ मिनट या इससे कम समय तक चलेगा.

वीडियो प्लेबैक ऐप्लिकेशन के लिए इंटिग्रेशन का उदाहरण

वीडियो चलाने वाले ऐप्लिकेशन में रीफ़्रेश दर वाले स्विच को इंटिग्रेट करने के लिए, यह तरीका अपनाएं:

  1. changeFrameRateStrategy तय करें:
    1. अगर फ़िल्म जैसा कोई वीडियो लंबे समय तक चल रहा है, तो MATCH_CONTENT_FRAMERATE_ALWAYS का इस्तेमाल करें
    2. अगर मूव ट्रेलर जैसा कोई शॉर्ट वीडियो चलाया जा रहा है, तो CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS का इस्तेमाल करें
  2. अगर changeFrameRateStrategy, CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS है पर जाएं, तो चौथे चरण पर जाएं.
  3. रीफ़्रेश दर में बदलाव होने पर, इसका पता लगाएं कि ये दोनों तथ्य सही हैं:
    1. मौजूदा रीफ़्रेश दर की वजह से, आसान मोड में स्विच नहीं किया जा सकता (चलिए वीडियो के फ़्रेम रेट पर जाना चाहिए (उदाहरण के लिए, इसे V कॉल करें). इससे C और V के अलग-अलग होने पर Display.getMode().getAlternativeRefreshRates में V का गुणज नहीं है.
    2. उपयोगकर्ता ने रीफ़्रेश दर में आसानी से न होने वाले बदलावों के लिए ऑप्ट-इन किया है. आप पता लगा सकते हैं यह जांचने के लिए कि DisplayManager.getMatchContentFrameRateUserPreference MATCH_CONTENT_FRAMERATE_ALWAYS दिखाता है
  4. अगर स्विच करने में कोई रुकावट नहीं आ रही है, तो ये काम करें:
    1. setFrameRate पर कॉल करें और उसे fps, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, और changeFrameRateStrategy, जहां fps वीडियो का फ़्रेम रेट है.
    2. वीडियो चलाना शुरू करें
  5. अगर आसान मोड में कोई बदलाव होने वाला है, तो ये काम करें:
    1. उपयोगकर्ता को सूचित करने के लिए UX दिखाएं. ध्यान दें कि हमारा सुझाव है कि आप उपयोगकर्ता को इस UX को खारिज करना होगा और चरण 5.d में लगने वाली अतिरिक्त देरी को छोड़ना होगा. यह है क्योंकि हमारा सुझाया गया समय, उन डिसप्ले पर ज़रूरत से ज़्यादा है तेज़ी से स्विच करने का समय दिखाते हैं.
    2. setFrameRate पर कॉल करें और उसे fps, FRAME_RATE_COMPATIBILITY_FIXED_SOURCE, और CHANGE_FRAME_RATE_ALWAYS, जहां fps वीडियो का फ़्रेम रेट है.
    3. onDisplayChanged तक इंतज़ार करें कॉलबैक.
    4. मोड स्विच पूरा होने के लिए दो सेकंड इंतज़ार करें.
    5. वीडियो चलाना शुरू करें

बिना किसी रुकावट के स्विच करने के सिर्फ़ काम करने के लिए, यह स्यूडो-कोड इस तरह से बनाया गया है:

SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
transaction.setFrameRate(surfaceControl,
    contentFrameRate,
    FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
    CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS);
transaction.apply();
beginPlayback();

बिना किसी रुकावट के और आसानी से स्विच करने की सुविधा के लिए, ऊपर बताए गए pseudo-code के बारे में यहां बताया गया है:

SurfaceControl.Transaction transaction = new SurfaceControl.Transaction();
if (isSeamlessSwitch(contentFrameRate)) {
  transaction.setFrameRate(surfaceControl,
      contentFrameRate,
      FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      CHANGE_FRAME_RATE_ONLY_IF_SEAMLESS);
  transaction.apply();
  beginPlayback();
} else if (displayManager.getMatchContentFrameRateUserPreference()
      == MATCH_CONTENT_FRAMERATE_ALWAYS) {
  showRefreshRateSwitchUI();
  sleep(shortDelaySoUserSeesUi);
  displayManager.registerDisplayListener();
  transaction.setFrameRate(surfaceControl,
      contentFrameRate,
      FRAME_RATE_COMPATIBILITY_FIXED_SOURCE,
      CHANGE_FRAME_RATE_ALWAYS);
  transaction.apply();
  waitForOnDisplayChanged();
  sleep(twoSeconds);
  hideRefreshRateSwitchUI();
  beginPlayback();
}