ट्यूनर ढांचा

एंड्रॉइड 11 या उच्चतर के लिए, आप ए/वी सामग्री वितरित करने के लिए एंड्रॉइड ट्यूनर फ्रेमवर्क का उपयोग कर सकते हैं। फ्रेमवर्क विक्रेताओं से हार्डवेयर पाइपलाइन का उपयोग करता है, जो इसे लो-एंड और हाई-एंड एसओसी दोनों के लिए उपयुक्त बनाता है। फ्रेमवर्क एक विश्वसनीय निष्पादन वातावरण (टीईई) और सुरक्षित मीडिया पथ (एसएमपी) द्वारा संरक्षित ए/वी सामग्री वितरित करने का एक सुरक्षित तरीका प्रदान करता है, जिससे इसे अत्यधिक प्रतिबंधित, सामग्री सुरक्षा वातावरण में उपयोग करने की अनुमति मिलती है।

ट्यूनर और एंड्रॉइड CAS के बीच मानकीकृत इंटरफ़ेस के परिणामस्वरूप ट्यूनर विक्रेताओं और CAS विक्रेताओं के बीच तेजी से एकीकरण होता है। ट्यूनर इंटरफ़ेस एंड्रॉइड टीवी के लिए एक विश्व समाधान बनाने के लिए MediaCodec और AudioTrack के साथ काम करता है। ट्यूनर इंटरफ़ेस प्रमुख प्रसारण मानकों के आधार पर डिजिटल टीवी और एनालॉग टीवी दोनों का समर्थन करता है।

अवयव

एंड्रॉइड 11 के लिए, तीन घटक विशेष रूप से टीवी प्लेटफॉर्म के लिए डिज़ाइन किए गए हैं।

  • ट्यूनर एचएएल: फ्रेमवर्क और विक्रेताओं के बीच एक इंटरफ़ेस
  • ट्यूनर एसडीके एपीआई: फ्रेमवर्क और ऐप्स के बीच एक इंटरफ़ेस
  • ट्यूनर संसाधन प्रबंधक (टीआरएम): ट्यूनर एचडब्ल्यू संसाधनों का समन्वय करता है

Android 11 के लिए, निम्नलिखित घटकों को बढ़ाया गया है।

  • कैस V2
  • TvInputService या टीवी इनपुट सेवा (टीआईएस)
  • TvInputManagerService या टीवी इनपुट मैनेजर सेवा (TIMS)
  • MediaCodec या मीडिया कोडेक
  • AudioTrack या ऑडियो ट्रैक
  • MediaResourceManager या मीडिया संसाधन प्रबंधक (MRM)

ट्यूनर फ्रेमवर्क घटकों का प्रवाह आरेख।

चित्र 1. एंड्रॉइड टीवी घटकों के बीच इंटरैक्शन

विशेषताएँ

फ़्रंटएंड नीचे दिए गए DTV मानकों का समर्थन करता है।

  • एटीएससी
  • एटीएससी3
  • डीवीबी सी/एस/टी
  • आईएसडीबी एस/एस3/टी
  • अनुरूप

ट्यूनर एचएएल 1.1 या उच्चतर के साथ एंड्रॉइड 12 में फ्रंटएंड नीचे दिए गए डीटीवी मानक का समर्थन करता है।

  • डीटीएमबी

डिमक्स नीचे दिए गए स्ट्रीम प्रोटोकॉल का समर्थन करता है।

  • परिवहन धारा (टीएस)
  • एमपीईजी मीडिया ट्रांसपोर्ट प्रोटोकॉल (एमएमटीपी)
  • इंटरनेट प्रोटोकॉल (आईपी)
  • लंबाई मान टाइप करें (टीएलवी)
  • एटीएससी लिंक-लेयर प्रोटोकॉल (एएलपी)

डिस्क्रैम्बलर नीचे दी गई सामग्री सुरक्षा का समर्थन करता है।

  • सुरक्षित मीडिया पथ
  • मीडिया पथ साफ़ करें
  • स्थानीय रिकॉर्ड सुरक्षित करें
  • सुरक्षित स्थानीय प्लेबैक

ट्यूनर एपीआई नीचे दिए गए उपयोग के मामलों का समर्थन करते हैं।

  • स्कैन
  • रहना
  • प्लेबैक
  • अभिलेख

ट्यूनर, MediaCodec और AudioTrack नीचे दिए गए डेटा प्रवाह मोड का समर्थन करते हैं।

  • स्पष्ट मेमोरी बफ़र के साथ ईएस पेलोड
  • सुरक्षित मेमोरी हैंडल के साथ ईएस पेलोड
  • निकासी

समग्र डिज़ाइन

ट्यूनर एचएएल को एंड्रॉइड फ्रेमवर्क और विक्रेता के हार्डवेयर के बीच परिभाषित किया गया है।

  • वर्णन करता है कि फ़्रेमवर्क विक्रेता से क्या अपेक्षा करता है और विक्रेता इसे कैसे कर सकता है।
  • IFrontend , IDemux , IDescrambler , IFilter , IDvr , और ILnb इंटरफेस के माध्यम से फ्रंटएंड, डिमक्स और डिस्क्रैम्बलर की कार्यक्षमता को फ्रेमवर्क में निर्यात करता है।
  • ट्यूनर एचएएल को MediaCodec और AudioTrack जैसे अन्य फ्रेमवर्क घटकों के साथ एकीकृत करने के कार्य शामिल हैं।

एक ट्यूनर जावा क्लास और नेटिव क्लास बनाई जाती है।

  • ट्यूनर जावा एपीआई ऐप्स को सार्वजनिक एपीआई के माध्यम से ट्यूनर एचएएल तक पहुंचने की अनुमति देता है।
  • नेटिव क्लास ट्यूनर एचएएल के साथ बड़ी मात्रा में रिकॉर्डिंग या प्लेबैक डेटा की अनुमति नियंत्रण और प्रबंधन की अनुमति देता है।
  • नेटिव ट्यूनर मॉड्यूल ट्यूनर जावा क्लास और ट्यूनर एचएएल के बीच एक सेतु है।

एक टीआरएम वर्ग बनाया गया है।

  • सीमित ट्यूनर संसाधनों, जैसे फ्रंटएंड, एलएनबी, सीएएस सत्र और टीवी इनपुट एचएएल से एक टीवी इनपुट डिवाइस का प्रबंधन करता है।
  • ऐप्स से अपर्याप्त संसाधनों को पुनः प्राप्त करने के लिए नियम लागू करता है। डिफ़ॉल्ट नियम अग्रभूमि जीत है।

मीडिया CAS और CAS HAL को नीचे दी गई सुविधाओं के साथ बढ़ाया गया है।

  • विभिन्न उपयोगों और एल्गोरिदम के लिए CAS सत्र खोलता है।
  • CICAM हटाने और सम्मिलन जैसे गतिशील CAS सिस्टम का समर्थन करता है।
  • कुंजी टोकन प्रदान करके ट्यूनर एचएएल के साथ एकीकृत होता है।

MediaCodec और AudioTrack नीचे दी गई सुविधाओं के साथ बढ़ाया गया है।

  • सामग्री इनपुट के रूप में सुरक्षित ए/वी मेमोरी लेता है।
  • टनल प्लेबैक में हार्डवेयर ए/वी सिंक करने के लिए कॉन्फ़िगर किया गया।
  • ES_payload और पासथ्रू मोड के लिए कॉन्फ़िगर किया गया समर्थन।

ट्यूनर एचएएल का समग्र डिज़ाइन।

चित्र 2. ट्यूनर एचएएल के भीतर घटकों का आरेख

समग्र कार्यप्रवाह

नीचे दिए गए चित्र लाइव प्रसारण प्लेबैक के लिए कॉल अनुक्रमों को दर्शाते हैं।

स्थापित करना

लाइव प्रसारण प्लेबैक आरेख का सेटअप अनुक्रम।

चित्र 3. लाइव प्रसारण प्लेबैक के लिए सेटअप अनुक्रम

ए/वी को संभालना

लाइव प्रसारण प्लेबैक आरेख के लिए ए/वी को संभालना।

चित्र 4. लाइव प्रसारण प्लेबैक के लिए ए/वी को संभालना

उलझी हुई सामग्री को संभालना

लाइव प्रसारण प्लेबैक आरेख के लिए क्रमबद्ध सामग्री को संभालना।

चित्र 5. लाइव प्रसारण प्लेबैक के लिए क्रमबद्ध सामग्री को संभालना

ए/वी डेटा संसाधित करना

लाइव प्रसारण प्लेबैक आरेख के लिए प्रक्रिया ए/वी डेटा।

चित्र 6. लाइव प्रसारण प्लेबैक के लिए ए/वी प्रसंस्करण

ट्यूनर एसडीके एपीआई

ट्यूनर एसडीके एपीआई ट्यूनर जेएनआई, ट्यूनर एचएएल और TunerResourceManager के साथ इंटरैक्शन को संभालता है। टीआईएस ऐप ट्यूनर संसाधनों और फ़िल्टर और डिस्क्रैम्बलर जैसे उप-घटकों तक पहुंचने के लिए ट्यूनर एसडीके एपीआई का उपयोग करता है। फ्रंटएंड और डिमक्स आंतरिक घटक हैं।

ट्यूनर एसडीके एपीआई का प्रवाह आरेख।

चित्र 7. ट्यूनर एसडीके एपीआई के साथ इंटरैक्शन

संस्करणों

एंड्रॉइड 12 से, ट्यूनर एसडीके एपीआई ट्यूनर एचएएल 1.1 में नई सुविधा का समर्थन करता है, जो ट्यूनर 1.0 का बैकवर्ड-संगत संस्करण अपग्रेड है।

चल रहे एचएएल संस्करण की जांच के लिए निम्नलिखित एपीआई का उपयोग करें।

  • android.media.tv.tuner.TunerVersionChecker.getTunerVersion()

न्यूनतम आवश्यक HAL संस्करण नए Android 12 API के दस्तावेज़ में पाया जा सकता है।

संकुल

ट्यूनर एसडीके एपीआई नीचे चार पैकेज प्रदान करता है।

  • android.media.tv.tuner
  • android.media.tv.tuner.frontend
  • android.media.tv.tuner.filter
  • android.media.tv.tuner.dvr

ट्यूनर एसडीके एपीआई पैकेज का प्रवाह आरेख।

चित्र 8. ट्यूनर एसडीके एपीआई पैकेज

Android.media.tv.tuner

ट्यूनर पैकेज ट्यूनर ढांचे का उपयोग करने के लिए एक प्रवेश बिंदु है। टीआईएस ऐप प्रारंभिक सेटिंग और कॉलबैक को निर्दिष्ट करके संसाधन उदाहरणों को आरंभ करने और प्राप्त करने के लिए पैकेज का उपयोग करता है।

  • tuner() : useCase और sessionId पैरामीटर निर्दिष्ट करके ट्यूनर इंस्टेंस को प्रारंभ करता है।
  • tune() : FrontendSetting पैरामीटर निर्दिष्ट करके फ्रंटएंड संसाधन और ट्यून प्राप्त करता है।
  • openFilter() : फ़िल्टर प्रकार निर्दिष्ट करके फ़िल्टर इंस्टेंस प्राप्त करता है।
  • openDvrRecorder() : बफ़र आकार निर्दिष्ट करके एक रिकॉर्डिंग इंस्टेंस प्राप्त करता है।
  • openDvrPlayback() : बफ़र आकार निर्दिष्ट करके प्लेबैक इंस्टेंस प्राप्त करता है।
  • openDescrambler() : एक डिस्क्रैम्बलर इंस्टेंस प्राप्त करता है।
  • openLnb() : एक आंतरिक LNB उदाहरण प्राप्त करता है।
  • openLnbByName() : एक बाहरी LNB उदाहरण प्राप्त करता है।
  • openTimeFilter() : एक समय फ़िल्टर उदाहरण प्राप्त करता है।

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

  • cancelTuning
  • scan / cancelScanning
  • getAvSyncHwId
  • getAvSyncTime
  • connectCiCam1 / disconnectCiCam
  • shareFrontendFromTuner
  • updateResourcePriority
  • setOnTuneEventListener
  • setResourceLostListener

Android.media.tv.tuner.frontend

फ़्रंटएंड पैकेज में फ़्रंटएंड-संबंधित सेटिंग्स, जानकारी, स्थितियाँ, ईवेंट और क्षमताओं का संग्रह शामिल है।

कक्षाओं

FrontendSettings नीचे दी गई कक्षाओं द्वारा विभिन्न डीटीवी मानकों के लिए प्राप्त किया गया है।

  • AnalogFrontendSettings
  • Atsc3FrontendSettings
  • AtscFrontendSettings
  • DvbcFrontendSettings
  • DvbsFrontendSettings
  • DvbtFrontendSettings
  • Isdbs3FrontendSettings
  • IsdbsFrontendSettings
  • IsdbtFrontendSettings

ट्यूनर एचएएल 1.1 या उच्चतर के साथ एंड्रॉइड 12 से, निम्नलिखित डीटीवी मानक समर्थित है।

  • DtmbFrontendSettings

FrontendCapabilities नीचे दी गई कक्षाओं द्वारा विभिन्न डीटीवी मानकों के लिए प्राप्त किया गया है।

  • AnalogFrontendCapabilities
  • Atsc3FrontendCapabilities
  • AtscFrontendCapabilities
  • DvbcFrontendCapabilities
  • DvbsFrontendCapabilities
  • DvbtFrontendCapabilities
  • Isdbs3FrontendCapabilities
  • IsdbsFrontendCapabilities
  • IsdbtFrontendCapabilities

ट्यूनर एचएएल 1.1 या उच्चतर के साथ एंड्रॉइड 12 से, निम्नलिखित डीटीवी मानक समर्थित है।

  • DtmbFrontendCapabilities

FrontendInfo फ्रंटएंड की जानकारी पुनः प्राप्त करता है। FrontendStatus फ्रंटएंड की वर्तमान स्थिति को पुनः प्राप्त करता है। OnTuneEventListener फ्रंटएंड पर होने वाली घटनाओं को सुनता है। टीआईएस ऐप फ्रंटएंड से स्कैन संदेशों को संसाधित करने के लिए ScanCallback उपयोग करता है।

चैनल स्कैन

टीवी सेट करने के लिए, ऐप संभावित आवृत्तियों को स्कैन करता है और उपयोगकर्ताओं की पहुंच के लिए एक चैनल लाइनअप बनाता है। चैनल स्कैनिंग को पूरा करने के लिए TIS Tuner.tune , Tuner.scan(BLIND_SCAN) या Tuner.scan(AUTO_SCAN) उपयोग कर सकता है।

यदि टीआईएस के पास सिग्नल के लिए सटीक डिलीवरी जानकारी है, जैसे आवृत्ति, मानक (उदाहरण के लिए, टी/टी2, एस/एस2), और अतिरिक्त आवश्यक जानकारी (उदाहरण के लिए, पीएलडी आईडी), तो Tuner.tune तेज़ विकल्प के रूप में अनुशंसित किया जाता है। .

जब उपयोगकर्ता Tuner.tune कॉल करता है, तो निम्नलिखित क्रियाएं होती हैं:

  • TIS Tuner.tune उपयोग करके FrontendSettings आवश्यक जानकारी से भर देता है।
  • यदि सिग्नल लॉक है तो एचएएल रिपोर्ट LOCKED संदेशों को ट्यून करता है।
  • टीआईएस आवश्यक जानकारी एकत्र करने के लिए Frontend.getStatus का उपयोग करता है।
  • TIS अपनी आवृत्ति सूची में अगली उपलब्ध आवृत्ति पर चला जाता है।

TIS सभी आवृत्तियों के समाप्त होने तक Tuner.tune फिर से कॉल करता है।

ट्यूनिंग के दौरान, आप Tuner.tune कॉल को रोकने या समाप्त करने के लिए stopTune() या close() पर कॉल कर सकते हैं।

ट्यूनर.स्कैन(ऑटो_स्कैन)

यदि TIS के पास Tuner.tune का उपयोग करने के लिए पर्याप्त जानकारी नहीं है, लेकिन उसके पास आवृत्ति सूची और मानक प्रकार (उदाहरण के लिए, DVB T/C/S) है, तो Tuner.scan(AUTO_SCAN) की अनुशंसा की जाती है।

जब उपयोगकर्ता Tuner.scan(AUTO_SCAN) कॉल करता है, तो निम्नलिखित क्रियाएं होती हैं:

  • TIS फ़्रीक्वेंसी से भरी FrontendSettings के साथ Tuner.scan(AUTO_SCAN) का उपयोग करता है।

  • यदि सिग्नल लॉक है तो एचएएल रिपोर्ट LOCKED संदेशों को स्कैन करती है। एचएएल सिग्नल के बारे में अतिरिक्त जानकारी प्रदान करने के लिए अन्य स्कैन संदेशों की भी रिपोर्ट कर सकता है।

  • टीआईएस आवश्यक जानकारी एकत्र करने के लिए Frontend.getStatus का उपयोग करता है।

  • TIS उसी आवृत्ति पर अगली सेटिंग जारी रखने के लिए HAL के लिए Tuner.scan कॉल करता है। यदि FrontendSettings संरचना खाली है, तो एचएएल अगली उपलब्ध सेटिंग का उपयोग करता है। अन्यथा, एचएएल एक बार के स्कैन के लिए FrontendSettings उपयोग करता है और यह इंगित करने के लिए END भेजता है कि स्कैन ऑपरेशन समाप्त हो गया है।

  • TIS उपरोक्त क्रियाओं को तब तक दोहराता है जब तक कि आवृत्ति पर सभी सेटिंग्स समाप्त न हो जाएँ।

  • एचएएल यह इंगित करने के लिए END भेजता है कि स्कैन ऑपरेशन समाप्त हो गया है।

  • TIS अपनी आवृत्ति सूची में अगली उपलब्ध आवृत्ति पर चला जाता है।

TIS सभी आवृत्तियों के समाप्त होने तक Tuner.scan(AUTO_SCAN) फिर से कॉल करता है।

स्कैनिंग के दौरान, आप स्कैन को रोकने या समाप्त करने के लिए stopScan() या close() कॉल कर सकते हैं।

ट्यूनर.स्कैन(BLIND_SCAN)

यदि TIS के पास आवृत्ति सूची नहीं है और विक्रेता HAL फ्रंटएंड संसाधन प्राप्त करने के लिए उपयोगकर्ता द्वारा निर्दिष्ट फ्रंटएंड की आवृत्ति की खोज कर सकता है, तो Tuner.scan(BLIND_SCAN) की अनुशंसा की जाती है।

  • TIS Tuner.scan(BLIND_SCAN) का उपयोग करता है। प्रारंभ आवृत्ति के लिए FrontendSettings में एक आवृत्ति निर्दिष्ट की जा सकती है, लेकिन टीआईएस FrontendSettings में अन्य सेटिंग्स को अनदेखा कर देता है।
  • यदि सिग्नल लॉक है तो एचएएल स्कैन LOCKED संदेश की रिपोर्ट करता है।
  • टीआईएस आवश्यक जानकारी एकत्र करने के लिए Frontend.getStatus का उपयोग करता है।
  • TIS स्कैनिंग जारी रखने के लिए Tuner.scan फिर से कॉल करता है। ( FrontendSettings नजरअंदाज कर दिया गया है।)
  • TIS उपरोक्त क्रियाओं को तब तक दोहराता है जब तक कि आवृत्ति पर सभी सेटिंग्स समाप्त न हो जाएँ। एचएएल टीआईएस की ओर से किसी भी कार्रवाई की आवश्यकता के बिना आवृत्ति बढ़ाता है। एचएएल PROGRESS रिपोर्ट करता है।

TIS सभी आवृत्तियों के समाप्त होने तक Tuner.scan(AUTO_SCAN) फिर से कॉल करता है। एचएएल यह इंगित करने के लिए END रिपोर्ट करता है कि स्कैन ऑपरेशन समाप्त हो गया है।

स्कैनिंग के दौरान, आप स्कैन को रोकने या समाप्त करने के लिए stopScan() या close() कॉल कर सकते हैं।

टीआईएस स्कैन प्रक्रिया का प्रवाह आरेख।

चित्र 9. टीआईएस स्कैन का प्रवाह आरेख

Android.media.tv.tuner.filter

फ़िल्टर पैकेज कॉन्फ़िगरेशन, सेटिंग्स, कॉलबैक और ईवेंट के साथ फ़िल्टर संचालन का एक संग्रह है। पैकेज में नीचे दिए गए ऑपरेशन शामिल हैं। संचालन की पूरी सूची के लिए एंड्रॉइड स्रोत कोड देखें।

  • configure()
  • start()
  • stop()
  • flush()
  • read()

संपूर्ण सूची के लिए Android स्रोत कोड देखें।

FilterConfiguration नीचे दी गई कक्षाओं से लिया गया है। कॉन्फ़िगरेशन मुख्य फ़िल्टर प्रकार के लिए हैं और वे निर्दिष्ट करते हैं कि फ़िल्टर डेटा निकालने के लिए किस प्रोटोकॉल का उपयोग करता है।

  • AlpFilterConfiguration
  • IpFilterConfiguration
  • MmtpFilterConfiguration
  • TlvFilterConfiguration
  • TsFilterConfiguration

सेटिंग्स नीचे दी गई कक्षाओं से ली गई हैं। सेटिंग्स फ़िल्टर उपप्रकार के लिए हैं और वे निर्दिष्ट करते हैं कि फ़िल्टर किस प्रकार के डेटा को बाहर कर सकता है।

  • SectionSettings
  • AvSettings
  • PesSettings
  • RecordSettings
  • DownloadSettings

विभिन्न प्रकार के डेटा के लिए घटनाओं की रिपोर्ट करने के लिए FilterEvent को नीचे दी गई कक्षाओं से लिया गया है।

  • SectionEvent
  • MediaEvent
  • PesEvent
  • TsRecordEvent
  • MmtpRecordEvent
  • TemiEvent
  • DownloadEvent
  • IpPayloadEvent

एंड्रॉइड 12 से ट्यूनर एचएएल 1.1 या उच्चतर के साथ, निम्नलिखित इवेंट समर्थित हैं।

  • IpCidChangeEvent
  • RestartEvent
  • ScramblingStatusEvent
फ़िल्टर से घटनाएँ और डेटा प्रारूप
फ़िल्टर प्रकार झंडे आयोजन डेटा ऑपरेशन डेटा स्वरूप
TS.SECTION
MMTP.SECTION
IP.SECTION
TLV.SECTION
ALP.SECTION
isRaw:
true
अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
एक असेंबल सत्र पैकेज दूसरे सत्र पैकेज द्वारा एफएमक्यू में भरा जाता है।
isRaw:
false
अनिवार्य:
DemuxFilterEvent::DemuxFilterSectionEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterSectionEven[i].size)


डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
TS.PES isRaw:
true
अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
एक असेंबल किया गया PES पैकेज दूसरे PES पैकेज द्वारा FMQ में भरा जाता है।
isRaw:
false
अनिवार्य:
DemuxFilterEvent::DemuxFilterPesEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterPesEven[i].size)


डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
MMTP.PES isRaw:
true
अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
एक इकट्ठे एमएफयू पैकेज को दूसरे एमएफयू पैकेज द्वारा एफएमक्यू में भरा जाता है।
isRaw:
false
अनिवार्य:
DemuxFilterEvent::DemuxFilterPesEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++
Filter.read(buffer, offset, DemuxFilterPesEven[i].size)


डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
TS.TS
एन/ए अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
ts ts हेडर से फ़िल्टर किया गया
एफएमक्यू में भरा गया है।
TS.Audio
TS.Video
MMTP.Audio
MMTP.Video
isPassthrough:
true
वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::DATA_READY प्राप्त करने के बाद क्लाइंट MediaCodec प्रारंभ कर सकता है।
ग्राहक DemuxFilterStatus::DATA_OVERFLOW प्राप्त करने के बाद Filter.flush कॉल कर सकता है।
एन/ए
isPassthrough:
false
अनिवार्य:
DemuxFilterEvent::DemuxFilterMediaEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
MediaCodec उपयोग करने के लिए:
for i=0; i<n; i++
linearblock = MediaEvent[i].getLinearBlock();
codec.startQueueLinearBlock(linearblock)
linearblock.recycle()


AudioTrack के सीधे ऑडियो का उपयोग करने के लिए:
for i=0; i<n; i++
audioHandle = MediaEvent[i].getAudioHandle();
audiotrack.write(encapsulated(audiohandle))
ION मेमोरी में ES या आंशिक ES डेटा।
TS.PCR
IP.NTP
ALP.PTP
एन/ए अनिवार्य: एन/ए
वैकल्पिक: एन/ए
एन/ए एन/ए
TS.RECORD एन/ए अनिवार्य:
DemuxFilterEvent::DemuxFilterTsRecordEvent[n]
RecordStatus::DATA_READY
RecordStatus::DATA_OVERFLOW
RecordStatus::LOW_WATER
RecordStatus::HIGH_WATER

वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
सूचकांक डेटा के लिए:
for i=0; i<n; i++
DemuxFilterTsRecordEvent[i];


रिकॉर्ड की गई सामग्री के लिए , RecordStatus::* और आंतरिक शेड्यूल के अनुसार, निम्न में से एक कार्य करें:
  • भंडारण के लिए DvrRecord.write(adustedSize) एक या अधिक बार चलाएँ।
    डेटा को एचएएल के एमक्यू से स्टोरेज में स्थानांतरित किया जाता है।
  • बफ़र करने के लिए DvrRecord.write(buffer, adustedSize) एक या अधिक बार चलाएँ।
    डेटा को एचएएल के एमक्यू से क्लाइंट बफर में कॉपी किया जाता है।
इंडेक्स डेटा के लिए: इवेंट पेलोड में ले जाया गया।

रिकॉर्ड की गई सामग्री के लिए: मक्स्ड टीएस स्ट्रीम एफएमक्यू में भरी गई।
TS.TEMI एन/ए अनिवार्य:
DemuxFilterEvent::DemuxFilterTemiEvent[n]

वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++
DemuxFilterTemiEvent[i];
एन/ए
MMTP.MMTP एन/ए अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
mmtp हेडर के साथ mmtp फ़िल्टर किया गया
एफएमक्यू में भरा गया है।
MMTP.RECORD एन/ए अनिवार्य:
DemuxFilterEvent::DemuxFilterMmtpRecordEvent[n]
RecordStatus::DATA_READY
RecordStatus::DATA_OVERFLOW
RecordStatus::LOW_WATER
RecordStatus::HIGH_WATER

वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
सूचकांक डेटा के लिए: for i=0; i<n; i++
DemuxFilterMmtpRecordEvent[i];


रिकॉर्ड की गई सामग्री के लिए , RecordStatus::* और आंतरिक शेड्यूल के अनुसार, निम्न में से एक कार्य करें:
  • भंडारण के लिए DvrRecord.write(adjustedSize) एक या अधिक बार चलाएँ।
    डेटा को एचएएल के एमक्यू से स्टोरेज में स्थानांतरित किया जाता है।
  • बफ़र करने के लिए DvrRecord.write(buffer, adjustedSize) एक या अधिक बार चलाएँ।
    डेटा को एचएएल के एमक्यू से क्लाइंट बफर में कॉपी किया जाता है।
इंडेक्स डेटा के लिए: इवेंट पेलोड में ले जाया गया।

रिकॉर्ड की गई सामग्री के लिए: FMQ में भरी हुई मक्स्ड रिकॉर्डेड स्ट्रीम।

यदि रिकॉर्डिंग के लिए फ़िल्टर स्रोत पासथ्रू के साथ TLV.TLV से IP.IP है, तो रिकॉर्ड की गई स्ट्रीम में TLV और IP हेडर होता है।
MMTP.DOWNLOAD एन/ए अनिवार्य:
DemuxFilterEvent::DemuxFilterDownloadEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++ Filter.read(buffer, offset, DemuxFilterDownloadEvent[i].size)

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
डाउनलोड पैकेज को एफएमक्यू में किसी अन्य आईपी डाउनलोड पैकेज द्वारा भरा जाता है।
IP.IP_PAYLOAD एन/ए अनिवार्य:
DemuxFilterEvent::DemuxFilterIpPayloadEvent[n]
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

वैकल्पिक:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
for i=0; i<n; i++ Filter.read(buffer, offset, DemuxFilterIpPayloadEvent[i].size)

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
आईपी ​​पेलोड पैकेज एफएमक्यू में दूसरे आईपी पेलोड पैकेज द्वारा भरा जाता है।
IP.IP
TLV.TLV
ALP.ALP
isPassthrough:
true
वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
फ़िल्टर किया गया प्रोटोकॉल सब स्ट्रीम फ़िल्टर श्रृंखला में अगला फ़िल्टर फ़ीड करता है। एन/ए
isPassthrough:
false
अनिवार्य:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW

अनुशंसित:
DemuxFilterStatus::LOW_WATER
DemuxFilterStatus::HIGH_WATER
इवेंट और आंतरिक शेड्यूल के अनुसार चलाएं
Filter.read(buffer, offset, adjustedSize) एक या अधिक बार।

डेटा को HAL के MQ से क्लाइंट बफ़र में कॉपी किया जाता है।
प्रोटोकॉल हेडर के साथ फ़िल्टर किया गया प्रोटोकॉल सब स्ट्रीम FMQ में भरा जाता है।
IP.PAYLOAD_THROUGH
TLV.PAYLOAD_THROUGH
ALP.PAYLOAD_THROUGH
एन/ए वैकल्पिक:
DemuxFilterStatus::DATA_READY
DemuxFilterStatus::DATA_OVERFLOW
फ़िल्टर किया गया प्रोटोकॉल पेलोड फ़िल्टर श्रृंखला में अगला फ़िल्टर फ़ीड करता है। एन/ए
पीएसआई/एसआई बनाने के लिए फ़िल्टर का उपयोग करने का उदाहरण प्रवाह

पीएसआई/एसआई बनाने के लिए फ़िल्टर का उपयोग करने का उदाहरण प्रवाह।

चित्र 10. पीएसआई/एसआई बनाने के लिए प्रवाह

  1. एक फ़िल्टर खोलें.

    Filter filter = tuner.openFilter(
      Filter.TYPE_TS,
      Filter.SUBTYPE_SECTION,
      /* bufferSize */1000,
      executor,
      filterCallback
    );
    
  2. फ़िल्टर कॉन्फ़िगर करें और प्रारंभ करें.

    Settings settings = SectionSettingsWithTableInfo
        .builder(Filter.TYPE_TS)
        .setTableId(2)
        .setVersion(1)
        .setCrcEnabled(true)
        .setRaw(false)
        .setRepeat(false)
        .build();
      FilterConfiguration config = TsFilterConfiguration
        .builder()
        .setTpid(10)
        .setSettings(settings)
        .build();
      filter.configure(config);
      filter.start();
    
  3. प्रक्रिया SectionEvent .

    FilterCallback filterCallback = new FilterCallback() {
      @Override
      public void onFilterEvent(Filter filter, FilterEvent[] events) {
        for (FilterEvent event : events) {
          if (event instanceof SectionEvent) {
            SectionEvent sectionEvent = (SectionEvent) event;
            int tableId = sectionEvent.getTableId();
            int version = sectionEvent.getVersion();
            int dataLength = sectionEvent.getDataLength();
            int sectionNumber = sectionEvent.getSectionNumber();
            filter.read(buffer, 0, dataLength); }
          }
        }
    };
    
फ़िल्टर से MediaEvent का उपयोग करने के लिए उदाहरण प्रवाह

फ़िल्टर से MediaEvent का उपयोग करने के लिए उदाहरण प्रवाह।

चित्र 11. फ़िल्टर से MediaEvent का उपयोग करने का प्रवाह

  1. A/V फ़िल्टर खोलें, कॉन्फ़िगर करें और प्रारंभ करें।
  2. प्रक्रिया MediaEvent .
  3. MediaEvent प्राप्त करें।
  4. रैखिक ब्लॉक को codec पर पंक्तिबद्ध करें।
  5. जब डेटा का उपभोग हो जाए तो ए/वी हैंडल को छोड़ दें।

Android.media.tv.tuner.dvr

DvrRecorder रिकॉर्डिंग के लिए ये तरीके प्रदान करता है।

  • configure
  • attachFilter
  • detachFilter
  • start
  • flush
  • stop
  • setFileDescriptor
  • write

DvrPlayback प्लेबैक के लिए ये विधियाँ प्रदान करता है।

  • configure
  • start
  • flush
  • stop
  • setFileDescriptor
  • read

DvrSettings का उपयोग DvrRecorder और DvrPlayback कॉन्फ़िगर करने के लिए किया जाता है। OnPlaybackStatusChangedListener और OnRecordStatusChangedListener का उपयोग DVR इंस्टेंस की स्थिति रिपोर्ट करने के लिए किया जाता है।

रिकॉर्ड प्रारंभ करने के लिए उदाहरण प्रवाह

रिकॉर्ड प्रारंभ करने के लिए उदाहरण प्रवाह.

चित्र 12. रिकॉर्ड शुरू करने के लिए प्रवाह

  1. DvrRecorder खोलें, कॉन्फ़िगर करें और प्रारंभ करें।

    DvrRecorder recorder = openDvrRecorder(/* bufferSize */ 1000, executor, listener);
    DvrSettings dvrSettings = DvrSettings
    .builder()
    .setDataFormat(DvrSettings.DATA_FORMAT_TS)
    .setLowThreshold(100)
    .setHighThreshold(900)
    .setPacketSize(188)
    .build();
    recorder.configure(dvrSettings);
    recorder.attachFilter(filter);
    recorder.setFileDescriptor(fd);
    recorder.start();
    
  2. RecordEvent प्राप्त करें और सूचकांक जानकारी पुनः प्राप्त करें।

    FilterCallback filterCallback = new FilterCallback() {
      @Override
      public void onFilterEvent(Filter filter, FilterEvent[] events) {
        for (FilterEvent event : events) {
          if (event instanceof TsRecordEvent) {
            TsRecordEvent recordEvent = (TsRecordEvent) event;
            int tsMask = recordEvent.getTsIndexMask();
            int scMask = recordEvent.getScIndexMask();
            int packetId = recordEvent.getPacketId();
            long dataLength = recordEvent.getDataLength();
            // handle the masks etc. }
          }
        }
    };
    
  3. OnRecordStatusChangedListener को प्रारंभ करें और रिकॉर्ड डेटा संग्रहीत करें।

      OnRecordStatusChangedListener listener = new OnRecordStatusChangedListener() {
        @Override
        public void onRecordStatusChanged(int status) {
          // a customized way to consume data efficiently by using status as a hint.
          if (status == Filter.STATUS_DATA_READY) {
            recorder.write(size);
          }
        }
      };
    

ट्यूनर एचएएल

ट्यूनर एचएएल एचआईडीएल का अनुसरण करता है और फ्रेमवर्क और विक्रेता हार्डवेयर के बीच इंटरफेस को परिभाषित करता है। विक्रेता ट्यूनर एचएएल को लागू करने के लिए इंटरफ़ेस का उपयोग करते हैं और फ्रेमवर्क ट्यूनर एचएएल कार्यान्वयन के साथ संचार करने के लिए इसका उपयोग करता है।

मॉड्यूल

ट्यूनर एचएएल 1.0

मॉड्यूल बुनियादी नियंत्रण मॉड्यूल-विशिष्ट नियंत्रण एचएएल फ़ाइलें
ITuner एन/ए frontend(open, getIds, getInfo) , openDemux , openDescrambler , openLnb , getDemuxCaps ITuner.hal
IFrontend setCallback , getStatus , close tune , stopTune , scan , stopScan , setLnb IFrontend.hal
IFrontendCallback.hal
IDemux close setFrontendDataSource , openFilter , openDvr , getAvSyncHwId , getAvSyncTime , connect / disconnectCiCam IDemux.hal
IDvr close , start , stop , configure attach/detachFilters , flush , getQueueDesc IDvr.hal
IDvrCallback.hal
IFilter close , start , stop , configure , getId flush , getQueueDesc , releaseAvHandle , setDataSource IFilter.hal
IFilterCallback.hal
ILnb close , setCallback setVoltage , setTone , setSatellitePosition , sendDiseqcMessage ILnb.hal
ILnbCallback.hal
IDescrambler close setDemuxSource , setKeyToken , addPid , removePid IDescrambler.hal

ट्यूनर एचएएल 1.1 (ट्यूनर एचएएल 1.0 से प्राप्त)

मॉड्यूल बुनियादी नियंत्रण मॉड्यूल-विशिष्ट नियंत्रण एचएएल फ़ाइलें
ITuner एन/ए getFrontendDtmbCapabilities @1.1::ITuner.hal
IFrontend tune_1_1 , scan_1_1 , getStatusExt1_1 link/unlinkCiCam @1.1::IFrontend.hal
@1.1::IFrontendCallback.hal
IFilter getStatusExt1_1 configureIpCid , configureAvStreamType , getAvSharedHandle , configureMonitorEvent @1.1::IFilter.hal
@1.1::IFilterCallback.hal

ट्यूनर एचएएल के मॉड्यूल के बीच इंटरैक्शन का प्रवाह आरेख।

चित्र 13. ट्यूनर एचएएल मॉड्यूल के बीच इंटरैक्शन का आरेख

फ़िल्टर लिंकेज

ट्यूनर एचएएल फ़िल्टर लिंकेज का समर्थन करता है जैसे कि फ़िल्टर को कई परतों के लिए अन्य फ़िल्टर से जोड़ा जा सकता है। फ़िल्टर नीचे दिए गए नियमों का पालन करते हैं।

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

नीचे दिया गया कोड ब्लॉक और चित्र 14 कई परतों को फ़िल्टर करने का एक उदाहरण दिखाता है।

demuxCaps = ITuner.getDemuxCap;
If (demuxCaps[IP][MMTP] == true) {
        ipFilter = ITuner.openFilter(<IP, ..>)
        mmtpFilter1 = ITuner.openFilter(<MMTP ..>)
        mmtpFilter2 = ITuner.openFilter(<MMTP ..>)
        mmtpFilter1.setDataSource(<ipFilter>)
        mmtpFilter2.setDataSource(<ipFilter>)
}

फ़िल्टर लिंकेज उदाहरण का आरेख.

चित्र 14. कई परतों के लिए फ़िल्टर लिंकेज का प्रवाह आरेख

ट्यूनर संसाधन प्रबंधक

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

टीआरएम ऐप्स के लिए ट्यूनर, TVInput और सीएएस हार्डवेयर संसाधनों को प्रबंधित करने के लिए एक सिस्टम सेवा के रूप में चलता है। टीआरएम एक "फोरग्राउंड विन" तंत्र का उपयोग करता है, जो ऐप की अग्रभूमि या पृष्ठभूमि स्थिति और उपयोग केस प्रकार के आधार पर ऐप की प्राथमिकता की गणना करता है। टीआरएम प्राथमिकता के आधार पर संसाधन को अनुदान देता है या रद्द करता है। टीआरएम प्रसारण, ओटीटी और डीवीआर के लिए एटीवी संसाधन प्रबंधन को केंद्रीकृत करता है।

टीआरएम इंटरफ़ेस

TRM ट्यूनर फ्रेमवर्क, MediaCas और TvInputHardwareManager के लिए ITunerResourceManager.aidl में AIDL इंटरफेस को संसाधनों को पंजीकृत करने, अनुरोध करने या जारी करने के लिए उजागर करता है।

ग्राहक प्रबंधन के लिए इंटरफ़ेस नीचे सूचीबद्ध हैं।

  • registerClientProfile(in ResourceClientProfile profile, IResourcesReclaimListener listener, out int[] clientId)
  • unregisterClientProfile(in int clientId)

संसाधनों का अनुरोध करने और जारी करने के लिए इंटरफ़ेस नीचे सूचीबद्ध हैं।

  • requestFrontend(TunerFrontendRequest request, int[] frontendHandle) / releaseFrontend
  • requestDemux(TunerDemuxRequest request, int[] demuxHandle) / releaseDemux
  • requestDescrambler(TunerDescramblerRequest request, int[] descramblerHandle) / releaseDescrambler
  • requestCasSession(CasSessionRequest request, int[] casSessionHandle) / releaseCasSession
  • requestLnb(TunerLnbRequest request, int[] lnbHandle) / releaseLnb

क्लाइंट और अनुरोध वर्ग नीचे सूचीबद्ध हैं।

  • ResourceClientProfile
  • ResourcesReclaimListener
  • TunerFrontendRequest
  • TunerDemuxRequest
  • TunerDescramblerRequest
  • CasSessionRequest
  • TunerLnbRequest

ग्राहक प्राथमिकता

टीआरएम क्लाइंट की प्रोफ़ाइल से पैरामीटर और कॉन्फ़िगरेशन फ़ाइल से प्राथमिकता मान का उपयोग करके क्लाइंट की प्राथमिकता की गणना करता है। प्राथमिकता को ग्राहक से मनमाने ढंग से प्राथमिकता मूल्य द्वारा भी अद्यतन किया जा सकता है।

ग्राहक की प्रोफ़ाइल में पैरामीटर

टीआरएम यह तय करने के लिए mTvInputSessionId से प्रक्रिया आईडी पुनर्प्राप्त करता है कि कोई ऐप अग्रभूमि या पृष्ठभूमि ऐप है या नहीं। mTvInputSessionId , TvInputService.onCreateSession , या TvInputService.onCreateRecordingSession बनाने के लिए एक TIS सत्र प्रारंभ करता है।

mUseCase सत्र के उपयोग के मामले को इंगित करता है। पूर्वनिर्धारित उपयोग के मामले नीचे सूचीबद्ध हैं।

TvInputService.PriorityHintUseCaseType  {
  PRIORITY_HINT_USE_CASE_TYPE_PLAYBACK
  PRIORITY_HINT_USE_CASE_TYPE_LIVE
  PRIORITY_HINT_USE_CASE_TYPE_RECORD,
  PRIORITY_HINT_USE_CASE_TYPE_SCAN,
  PRIORITY_HINT_USE_CASE_TYPE_BACKGROUND
}

विन्यास फाइल

डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल

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

उदाहरण अग्रभूमि पृष्ठभूमि
LIVE 490 400
PLAYBACK 480 300
RECORD 600 500
SCAN 450 200
BACKGROUND 180 100
अनुकूलित कॉन्फ़िगरेशन फ़ाइल

विक्रेता कॉन्फ़िगरेशन फ़ाइल /vendor/etc/tunerResourceManagerUseCaseConfig.xml को अनुकूलित कर सकते हैं। इस फ़ाइल का उपयोग उपयोग केस प्रकारों और उपयोग केस प्राथमिकता मानों को जोड़ने, हटाने या अद्यतन करने के लिए किया जाता है। अनुकूलित फ़ाइल एक टेम्पलेट के रूप में platform/hardware/interfaces/tv/tuner/1.0/config/tunerResourceManagerUseCaseConfigSample.xml उपयोग कर सकती है।

उदाहरण के लिए, एक नया विक्रेता उपयोग मामला VENDOR_USE_CASE__[A-Z0-9]+, [0 - 1000] है। प्रारूप platform/hardware/interfaces/tv/tuner/1.0/config/tunerResourceManagerUseCaseConfig.xsd अनुसरण करना चाहिए।

मनमाना प्राथमिकता मूल्य और अच्छा मूल्य

टीआरएम ग्राहक को मनमाने ढंग से प्राथमिकता मूल्य और अच्छे मूल्य को अद्यतन करने के लिए updateClientPriority प्रदान करता है। मनमाना प्राथमिकता मान उपयोग केस प्रकार और सत्र आईडी से गणना की गई प्राथमिकता मान को अधिलेखित कर देता है।

अच्छा मूल्य इंगित करता है कि जब ग्राहक किसी अन्य ग्राहक के साथ संघर्ष में होता है तो उसका व्यवहार कितना उदार होता है। चुनौतीपूर्ण ग्राहक की तुलना में उसके प्राथमिकता मूल्य की तुलना करने से पहले अच्छा मूल्य ग्राहक के प्राथमिकता मूल्य को कम कर देता है।

पुनर्प्राप्ति तंत्र

नीचे दिया गया चित्र दिखाता है कि संसाधन टकराव होने पर संसाधनों को कैसे पुनः प्राप्त और आवंटित किया जाता है।

पुनः दावा तंत्र प्रक्रिया का आरेख.

चित्र 15. ट्यूनर संसाधनों के बीच संघर्ष के लिए पुनः दावा तंत्र का आरेख