Zależności OEM dla menedżera zasobów multimediów

Celem tego dokumentu jest pomoc producentom oryginalnego sprzętu (OEM) w prawidłowym wdrożeniu obsługi menedżera zasobów multimediów systemu Android i powiązanych interfejsów API.

Maksymalna liczba jednoczesnych wystąpień kodeków

Interfejs CodecCapabilities.getMaxSupportedInstances zwraca maksymalną liczbę obsługiwanych współbieżnych instancji kodeka.

Test CTS testGetMaxSupportedInstances(android.media.cts.MediaCodecCapabilitiesTest) służy do wymuszania ustawienia odpowiedniego maksimum 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ą wykorzystać ten test do wygenerowania współbieżnych limitów, które pomyślnie przejdą test. Aby to zrobić:

  1. Najpierw przeprowadź test, używając cts-tradefed.
  2. Oceń wynikowy 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 wiersze concurrent-instances sugerowane w komunikacie o niepowodzeniu testu do pliku /etc/media_codecs.xml .
  4. Uruchom ponownie test, aby sprawdzić jego powodzenie.

Osiągalne liczby klatek na sekundę dla kodeków wideo

Interfejs VideoCapabilities.getAchievableFrameRatesFor zwraca zakres osiągalnych szybkości klatek wideo dla danego rozmiaru wideo. Informacje te muszą być dostarczone przez producenta OEM dla każdego urządzenia za pośrednictwem pliku XML umieszczonego w /etc/media_codecs_performance.xml . Ustawienia te 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 przejdą testy. Aby to zrobić:

  1. Najpierw przeprowadź testy, używając cts-tradefed. Biorąc pod uwagę zmienność wydajności Androida, zaleca się wielokrotne uruchomienie testów, aby uzyskać dokładniejsze wartości minimalne i maksymalne.
  2. Użyj dostarczonego skryptu get_achievable_rates.py , aby wygenerować plik XML.
  3. Umieść plik XML pod adresem: /etc/media_codecs_performance.xml
    Zwykle robi się to poprzez umieszczenie pliku XML w projekcie urządzenia (device/ <vendor> / <product> ) i dodanie linii PRODUCT_COPY_FILES do device.mk w następujący 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. Uruchom ponownie testy wydajności, aby sprawdzić ich powodzenie.

Współistnienie kodeków bezpiecznych i kodeków niezabezpieczonych

  • obsługuje-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>
    …
    
  • obsługuje-multiple-secure-codecs — Jeśli współistnienie wielu instancji bezpiecznych kodeków 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>
    …
    
  • Należy pamiętać, że oba ustawienia mają domyślnie wartość true, co oznacza, że ​​jeśli są obsługiwane, nie ma potrzeby dodawania linii ustawień do pliku media_codecs.xml .
  • Testy ResourceManagerTest CTS mogą zakończyć się niepowodzeniem, jeśli te dwa ustawienia nie zostały ustawione prawidłowo.