मीडिया रिसॉर्स मैनेजर के लिए OEM डिपेंडेंसी

इस दस्तावेज़ का मकसद, ओरिजनल इक्विपमेंट मैन्युफ़ैक्चरर (ओईएम) की मदद करना है, ताकि वे Android मीडिया रिसॉर्स मैनेजर और उससे जुड़े एपीआई को सही तरीके से लागू कर सकें.

एक साथ इस्तेमाल किए जा सकने वाले कोडेक इंस्टेंस की ज़्यादा से ज़्यादा संख्या

CodecCapabilities.getMaxSupportedInstances इंटरफ़ेस, साथ-साथ काम करने वाले कोडेक इंस्टेंस की ज़्यादा से ज़्यादा संख्या दिखाता है.

सीटीएस टेस्ट 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 इंटरफ़ेस, वीडियो के साइज़ के हिसाब से हासिल किए जा सकने वाले वीडियो फ़्रेम रेट की रेंज दिखाता है. यह जानकारी, ओईएम को हर डिवाइस के लिए देनी होगी. इसके लिए, उसे /etc/media_codecs_performance.xml पर मौजूद एक्सएमएल फ़ाइल का इस्तेमाल करना होगा. इन सेटिंग की जांच, com.android.cts.videoperf.VideoEncoderDecoderTest और android.media.cts.VideoDecoderPerfTest सीटीएस टेस्ट से की जाती है.

ओईएम, सीटीएस टेस्ट का इस्तेमाल करके ऐसी एक्सएमएल फ़ाइलें जनरेट कर सकते हैं जो टेस्ट पास कर लेती हैं. ऐसा करने के लिए:

  1. सबसे पहले, cts-tradefed का इस्तेमाल करके टेस्ट चलाएं. Android की परफ़ॉर्मेंस में बदलाव होता रहता है. इसलिए, हमारा सुझाव है कि कम से कम और ज़्यादा से ज़्यादा वैल्यू का ज़्यादा सटीक अनुमान पाने के लिए, टेस्ट को कई बार चलाया जाए.
  2. एक्सएमएल फ़ाइल जनरेट करने के लिए, दी गई get_achievable_rates.py स्क्रिप्ट का इस्तेमाल करें.
  3. एक्सएमएल फ़ाइल को यहां रखें: /etc/media_codecs_performance.xml
    आम तौर पर, एक्सएमएल फ़ाइल को डिवाइस प्रोजेक्ट (device/<vendor>/<product>) में रखा जाता है. साथ ही, device.mk में PRODUCT_COPY_FILES लाइन इस तरह जोड़ी जाती है:
    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>
    …
    
  • ध्यान दें कि दोनों सेटिंग डिफ़ॉल्ट रूप से चालू होती हैं. इसका मतलब है कि अगर ये सेटिंग काम करती हैं, तो media_codecs.xml में सेटिंग लाइन जोड़ने की ज़रूरत नहीं है.
  • अगर इन दोनों सेटिंग को सही तरीके से सेट नहीं किया गया है, तो हो सकता है कि ResourceManagerTest सीटीएस टेस्ट पास न हो पाएं.