SDV मीडिया से जुड़ी ज़रूरी शर्तें

इस दस्तावेज़ में दिए गए कीवर्ड, जैसे कि ज़रूरी है, ज़रूरी नहीं है, करना चाहिए, और हमारा सुझाव है कि, RFC 2119 में बताए गए तरीके से इस्तेमाल किए जाने चाहिए.

गेस्ट सिस्टम (वीएम इमेज)

इस सेक्शन में दी गई ज़रूरी शर्तें, मेहमान सिस्टम पर लागू होती हैं.

मेमोरी

सिस्टम को हर वीएम के लिए कम से कम 2 जीबी मेमोरी देनी होगी.

ऐप्लिकेशन बाइनरी इंटरफ़ेस

डिवाइस में सेट किए गए सिस्टम के लिए:

  • यह एक या उससे ज़्यादा तय किए गए Android NDK ABIs के साथ काम करना चाहिए.
  • एक ही डिवाइस पर मौजूद सभी वीएम इमेज के लिए, एक ही Android NDK ABI का इस्तेमाल करना ज़रूरी है.
  • यह ज़रूरी है कि यह सोर्स के साथ काम करे (उदाहरण के लिए, हेडर के साथ काम करे) और बाइनरी के साथ काम करे (एबीआई के लिए). साथ ही, यह नीचे दी गई सूची में मौजूद हर ज़रूरी लाइब्रेरी के साथ काम करे.
  • नेटिव एपीआई उपलब्ध कराने वाली इन सभी लाइब्रेरी को एसडीवी ऐप्लिकेशन के लिए उपलब्ध कराना ज़रूरी है:
    • libc (C लाइब्रेरी)
    • libdl (डाइनैमिक लिंकर)
    • libdrm.so (Direct Rendering Manager userspace library)
    • libgbm.so (जेनेरिक बफ़र मैनेजमेंट)
    • libEGL.so (नेटिव OpenGL सरफ़ेस मैनेजमेंट)
    • libGLESv1_CM.so (OpenGL ES 1.x)
    • libGLESv2.so (OpenGL ES 2.0)
    • libGLESv3.so (OpenGL ES 3.x)
    • liblog (Android लॉगिंग)
    • libtinyalsav2.so (ऑडियो रिकॉर्ड करने और चलाने की सुविधा)
    • libvulkan.so (Vulkan)
  • पिछली नेटिव लाइब्रेरी के लिए, सार्वजनिक फ़ंक्शन को जोड़ा या हटाया नहीं जाना चाहिए.
  • NDK में बताए गए सभी OpenGL ES 3.1 और Android Extension Pack फ़ंक्शन सिंबल को libGLESv3.so लाइब्रेरी के ज़रिए एक्सपोर्ट करना ज़रूरी है. ध्यान दें कि सभी सिंबल मौजूद होने चाहिए. हालांकि, OpenGL ES में इस बारे में ज़्यादा जानकारी दी गई है कि हर फ़ंक्शन को पूरी तरह से लागू करने के लिए, क्या-क्या ज़रूरी है.
  • libvulkan.so लाइब्रेरी के ज़रिए, Vulkan 1.1 के मुख्य फ़ंक्शन सिंबल के साथ-साथ VK_KHR_surface, VK_KHR_swapchain, VK_KHR_maintenance1, और VK_KHR_get_physical_device_properties2 एक्सटेंशन एक्सपोर्ट करने ज़रूरी हैं. ध्यान दें कि सभी सिंबल मौजूद होने चाहिए. हालांकि, Vulkan में इस बारे में ज़्यादा जानकारी दी गई है कि हर फ़ंक्शन को पूरी तरह से लागू करने के लिए, कौनसी ज़रूरी शर्तें पूरी करनी होंगी.
  • इसे अपस्ट्रीम Android Open Source Project में उपलब्ध सोर्स कोड और हेडर फ़ाइलों का इस्तेमाल करके बनाया जाना चाहिए.

ग्राफ़िक

  • सिस्टम को हार्डवेयर की मदद से ग्राफ़िक्स की रफ़्तार बढ़ाने के लिए, virtio-gpu का इस्तेमाल करना होगा. मेहमान के तौर पर शामिल ड्राइवर को रेंडरिंग के लिए, gfxstream का इस्तेमाल करना चाहिए.

इनपुट

मेहमान सिस्टम में, virtio-input का इस्तेमाल करके होस्ट सिस्टम से फ़ॉरवर्ड किए गए इनपुट इवेंट के लिए सहायता शामिल होनी चाहिए.

OpenGL ES

डिवाइस में सेट किए गए सिस्टम के लिए:

  • नेटिव एपीआई के ज़रिए, OpenGL ES के उन वर्शन (1.1, 2.0, 3.0, 3.1, 3.2) की सही पहचान करना ज़रूरी है जो डिवाइस पर काम करते हैं.
  • इन्हें हर उस OpenGL ES वर्शन के लिए, उससे जुड़े सभी नेटिव एपीआई के साथ काम करना होगा जिसके साथ ये काम करते हैं.
  • OpenGL ES 1.1 और 2.0, दोनों वर्शन पर काम करना ज़रूरी है.
  • OpenGL ES 3.1 को सपोर्ट करने का सुझाव दिया जाता है.
  • OpenGL ES 3.2 सपोर्ट करना चाहिए.
  • उन्हें OpenGL ES के मैनेज किए गए एपीआई और नेटिव एपीआई का इस्तेमाल करके, लागू किए गए किसी भी अन्य OpenGL ES एक्सटेंशन की रिपोर्ट देनी होगी. इसके उलट, उन्हें उन एक्सटेंशन स्ट्रिंग की रिपोर्ट नहीं देनी चाहिए जिन्हें वे सपोर्ट नहीं करते.
  • इन एक्सटेंशन के साथ काम करना ज़रूरी है:
    • EGL_EXT_image_dma_buf_import
    • EGL_EXT_image_dma_buf_import_modifiers
    • EGL_KHR_fence_sync
    • EGL_KHR_image_base
    • EGL_KHR_wait_sync
    • GL_OES_EGL_image

डिवाइस में सेट किए गए सिस्टम को, OpenGL ES लागू करने के लिए यह सुझाव दिया जाता है कि वे Vulkan बैकएंड के साथ ANGLE लाइब्रेरी का इस्तेमाल करें.

Vulkan

डिवाइस में सेट किए गए सिस्टम के लिए:

  • Vulkan 1.3 के साथ काम करने की सुविधा शामिल करने का सुझाव दिया जाता है.
  • Vulkan के वैरिएंट वर्शन के साथ काम नहीं करना चाहिए. इसका मतलब है कि Vulkan के कोर वर्शन का वैरिएंट पार्ट शून्य होना चाहिए.
  • इन एक्सटेंशन के साथ काम करना ज़रूरी है:
    • VK_ANDROID_external_memory_android_hardware_buffer
    • VK_EXT_external_memory_dma_buf
    • VK_EXT_queue_family_foreign
    • VK_KHR_external_memory_fd
    • VK_KHR_external_semaphore_fd

मल्टीमीडिया फ़ाइलों के साथ काम करता है या नहीं

  • डिवाइस में, रॉ ऑडियो कॉन्टेंट को चलाने की सुविधा होनी चाहिए. इसमें ये विशेषताएं होनी चाहिए:

    • सोर्स फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट, 8-बिट, फ़्लोट
    • चैनल: मोनो, स्टीरियो, और आठ चैनलों तक के मान्य मल्टीचैनल कॉन्फ़िगरेशन
    • सैंपलिंग रेट (हर्ट्ज़ में):
      • चैनल में 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 कॉन्फ़िगरेशन, जो पहले बताए गए हैं
      • मोनो और स्टीरियो में 96,000
  • डिवाइस में, रॉ ऑडियो कॉन्टेंट कैप्चर करने की सुविधा होनी चाहिए. डिवाइस में कम से कम ये सुविधाएं होनी चाहिए:

    • फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट
    • सैंपलिंग रेट: 8000, 11025, 16000, 44100, 48000 हर्ट्ज़
    • चैनल: मोनो
  • डिवाइस में, रॉ ऑडियो कॉन्टेंट को कैप्चर करने की सुविधा होनी चाहिए. इसमें ये विशेषताएं होनी चाहिए:

    • फ़ॉर्मैट: लीनियर पीसीएम, 16-बिट और 24-बिट
    • सैंपलिंग रेट: 8000, 11025, 16000, 22050, 24000, 32000, 44100, 48000 हर्ट्ज़
    • चैनल: डिवाइस पर मौजूद माइक्रोफ़ोन की संख्या के बराबर चैनल
  • डिवाइसों में, libtinyalsav2.so एपीआई के ज़रिए ऑडियो चलाने और कैप्चर करने की सुविधा होनी चाहिए. साथ ही, हार्डवेयर ऐक्सेस करने के लिए virtio-sound डिवाइस का इस्तेमाल किया जाना चाहिए. इसके अलावा, ALSA API की सुविधा भी होनी चाहिए.

  • वीडियो एन्कोडर और डिकोडर को, प्लानर या सेमीप्लानर YUV420 8:8:8 कलर फ़ॉर्मैट में से कम से कम एक फ़ॉर्मैट के साथ काम करना ज़रूरी है.

  • वीडियो डिकोडर और एन्कोडर में, H.264 AVC कोडेक काम करना चाहिए.

  • डिवाइसों में H.264 मेन प्रोफ़ाइल लेवल 3.1 और बेसलाइन प्रोफ़ाइल के साथ काम करने की सुविधा होनी चाहिए. आर्बिट्ररी स्लाइस ऑर्डरिंग (एएसओ), फ़्लेक्सिबल मैक्रोब्लॉक ऑर्डरिंग (एफ़एमओ), और रेडंडेंट स्लाइस (आरएस) की सुविधा का इस्तेमाल करना ज़रूरी नहीं है.

  • वीडियो एन्कोडर:

    • नीचे दी गई टेबल में, स्टैंडर्ड डेफ़िनिशन (एसडी) वीडियो एन्कोडिंग प्रोफ़ाइलों के साथ काम करना चाहिए.
    • इसमें हाई डेफ़िनिशन (एचडी) वीडियो एन्कोडिंग प्रोफ़ाइलें काम करनी चाहिए. इनके बारे में यहां दी गई टेबल में बताया गया है.

      एसडी (खराब क्वालिटी) एसडी (अच्छी क्वालिटी) एचडी 720 पिक्सल एचडी 1080 पिक्सल
      वीडियो रिज़ॉल्यूशन 320 x 240 पिक्सल 720 x 480 पिक्सल 1280 x 720 पिक्सल 1920 x 1080 पिक्सल
      वीडियो का फ़्रेम रेट 20 एफ़पीएस 30 fps 30 fps 30 fps
      वीडियो का बिटरेट 384 केबीपीएस 2 एमबीपीएस 4 एमबीपीएस 10 एमबीपीएस
  • वीडियो डिकोडर:

    • नीचे दी गई टेबल में, एचडी 720 पिक्सल वीडियो डिकोडिंग प्रोफ़ाइलों के साथ काम करना चाहिए.
    • यहां दी गई टेबल में, एचडी 1080 पिक्सल वीडियो डिकोडिंग प्रोफ़ाइलों के साथ काम करना ज़रूरी है.

      एसडी (खराब क्वालिटी) एसडी (अच्छी क्वालिटी) एचडी 720 पिक्सल एचडी 1080 पिक्सल
      वीडियो रिज़ॉल्यूशन 320 x 240 पिक्सल 720 x 480 पिक्सल 1280 x 720 पिक्सल 1920 x 1080 पिक्सल
      वीडियो का फ़्रेम रेट 30 fps 30 fps 60 fps 30 fps
      वीडियो का बिटरेट 800 केबीपीएस 2 एमबीपीएस 8 एमबीपीएस 20 एमबीपीएस
  • डिवाइस में सेट किए हुए सिस्टम के लिए, Video4Linux API का इस्तेमाल करके मीडिया कोडेक की सुविधा देना ज़रूरी है.

  • डिवाइस में सेट किए हुए सिस्टम के लिए, Video4Linux API का इस्तेमाल करके हार्डवेयर वीडियो डीकोडर का ऐक्सेस देना ज़रूरी है.

  • हार्डवेयर से तेज़ किए गए सभी वीडियो और इमेज एन्कोडर को, हार्डवेयर कैमरों से फ़्रेम एन्कोड करने की सुविधा देनी होगी. डिवाइस में, virtio-media के ज़रिए वीडियो को एन्कोड और डिकोड करने के लिए, हार्डवेयर ऐक्सेस करने की सुविधा होनी चाहिए.

  • डिवाइस में सेट किए गए सिस्टम को Video4Linux API का इस्तेमाल करके, वीडियो कैमरे का ऐक्सेस देना ज़रूरी है.

होस्ट सिस्टम (हाइपरवाइज़र और हार्डवेयर)

इस सेक्शन में दी गई ज़रूरी शर्तें, होस्ट सिस्टम और हाइपरवाइज़र एनवायरमेंट, दोनों पर लागू होती हैं.

आभासीकरण

  • कोर प्रोफ़ाइल के लिए ज़रूरी virtio डिवाइसों के अलावा, होस्ट सिस्टम को यह जानकारी देनी होगी:
    • virtio-gpu: वर्चुअल जीपीयू और डिसप्ले के लिए
    • virtio-input: इनपुट इवेंट (उदाहरण के लिए, टच, कीबोर्ड) को फ़ॉरवर्ड करने के लिए
    • virtio-sound: वर्चुअल ऑडियो डिवाइसों के लिए
    • virtio-video या virtio-media: वर्चुअल वीडियो कोडेक डिवाइसों के लिए

इनपुट

  • डिवाइस में इनपुट डिवाइसों के साथ काम करने की सुविधा होनी चाहिए. साथ ही, virtio-input का इस्तेमाल करके, मेहमान सिस्टम को इवेंट फ़ॉरवर्ड करने की सुविधा होनी चाहिए. डिवाइस में पॉइंटर, बटन, और रोटरी कंट्रोलर के इनपुट काम करने चाहिए.