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
जांच ऐप्लिकेशन का इस्तेमाल करें. इसके बाद, कैमरे के लिए नीचे दिए गए सीटीएस और वीटीएस टेस्ट चलाएं.
कैमरे के सीटीएस टेस्ट
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
कैमरे के वीटीएस टेस्ट