คำแนะนำจาก 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 คีย์ในตัวแปลงรหัส (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 แบบมาตรฐานครั้งแรก หรือทั้งสองอย่าง ในแต่ละหมวดหมู่ เฟรมเวิร์กจะส่งข้อมูลมาตรฐานเพียงรายการเดียวเท่านั้น การกำหนดค่าไปยัง SoC หากมีการกำหนดค่ามาตรฐานให้ใช้งาน การติดตั้งใช้งาน SoC จะต้องไม่สนใจการกำหนดค่าของผู้ให้บริการ ถ้า มีการส่งการกำหนดค่าหลายรายการไปยัง SoC ซึ่งผู้ให้บริการ SoC ต้อง การกำหนดค่า RoI เพียงรายการเดียวและไม่สนใจการกำหนดค่าที่เหลือ

การกำหนดค่าจะยังคงอยู่ตามลำดับความสำคัญดังนี้

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