คำแนะนำจาก OEM สำหรับการใช้ RoI

Android 15 เปิดตัวกระบวนการมาตรฐานสำหรับ การผสานรวมการกำหนดค่าภูมิภาคที่ผู้ใช้สนใจ (RoI) เข้ากับวิดีโอ Android ของ Google Analytics ฟีเจอร์นี้ช่วยให้คุณภาพการบีบอัดสำหรับ 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 ใน 1 เฟรม

  • ค่า: แต่ละค่าของอาร์เรย์คือค่าชดเชย 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 อยู่ภายในช่วงแต่ผู้ให้บริการ 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