ב-Android 15 אנחנו משיקים תהליך סטנדרטי שילוב תצורות משתמש של אזור עניין (RoI) בסרטון Android מקודדת. התכונה הזו מאפשרת דחיסת נתונים טובה יותר ל-RoI על ידי הצעת ממשקי API ציבוריים לשילוב ולניתוח תצורות משתמשים בסרטון בארכיטקטורת המקודד-מפענח,
הטמעה
ספקי SoC ויצרני ציוד מקורי יכולים לשלוט בתמיכה ב-RoI בקידוד וידאו באמצעות
FEATURE_Roi
לסמן. אם FEATURE_Roi
לא מופעל, אין שינוי בהתנהגות של מקודד הווידאו.
שינויים במסגרת של הסרטון
בקטע הזה מתוארים השינויים הנדרשים במסגרת הסרטון כדי להטמיע את .
מקשים ב-Codec2
ב-Android 15, מפת הפרמטרים של הקוונטיזציה
(QP_map
) והגדרות מלבניות (rect
) מוגדרים כ-RoI
סוגי ההגדרות האישיות. בנוסף, ב-Codec2 (C2) מוכנסים שני מפתחות כדי
נתמכות בסוגים החדשים האלה. השימוש בשני המפתחות זהה לשימוש בממשקי ה-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 נקבע על ידי בקרת התעריפים המקורית.
- אם הוא לא אפס: ה-QP הוא הערך המקורי של בקרת התעריפים בתוספת הקיזוז.
- אם הוא שלילי: איכות הסרטון תשתפר בקהל היעד של LCU.
- אם הערך הוא חיובי: איכות הסרטון ירדה ביעד ה-LCU.
שימוש: על המשתמש להגדיר את המפתח הזה כבלוקים בגודל 16x16. המקודד מתאים את עצמו את התצורה לגודל ה-LCU האמיתי על ידי ממוצע הערכים של המודל 16x16. ב-LCU.
C2_PARAMKEY_QP_OFFSET_RECTS
C2_PARAMKEY_QP_OFFSET_RECTS
מקש (מוגדר ל-coding.qp-offset-rects
מגדירה את ההחזר על הוצאות הפרסום כ-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 בצורה מלבנית. ההחזר על הוצאות הפרסום הוא נמתח כדי ליישר קו עם הגבולות של LCU. הערך מייצג את הפינה השמאלית העליונה של כל פיקסל, כך ש-(0,0), (16, 16) מגדיר בלוק מלא של 16x16.qpOffset
: כל ערך במערך מייצג את קיזוז ה-QP של היעד אזורrect
. ההגדרה שלו והשימוש בו זהים ערך שלkParamIndexQpOffsetMapBuffer
.
אלגוריתם מיפוי
בטבלה הבאה מוצג המיפוי מהמפתחות שגלויים לכולם לסרטון framework:
מפתחות ציבוריים או ממשקי API | מיפוי ב-framework של סרטון |
---|---|
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
או לשניהם. בכל קטגוריה, ה-framework שולח רק גרסה סטנדרטית אחת
ל-SoC ואם ההגדרות הסטנדרטיות זמינות,
הטמעת ה-SoC חייבת להתעלם מהגדרות הספק. אם המיקום
כמה הגדרות אישיות נשלחות ל-SoC, ספק ה-SoC צריך לשמור
רק הגדרה אחת של RoI ומתעלמים משאר ההגדרות.ההגדרות נשמרות לפי סדר העדיפות הבא:
|