ב-Android 15 אנחנו משיקים תהליך סטנדרטי שילוב תצורות משתמש של אזור עניין (RoI) בסרטון Android מקודדת. התכונה הזו מאפשרת לשפר את איכות הדחיסה של אזורי העניין (ROI) על ידי הצעת ממשקי API ציבוריים לשילוב ולניתוח של הגדרות המשתמש בתוך מקודד הווידאו.
הטמעה
ספקי SoC ו-OEM יכולים לקבוע את התמיכה ב-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
: הקואורדינטות של אזור העניין, בצורה מלבנית. ההחזר על הוצאות הפרסום הוא נמתח כדי ליישר קו עם הגבולות של 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 או בשתיהן. בכל קטגוריה, ה-framework שולח רק גרסה סטנדרטית אחת
ל-SoC ואם ההגדרות הסטנדרטיות זמינות,
הטמעת ה-SoC חייבת להתעלם מהגדרות הספק. אם המיקום
כמה הגדרות אישיות נשלחות ל-SoC, ספק ה-SoC צריך לשמור
רק הגדרה אחת של RoI ומתעלמים משאר ההגדרות.ההגדרות נשמרות לפי סדר העדיפות הזה:
|