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

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

מספר מקסימלי של מופעי קודק בו-זמנית

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

בדיקת ה-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. מוסיפים את השורות concurrent-instances שמוצעות בהודעת הכישלון של הבדיקה לקובץ /etc/media_codecs.xml.
  4. מריצים מחדש את הבדיקה כדי לוודא שהיא הצליחה.

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

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

יצרני ציוד מקורי יכולים להשתמש בבדיקות 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.
  • יכול להיות שהבדיקות של ResourceManagerTest CTS ייכשלו אם שתי ההגדרות האלה לא הוגדרו בצורה נכונה.