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

Ten dokument ma pomóc producentom oryginalnego sprzętu (OEM) w prawidłowym wdrażaniu obsługi menedżera zasobów multimedialnych Androida 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) jest używany do wymuszania prawidłowego ustawienia maksymalnej wartości w /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żywać tego testu do generowania limitów współbieżności, 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 komunikacie o niepowodzeniu testu.
  4. Ponownie przeprowadź test, aby sprawdzić, czy się powiódł.

Osiągalne liczby klatek w przypadku kodeków wideo

Interfejs VideoCapabilities.getAchievableFrameRatesFor zwraca zakres możliwych wartości liczby klatek na sekundę dla danego rozmiaru filmu. Te informacje muszą być dostarczone przez producenta OEM dla każdego urządzenia w pliku XML umieszczonym w lokalizacji /etc/media_codecs_performance.xml. Te ustawienia są testowane przez testy com.android.cts.videoperf.VideoEncoderDecoderTest i android.media.cts.VideoDecoderPerfTest CTS.

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

  1. Najpierw uruchom testy za pomocą cts-tradefed. Ze względu na zmienność wydajności Androida zalecamy wielokrotne przeprowadzanie testów, aby uzyskać dokładniejsze wartości minimalne i maksymalne.
  2. Aby wygenerować plik XML, użyj podanego skryptu get_achievable_rates.py.
  3. Umieść plik XML w tym miejscu: /etc/media_codecs_performance.xml
    Zwykle robi się to, umieszczając plik XML w projekcie urządzenia (device/<vendor>/<product>) i dodając wiersz 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 instancji bezpiecznego kodeka nie jest obsługiwane, należy to wskazać 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 prawdziwe, co oznacza, że jeśli są obsługiwane, nie musisz dodawać wiersza ustawień do pliku media_codecs.xml.
  • ResourceManagerTest Testy CTS mogą się nie powieść, jeśli te 2 ustawienia nie zostały prawidłowo skonfigurowane.