HEIF इमेज खींचने की सुविधा

Android 10 वाले डिवाइसों पर, HEIC कंप्रेस किए गए इमेज फ़ॉर्मैट और अच्छी परफ़ॉर्मेंस वाले इमेज फ़ाइल फ़ॉर्मैट (HEIF) के बेहतर परफ़ॉर्मेंस वाले वीडियो एन्कोडिंग (HEVC) वाले ब्रैंड का इस्तेमाल किया जा सकता है. इसकी जानकारी ISO/IEC 23008-12 में दी गई है. HEIC फ़ॉर्मैट में एन्कोड की गई इमेज, JPEG फ़ाइलों की तुलना में कम साइज़ में बेहतर क्वालिटी वाली इमेज उपलब्ध कराती हैं.

HEIC इमेज, कैमरा फ़्रेमवर्क से जनरेट होती हैं. इसके लिए, कैमरा फ़्रेमवर्क कैमरा एचएएल से बिना संपीड़ित की गई इमेज का अनुरोध करता है. इसके बाद, उसे मीडिया सबसिस्टम में भेजता है, ताकि उसे HEIC या HEVC एन्कोडर से एन्कोड किया जा सके.

ज़रूरी शर्तें

एचईआईसी इमेज फ़ॉर्मैट के साथ काम करने के लिए, आपके डिवाइस में ऐसा हार्डवेयर एन्कोडर होना चाहिए जिस पर MIMETYPE_IMAGE_ANDROID_HEIC या MIMETYPE_VIDEO_HEVC हमेशा क्वालिटी मोड काम करता हो.

लागू करना

अपने डिवाइस पर HEIC इमेज फ़ॉर्मैट का इस्तेमाल करने के लिए, HEIC/HEVC कोडेक लागू करें और ज़रूरी स्ट्रीम कॉन्फ़िगरेशन के लिए सहायता दें. ये IMPLEMENTATION_DEFINED/YUV स्ट्रीम और JPEG ऐप्लिकेशन सेगमेंट स्ट्रीम हैं.

मीडिया

इससे जुड़े हार्डवेयर के लिए, कॉन्सटैंट क्वालिटी (सीक्यू) मोड में HEIC/HEVC कोडेक इस तरह से लागू करें:

  • HEVC टाइप कोडेक, इमेज के साइज़ के हिसाब से GRALLOC_USAGE_HW_VIDEO_ENCODER के इस्तेमाल के साथ IMPLEMENTATION_DEFINED फ़ॉर्मैट या HAL_PIXEL_FORMAT_YCBCR_420_888 फ़ॉर्मैट में से किसी एक का इस्तेमाल करता है.
  • HEIC टाइप कोडेक, GRALLOC_USAGE_HW_IMAGE_ENCODER के इस्तेमाल के साथ IMPLEMENTATION_DEFINED फ़ॉर्मैट का इस्तेमाल करता है.

कैमरा

स्टैटिक मेटाडेटा में, ANDROID_HEIC_INFO_SUPPORTED को 'सही' पर और ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT को [1, 16] के बीच की वैल्यू पर सेट करें. इससे JPEG ऐप्लिकेशन सेगमेंट की संख्या का पता चलेगा.

स्ट्रीम के हर ज़रूरी कॉम्बिनेशन के लिए, आपके कैमरे के डिवाइस में JPEG स्ट्रीम को एक ही साइज़ की HEIC स्ट्रीम से स्वैप किया जा सकता है.

सार्वजनिक एपीआई पर HEIC आउटपुट स्ट्रीम के लिए, कैमरा सेवा दो HAL इंटरनल स्ट्रीम बनाती है:

  • EXIF और थंबनेल सेगमेंट के साथ-साथ ऐप्लिकेशन के सेगमेंट को स्टोर करने के लिए, JPEG_APPS_SEGMENT इस्तेमाल के फ़्लैग वाली BLOB स्ट्रीम
  • IMPLEMENTATION_DEFINED या YCBCR_420_888, टारगेट कोडेक और HEIC स्ट्रीम के साइज़ के आधार पर, HEIC स्ट्रीम का साइज़ स्ट्रीम करता है

ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT के आधार पर, कैमरा फ़्रेमवर्क, कैमरा एचएएल के लिए ज़रूरत के मुताबिक बफ़र को ऐलोकेट करता है, ताकि वह JPEG ऐप्लिकेशन सेगमेंट को पॉप्युलेट कर सके. APP1 सेगमेंट ज़रूरी है, लेकिन APP1 सेगमेंट (APP2 और उसके बाद के) के बाद के सेगमेंट ज़रूरी नहीं हैं. कैमरा फ़्रेमवर्क, APP1 सेगमेंट में मौजूद उन EXIF टैग को बदल देता है जिन्हें कैप्चर के नतीजे के मेटाडेटा से लिया जा सकता है या जो मुख्य इमेज के बिटस्ट्रीम से जुड़े होते हैं. साथ ही, उन्हें MediaMuxer पर भेजता है.

मीडिया एन्कोडर, आउटपुट इमेज के मेटाडेटा में ओरिएंटेशन एम्बेड करता है, ताकि मुख्य इमेज और थंबनेल के बीच एक जैसी दिशा बनी रहे, इसलिए कैमरा एचएएल को थंबनेल इमेज को इनके आधार पर नहीं घुमाना चाहिए android.jpeg.orientation. फ़्रेमवर्क EXIF मेटाडेटा और HEIC कंटेनर में ओरिएंटेशन लिखता है.

JPEG फ़ॉर्मैट से जुड़े स्टैटिक, कंट्रोल, और डाइनैमिक मेटाडेटा टैग, HEIC फ़ॉर्मैट पर भी लागू होते हैं. उदाहरण के लिए, कैप्चर करने के अनुरोध में मौजूद android.jpeg.orientation और android.jpeg.quality मेटाडेटा टैग का इस्तेमाल, HEIC इमेज के ओरिएंटेशन और क्वालिटी को कंट्रोल करने के लिए किया जाता है.

किसी ऐप्लिकेशन में HEIC फ़ॉर्मैट का इस्तेमाल करने के लिए, HEIC के सार्वजनिक एपीआई का इस्तेमाल करें.

ज़्यादा जानकारी के लिए, यहां दिए गए सोर्स देखें.

कैमरा एचएएल

ग्राफ़िक बफ़र डेटा स्पेस

ग्राफ़िक बफ़र के इस्तेमाल के लिए जगह

पुष्टि करें

यह पुष्टि करने के लिए कि आपका लागू किया गया कोड, HEIC इमेज के साथ काम करता है या नहीं, TestingCamera2 जांच ऐप्लिकेशन का इस्तेमाल करें. इसके बाद, कैमरे के लिए नीचे दिए गए सीटीएस और वीटीएस टेस्ट चलाएं.

कैमरे के सीटीएस टेस्ट

कैमरे के वीटीएस टेस्ट