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 टाइप का कोडेक, इमेज के साइज़ के हिसाब से IMPLEMENTATION_DEFINED फ़ॉर्मैट का GRALLOC_USAGE_HW_VIDEO_ENCODER इस्तेमाल करता है या 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 स्ट्रीम के साइज़ के आधार पर, HEIC स्ट्रीम के साइज़ की IMPLEMENTATION_DEFINED या YCBCR_420_888 स्ट्रीम

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

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

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

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

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

कैमरा एचएएल

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

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

Validation

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

कैमरा CTS टेस्ट

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