คำแนะนำของ OEM สำหรับการติดตั้งใช้งาน ROI

Android 15 เปิดตัวกระบวนการมาตรฐานสำหรับการผสานรวมการกำหนดค่าของผู้ใช้สำหรับพื้นที่สนใจ (RoI) เข้ากับเฟรมเวิร์กการเข้ารหัสวิดีโอของ Android ฟีเจอร์นี้ช่วยให้คุณภาพการบีบอัดสำหรับ RoI มีคุณภาพดีขึ้นได้โดย เสนอ API สาธารณะเพื่อผสานรวมและวิเคราะห์การกำหนดค่าของผู้ใช้ในวิดีโอ โปรแกรมเปลี่ยนไฟล์

การใช้งาน

ผู้ให้บริการ SoC และ OEM สามารถควบคุมการรองรับ ROI สำหรับการเข้ารหัสวิดีโอได้ด้วยธง FEATURE_Roi หากไม่ได้เปิดใช้ FEATURE_Roi ลักษณะการทำงานของโปรแกรมเปลี่ยนไฟล์วิดีโอจะไม่เปลี่ยนแปลง

การเปลี่ยนแปลงในเฟรมเวิร์กวิดีโอ

ส่วนนี้จะให้รายละเอียดเกี่ยวกับการเปลี่ยนแปลงในเฟรมเวิร์กวิดีโอที่จำเป็นต่อการนำสิ่งนี้ไปใช้

คีย์ในตัวแปลงรหัส 2

ใน Android 15 การแมปพารามิเตอร์เชิงปริมาณ (QP_map) และการกําหนดค่าสี่เหลี่ยมผืนผ้า (rect) กําหนดเป็น RoI ประเภทการกำหนดค่า นอกจากนี้ เรายังได้เปิดตัวคีย์ 2 รายการใน Codec2 (C2) เพื่อรองรับประเภทใหม่เหล่านี้ การใช้งานทั้ง 2 คีย์เหมือนกับ API สาธารณะ ภายในลูปเฟรมของโปรแกรมเปลี่ยนไฟล์ การกำหนดค่าจะได้รับการปรับแบบไดนามิก ระหว่างระยะการทำงาน ก่อนที่บัฟเฟอร์อินพุตจะอยู่ในคิว อธิบายดังนี้ ดังต่อไปนี้:

  • ในสถานการณ์ติดหนึบ หากไม่มีการกำหนดค่า RoI สำหรับพร็อพเพอร์ตี้ปัจจุบัน เฟรม โปรแกรมเปลี่ยนไฟล์จะใช้การกำหนดค่าเดียวกันกับเฟรมก่อนหน้านี้

  • ในสถานการณ์แบบไดนามิก ประเภทการกําหนดค่า RoI จะเปลี่ยนแปลงแบบไดนามิกได้

เราได้อธิบายคีย์ใหม่ใน C2 ไว้ในส่วนต่อไปนี้

kParamIndexQpOffsetMapBuffer

kParamIndexQpOffsetMapBuffer สัญญาณหลักที่แมป qp-offset ของเฟรม ค่าของตัวแปรนี้กำหนดโดยใช้พารามิเตอร์อินพุต PARAMETER_KEY_QP_OFFSET_MAP จาก setParameters

kParamIndexQpOffsetMapBuffer คืออาร์เรย์ไบต์ใน C2InfoBuffer ซึ่งมีแอตทริบิวต์ต่อไปนี้

  • ความยาว: จำนวนบล็อก 16x16 ในเฟรมเดียว

  • ค่า: แต่ละค่าของอาร์เรย์คือค่าชดเชย QP ของบล็อกขนาด 16x16 ในภูมิภาค -51~51 QP ของหน่วยการเข้ารหัสที่ใหญ่ที่สุด (LCU) เป้าหมายจะคำนวณโดยการควบคุมอัตราของตัวเข้ารหัสบวกค่าออฟเซ็ต หากผลลัพธ์ที่คำนวณได้เกินช่วง 0-51 ระบบจะตัดค่าให้เหลือ 0-51

    • หากเป็น 0: ไม่มีค่าออฟเซ็ต QP QP จะกำหนดโดยการควบคุมอัตราเดิม
    • หากไม่ใช่ 0: QP คือการควบคุมอัตราเดิมบวกค่าออฟเซ็ต
    • หากเป็นค่าลบ: คุณภาพวิดีโอจะเพิ่มขึ้นใน LCU เป้าหมาย
    • ผลลัพธ์เป็นบวก: คุณภาพวิดีโอใน LCU เป้าหมายลดลง
  • การใช้งาน: ผู้ใช้ต้องกำหนดค่าคีย์นี้เป็นบล็อกขนาด 16x16 จะมีการปรับโปรแกรมเปลี่ยนไฟล์ กำหนดค่าเป็นขนาด LCU จริงโดยหาค่าเฉลี่ยค่าของ 16x16 ใน LCU

C2_PARAMKEY_QP_OFFSET_RECTS

C2_PARAMKEY_QP_OFFSET_RECTS คีย์ (ตั้งค่าเป็น coding.qp-offset-rects กำหนด RoI เป็น QpOffset-Rects ค่าจะกำหนดโดยใช้พารามิเตอร์อินพุต PARAMETER_KEY_QP_OFFSET_RECTS จาก setParameters

โครงสร้าง 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 ในรูปทรงสี่เหลี่ยมผืนผ้า RoI จะยืดออกให้สอดคล้องกับขอบเขต LCU ค่านี้แสดงถึง มุมซ้ายบนของแต่ละพิกเซล โดยที่ ((0,0), (16, 16)) 16x16 บล็อกเต็ม

  • qpOffset: แต่ละค่าของอาร์เรย์แสดงถึงค่าชดเชย QP ของเป้าหมาย พื้นที่ rect แห่ง มีคำจำกัดความและการใช้งานเหมือนกับ kParamIndexQpOffsetMapBuffer

อัลกอริทึมการแมป

ตารางต่อไปนี้แสดงการแมปจากคีย์สาธารณะไปยังเฟรมเวิร์กวิดีโอ

คีย์สาธารณะหรือ API การแมปในเฟรมเวิร์กวิดีโอ
PARAMETER_KEY_QP_OFFSET_MAP ระบบจะส่งค่าไปยัง kParamIndexQpOffsetMapBuffer เป็นอินสแตนซ์ C2InfoBuffer
PARAMETER_KEY_QP_OFFSET_RECTS ระบบจะแปลงค่าจาก String เป็น Struct C2QpOffsetRectStruct และส่งไปยัง C2_PARAMKEY_QP_OFFSET_RECTS

การจัดการข้อผิดพลาด

การใช้งาน OEM ต้องจัดการกับกรณีข้อผิดพลาดต่อไปนี้

กรณีข้อผิดพลาด ตัวอย่าง การใช้งาน
ระบบจะใช้ทั้งคีย์ของผู้ให้บริการและคีย์มาตรฐานเพื่อเปิดใช้ RoI ผู้ใช้เรียกทั้ง setFeatureEnabled(FEATURE_ROI) และ คีย์ผู้ให้บริการเพื่อเปิด RoI ต้องเปิด ROI
QP offset อยู่ในช่วงแต่ผู้ให้บริการ SoC ไม่รองรับ ผู้ใช้ตั้งค่าออฟเซ็ต QP เป็น 12 แต่ SoC รองรับออฟเซ็ต QP ได้สูงสุด 10 เท่านั้น ช่วงออฟเซ็ต QP ที่รองรับจะเก็บไว้อย่างดีที่สุด ค่าจะถูกจำกัดให้อยู่ในช่วงที่ได้รับการรองรับของ SoC
การกำหนดค่า RoI หลายรายการ (ไม่ว่าจะเป็นคีย์มาตรฐานหรือ คีย์เฉพาะผู้ให้บริการ) ตั้งไว้เป็นเฟรมเดียว ผู้ใช้ใช้ทั้งคีย์มาตรฐานและคีย์ของผู้ให้บริการสำหรับเฟรม 1 หากมี เฟรมเวิร์กจะเก็บการกําหนดค่า rect มาตรฐานครั้งแรก การกําหนดค่า QP_map มาตรฐานครั้งแรก หรือทั้ง 2 อย่างไว้ ในแต่ละหมวดหมู่ เฟรมเวิร์กจะส่งการกำหนดค่ามาตรฐานเพียงรายการเดียวไปยัง SoC และหากมีการกำหนดค่ามาตรฐาน การติดตั้งใช้งาน SoC ต้องไม่สนใจการกำหนดค่าของผู้ให้บริการ หากมีการส่งการกําหนดค่าหลายรายการไปยัง SoC ผู้ให้บริการ SoC ต้องเก็บการกําหนดค่า RoI ไว้เพียงรายการเดียวและละเว้นการกําหนดค่าที่เหลือ

ระบบจะเก็บการกำหนดค่าตามลําดับความสําคัญดังนี้

  1. มาตรฐานrect
  2. ทำให้เป็นมาตรฐาน QP_map
  3. ผู้ให้บริการ rect
  4. ผู้ให้บริการ QP_map