יחסי תלות של יצרן ציוד מקורי (OEM) לניהול משאבי מדיה

המסמך הזה נועד לעזור ליצרני ציוד מקורי (OEM) להטמיע כראוי תמיכה במנהל המשאבים של מדיה ב-Android ובממשקי ה-API הקשורים.

מספר המקסימום של מופעי codec בו-זמניים

הממשק CodecCapabilities.getMaxSupportedInstances מחזיר את המספר המקסימלי של מכונות הקודק הנתמכות בו-זמנית.

בדיקת CTS‏ testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) משמשת לאכיפת ההגדרה המתאימה של הערך המקסימלי ב-/etc/media_codecs.xml.

לדוגמה:

...
<MediaCodecs>
    ...
    <Encoders>
        <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" >
           ...
            <Limit name="concurrent-instances" max="13" />
        </MediaCodec>
        ...
    </Encoders>
    ...
</MediaCodecs>

יצרני ציוד מקורי יכולים להשתמש בבדיקה הזו כדי ליצור את המגבלות בו-זמנית שעוברות את הבדיקה. ככה עושים את זה:

  1. מריצים קודם את הבדיקה באמצעות cts-tradefed.
  2. בודקים את הודעת הכשל שנוצרה. לדוגמה:
    There was 1 failure:
    1) testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest)
    junit.framework.AssertionFailedError: In order to pass the test, please publish
    following codecs' concurrent instances limit in /etc/media_codecs.xml:
    <MediaCodec name="OMX.<vendor>.video.encoder.mpeg4" type="video/mp4v-es" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.h263" type="video/3gpp" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.avc" type="video/avc" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.encoder.vp8" type="video/x-vnd.on2.vp8" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.avc" type="video/avc" >
        <Limit name="concurrent-instances" max="13" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.avc.secure" type="video/avc" >
        <Limit name="concurrent-instances" max="4" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.mpeg4" type="video/mp4v-es" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.h263" type="video/3gpp" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    <MediaCodec name="OMX.<vendor>.video.decoder.vp8" type="video/x-vnd.on2.vp8" >
        <Limit name="concurrent-instances" max="12" />
    </MediaCodec>
    
  3. מוסיפים לקובץ /etc/media_codecs.xml את השורות concurrent-instances שהוצעו בהודעה על כשל הבדיקה.
  4. מריצים מחדש את הבדיקה כדי לוודא שהיא הסתיימה בהצלחה.

קצב הפריימים שאפשר להשיג בקודקים של וידאו

הממשק VideoCapabilities.getAchievableFrameRatesFor מחזיר את טווח קצב הפריימים האפשרי של סרטון בגודל מסוים. יצרן הציוד המקורי (OEM) צריך לספק את המידע הזה לכל מכשיר באמצעות קובץ XML שנמצא בכתובת /etc/media_codecs_performance.xml. ההגדרות האלה נבדקות על ידי בדיקות CTS‏ com.android.cts.videoperf.VideoEncoderDecoderTest ו-android.media.cts.VideoDecoderPerfTest.

יצרני ציוד מקורי יכולים להשתמש בבדיקות CTS כדי ליצור את קובצי ה-XML שעוברים את הבדיקות. ככה עושים את זה:

  1. מריצים קודם את הבדיקות באמצעות cts-tradefed. בגלל השונות בביצועים של Android, מומלץ להריץ את הבדיקות כמה פעמים כדי לקבל ערכים מדויקים יותר של מינימום ומקסימום.
  2. משתמשים בסקריפט get_achievable_rates.py שסופק כדי ליצור את קובץ ה-XML.
  3. שומרים את קובץ ה-XML בכתובת: /etc/media_codecs_performance.xml
    בדרך כלל עושים זאת על ידי שמירת קובץ ה-XML בפרויקט המכשיר (device/<vendor>/<product>) והוספת שורת PRODUCT_COPY_FILES לקובץ device.mk באופן הבא:
    PRODUCT_COPY_FILES += \
    ...
       device/moto/shamu/media_codecs.xml:system/etc/media_codecs.xml \
    +    device/moto/shamu/media_codecs_performance.xml:system/etc/media_codecs_performance.xml
    
  4. מריצים מחדש את בדיקות הביצועים כדי לוודא שהן בוצעו בהצלחה.

קודיקים מאובטחים לצד קודיקים לא מאובטחים

  • supports-secure-with-non-secure-codec – אם לא ניתן לשלב בו-זמנית את המופע של הקודק המאובטח עם המופע של הקודק הלא מאובטח, צריך לציין זאת כהגדרה גלובלית בקובץ media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs – אם אין תמיכה בקיום של כמה מופעים של קודק מאובטח, צריך לציין זאת בתור הגדרה גלובלית בקובץ media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • שימו לב ששתי ההגדרות הן true כברירת מחדל, כלומר אם יש תמיכה בהן, אין צורך להוסיף את שורת ההגדרה ל-media_codecs.xml.
  • אם שתי ההגדרות האלה לא הוגדרו כראוי, יכול להיות שבדיקות ה-CTS של ResourceManagerTest ייכשלו.