Zależność od OEM dla menedżera zasobów multimedialnych

Ten dokument ma pomóc producentom oryginalnego sprzętu (OEM) w właściwym wdrażaniu obsługi menedżera zasobów multimedialnych na Androidzie i powiązanych interfejsów API.

Maksymalna liczba równoczesnych instancji kodeka

Interfejs CodecCapabilities.getMaxSupportedInstances zwraca maksymalną liczbę obsługiwanych równoczesnych instancji kodeka.

Test CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) służy do wymuszenia prawidłowego ustawienia wartości maksymalnej w pliku /etc/media_codecs.xml.

Oto przykład:

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

Producenci OEM mogą użyć tego testu do wygenerowania limitów jednoczesnych, które przejdą test. Aby to zrobić:

  1. Najpierw uruchom test za pomocą cts-tradefed.
  2. Sprawdź komunikat o błędzie. Oto przykład:
    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. Dodaj do pliku /etc/media_codecs.xml wiersze concurrent-instances sugerowane w wiadomości o niepowodzeniach testu.
  4. Ponownie uruchom test, aby sprawdzić, czy się powiodło.

Dostępne częstotliwości klatek dla kodeków wideo

Interfejs VideoCapabilities.getAchievableFrameRatesForzwraca zakres osiągalnych częstotliwości klatek wideo dla danego rozmiaru. Informacje te muszą być podawane przez producenta OEM dla każdego urządzenia w pliku XML umieszczonym w folderze /etc/media_codecs_performance.xml. Te ustawienia są testowane za pomocą testów CTS com.android.cts.videoperf.VideoEncoderDecoderTest i android.media.cts.VideoDecoderPerfTest.

Producenci OEM mogą używać testów CTS do generowania plików XML, które przechodzą testy. Aby to zrobić:

  1. Najpierw uruchom testy za pomocą cts-tradefed. Ze względu na zmienność wydajności Androida zalecamy przeprowadzanie testów kilkakrotnie, aby uzyskać dokładniejsze wartości minimalne i maksymalne.
  2. Aby wygenerować plik XML, użyj udostępnionego skryptu get_achievable_rates.py.
  3. Umieść plik XML w folderze: /etc/media_codecs_performance.xml
    Zwykle odbywa się to przez umieszczenie pliku XML w projekcie urządzenia (device/<vendor>/<product>) i dodanie wiersza PRODUCT_COPY_FILES do device.mk w ten sposób:
    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. Ponownie uruchom testy wydajności, aby sprawdzić, czy się powiodły.

Współistnienie bezpiecznego i niezabezpieczonego kodeka

  • supports-secure-with-non-secure-codec — jeśli instancja bezpiecznego kodeka i instancja niezabezpieczonego kodeka nie mogą współistnieć w tym samym czasie, należy to wskazać jako ustawienie globalne w pliku media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-secure-with-non-secure-codec" value="false" />
        </Settings>
        <Encoders>
    …
    
  • supports-multiple-secure-codecs – jeśli współistnienie wielu bezpiecznych kodeki nie jest obsługiwane, należy wskazać to jako ustawienie globalne w pliku media_codecs.xml.
    <MediaCodecs>
        <Settings>
            <Setting name="supports-multiple-secure-codecs" value="false" />
        </Settings>
        <Encoders>
    …
    
  • Pamiętaj, że oba ustawienia są domyślnie włączone, co oznacza, że jeśli są obsługiwane, nie musisz dodawać linii ustawień do media_codecs.xml.
  • Testy ResourceManagerTest CTS mogą się nie udać, jeśli te 2 ustawienia nie zostały prawidłowo skonfigurowane.