आरओआई लागू करने के लिए ओईएम से जुड़े दिशा-निर्देश

Android 15 पेश करता है एक स्टैंडर्ड प्रोसेस Android वीडियो में, पसंद की जगह (RoI) के उपयोगकर्ता कॉन्फ़िगरेशन इंटिग्रेट करना कोड में बदलने का फ़्रेमवर्क. यह सुविधा RoI के लिए बेहतर कंप्रेशन क्वालिटी देती है वीडियो में उपयोगकर्ता के कॉन्फ़िगरेशन को इंटिग्रेट और विश्लेषण करने के लिए सार्वजनिक एपीआई उपलब्ध कराना एन्कोडर.

लागू करना

SoC वेंडर और OEM, वीडियो एन्कोडिंग के लिए आरओआई की सुविधा को कंट्रोल कर सकते हैं. इसके लिए, FEATURE_Roi फ़्लैग करें. अगर FEATURE_Roi चालू नहीं है, तो वीडियो एन्कोडर के काम करने के तरीके में कोई बदलाव नहीं होगा.

वीडियो फ़्रेमवर्क में बदलाव

इस सेक्शन में यह बताया गया है कि इसे लागू करने के लिए वीडियो फ़्रेमवर्क में क्या बदलाव करने होंगे. सुविधा.

कोडेक2 में मौजूद कुंजियां

Android 15 में, क्वांटाइज़ेशन पैरामीटर मैप (QP_map) और आयताकार कॉन्फ़िगरेशन (rect) को RoI के तौर पर बताया गया है कॉन्फ़िगरेशन प्रकार. इसके अलावा, कोडेक 2 (C2) में दो कुंजियां जोड़ी गई हैं, इन नए प्रकारों का समर्थन करता है. दोनों कुंजियों का इस्तेमाल, सार्वजनिक एपीआई की तरह ही होता है. एन्कोडर के फ़्रेम लूप में, कॉन्फ़िगरेशन डाइनैमिक तौर पर अडजस्ट होता है चालू चरण के दौरान, इनपुट बफ़र को सूची में जोड़े जाने से पहले. अनुसरण करता है:

  • स्टिकी स्थिति में, अगर मौजूदा वर्शन के लिए कोई आरओआई कॉन्फ़िगरेशन नहीं दिया गया हो फ़्रेम सेट अप करने के लिए, एन्कोडर उसी कॉन्फ़िगरेशन का इस्तेमाल करता है जो पिछले फ़्रेम का है.

  • डाइनैमिक स्थिति में, आरओआई कॉन्फ़िगरेशन के टाइप डाइनैमिक तौर पर बदल सकते हैं.

C2 में मौजूद नई कुंजियों के बारे में इन सेक्शन में बताया गया है.

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer कुंजी किसी फ़्रेम के लिए qp-offset मैप को सिग्नल देती है. इसकी वैल्यू, इनपुट का इस्तेमाल करके तय की जाती है पैरामीटर PARAMETER_KEY_QP_OFFSET_MAP setParameters से.

kParamIndexQpOffsetMapBuffer, इसमें एक बाइट अरे है C2InfoBuffer, और इन एट्रिब्यूट की वैल्यू सबमिट करें:

  • लंबाई: एक फ़्रेम में 16x16 ब्लॉक की संख्या.

  • वैल्यू: अरे की हर वैल्यू, क्षेत्र में 16x16 ब्लॉक का QP ऑफ़सेट होती है -51~51. टारगेट की सबसे बड़ी कोडिंग यूनिट (एलसीयू) की क्यूपी का हिसाब, एन्कोडर रेट कंट्रोल और ऑफ़सेट. अगर कैलकुलेट किया गया नतीजा 0~51 से ज़्यादा है क्षेत्र में, वैल्यू को घटाकर 0~51 कर दिया जाता है.

    • अगर 0: कोई क्यूपी ऑफ़सेट नहीं है, तो क्यूपी को मूल रेट कंट्रोल से तय किया जाता है.
    • अगर ज़ीरो नहीं है: क्यूपी का मतलब मूल दर कंट्रोल और ऑफ़सेट है.
    • अगर खराब है: टारगेट एलसीयू में वीडियो की क्वालिटी बूस्ट की जाती है.
    • अगर पॉज़िटिव होता है: टारगेट एलसीयू में वीडियो की क्वालिटी घट जाती है.
  • इस्तेमाल: उपयोगकर्ता को इस कुंजी को 16x16 ब्लॉक के तौर पर कॉन्फ़िगर करना होगा. एन्कोडर अडजस्ट कर देता है 16x16 की वैल्यू का औसतन रखकर, कॉन्फ़िगरेशन को असली एलसीयू साइज़ के हिसाब से सेट किया जा सकता है ब्लॉक किए गए हैं.

सी2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS कुंजी (coding.qp-offset-rects पर सेट करें RoI को QpOffset-Rects पर सेट करता है. इसकी वैल्यू, setParameters के इनपुट पैरामीटर PARAMETER_KEY_QP_OFFSET_RECTS का इस्तेमाल करके सेट की गई है.

इस कुंजी के काम करने के लिए, यह स्ट्रक्चर C2QpOffsetRectStruct पेश किया गया है:

struct C2QpOffsetRectStruct : C2Rect {
  int32_t qpOffset;

  DEFINE_AND_DESCRIBE_C2STRUCT(QpOffsetRect)
  C2FIELD(width, "width")
  C2FIELD(height, "height")
  C2FIELD(left, "left")
  C2FIELD(top, "top")
  C2FIELD(qpOffset, "qp-offset")
}

कहाँ:

  • top और left: RoI के निर्देशांक, जिनका आकार आयताकार होता है. आरओआई एलसीयू की सीमाओं के मुताबिक बनाया गया है. यह वैल्यू दिखाती है हर पिक्सल का सबसे ऊपरी बायां कोना, जिससे कि ((0,0), (16, 16)) परिभाषित करे 16x16 का पूरा ब्लॉक.

  • qpOffset: कलेक्शन की हर वैल्यू, टारगेट के क्यूपी ऑफ़सेट को दिखाती है rect क्षेत्र. इसकी परिभाषा और इस्तेमाल वही हैं जो kParamIndexQpOffsetMapBuffer वैल्यू.

मैपिंग का एल्गोरिदम

नीचे दी गई टेबल में, सार्वजनिक पासकोड से वीडियो पर मैप करने की जानकारी दी गई है फ़्रेमवर्क:

सार्वजनिक पासकोड या एपीआई वीडियो फ़्रेमवर्क में मैपिंग
PARAMETER_KEY_QP_OFFSET_MAP वैल्यू, kParamIndexQpOffsetMapBuffer को C2InfoBuffer इंस्टेंस.
PARAMETER_KEY_QP_OFFSET_RECTS वैल्यू को String से इसमें बदला गया है Struct C2QpOffsetRectStruct और को पास किया गया C2_PARAMKEY_QP_OFFSET_RECTS.

गड़बड़ी ठीक करना

OEM को इन गड़बड़ियों को ठीक करना होगा:

गड़बड़ी का मामला उदाहरण फ़ोन के रखरखाव का सही तरीका
वेंडर कुंजी और स्टैंडर्ड कुंजी, दोनों का इस्तेमाल आरओआई को चालू करने के लिए किया जाता है. उपयोगकर्ता, setFeatureEnabled(FEATURE_ROI) और वेंडर कुंजी का इस्तेमाल करके आरओआई चालू करें. RoI चालू होना चाहिए.
क्यूपी ऑफ़सेट सीमा में है, लेकिन SoC वेंडर के साथ काम नहीं करता. उपयोगकर्ता, क्यूपी ऑफ़सेट को 12 पर सेट करता है, लेकिन SoC सिर्फ़ 10 तक क्यूपी ऑफ़सेट के साथ काम करता है. इसके लिए, सबसे सही क्यूपी ऑफ़सेट रेंज का इस्तेमाल करना बाकी है. मान है क्लैंप किया गया की सीमा तय कर सकते हैं.
एक से ज़्यादा आरओआई कॉन्फ़िगरेशन (चाहे स्टैंडर्ड पासकोड हो या की) एक फ़्रेम पर सेट होती हैं. उपयोगकर्ता, फ़्रेम 1 के लिए स्टैंडर्ड कुंजी और वेंडर कुंजी, दोनों का इस्तेमाल करता है. अगर उपलब्ध हो, तो फ़्रेमवर्क पहले स्टैंडर्ड rect को बनाए रखता है कॉन्फ़िगरेशन, पहला स्टैंडर्ड QP_map कॉन्फ़िगरेशन, या दोनों. हर कैटगरी में, फ़्रेमवर्क सिर्फ़ एक स्टैंडर्ड वैल्यू भेजता है SoC का कॉन्फ़िगरेशन करना चाहिए और अगर स्टैंडर्ड कॉन्फ़िगरेशन उपलब्ध है, SoC लागू करने में वेंडर कॉन्फ़िगरेशन को अनदेखा करना चाहिए. अगर आपने कई कॉन्फ़िगरेशन, SoC को भेजे जाते हैं, तो SoC वेंडर को उसे बनाए रखना होगा सिर्फ़ एक आरओआई कॉन्फ़िगरेशन हो जाता है और बाकी कॉन्फ़िगरेशन को अनदेखा कर दिया जाता है.

कॉन्फ़िगरेशन को प्राथमिकता के इस क्रम में बनाए रखा जाता है:

  1. स्टैंडर्डाइज़्ड rect
  2. स्टैंडर्डाइज़्ड QP_map
  3. वेंडर rect
  4. वेंडर QP_map