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

Android 10 पर काम करने वाले डिवाइसों में, HEIC कंप्रेस किए गए इमेज फ़ॉर्मैट का इस्तेमाल किया जा सकता है. यह हाई एफ़िशियंसी वीडियो एन्कोडिंग (HEVC) का एक खास ब्रैंड है. इसे हाई एफ़िशियंसी इमेज फ़ाइल फ़ॉर्मैट (HEIF) के तौर पर ISO/IEC 23008-12 में बताया गया है. HEIC फ़ॉर्मैट में सेव की गई इमेज, JPEG फ़ॉर्मैट में सेव की गई इमेज की तुलना में बेहतर क्वालिटी की होती हैं. साथ ही, इनका फ़ाइल साइज़ भी कम होता है.

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

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

HEIC इमेज फ़ॉर्मैट के लिए, आपके डिवाइस में ऐसा हार्डवेयर एन्कोडर होना चाहिए जो 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 टाइप का कोडेक, IMPLEMENTATION_DEFINED फ़ॉर्मैट का इस्तेमाल करता है.GRALLOC_USAGE_HW_IMAGE_ENCODER

कैमरा

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

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

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

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

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

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

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

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

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

कैमरा एचएएल

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

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

सत्यापन

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

कैमरा CTS टेस्ट

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