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 टेस्ट
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
कैमरा वीटीएस टेस्ट