Android 10 वाले डिवाइसों पर, HEIC में संपीड़ित इमेज फ़ॉर्मैट का इस्तेमाल किया जा सकता है. यह हाई एफ़िशिएंसी इमेज फ़ाइल फ़ॉर्मैट (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 टाइप कोडेक,
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 इंटरनल स्ट्रीम बनाती है:
JPEG_APPS_SEGMENT
इस्तेमाल के फ़्लैग वाली BLOB स्ट्रीम, जिसमें EXIF और थंबनेल सेगमेंट के साथ-साथ ऐप्लिकेशन सेगमेंट भी स्टोर किए जाते हैं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 के सार्वजनिक एपीआई का इस्तेमाल करें.
ज़्यादा जानकारी के लिए, यहां दिए गए सोर्स देखें.
Camera HAL
ग्राफ़िक बफ़र डेटा स्पेस
ग्राफ़िक बफ़र के इस्तेमाल के लिए जगह
पुष्टि करें
यह पुष्टि करने के लिए कि आपका लागू किया गया कोड, HEIC इमेज के साथ काम करता है या नहीं, TestingCamera2
जांच ऐप्लिकेशन का इस्तेमाल करें. इसके बाद, कैमरे के लिए नीचे दिए गए सीटीएस और वीटीएस टेस्ट चलाएं.
कैमरे के सीटीएस टेस्ट
NativeImageReaderTest#testHeic
ImageReaderTest#testHeic
ImageReaderTest#testRepeatingHeic
ReprocessCaptureTest#testBasicYuvToHeicReprocessing
ReprocessCaptureTest#testBasicOpaqueToHeicReprocessing
RobustnessTest#testMandatoryOutputCombinations
StillCaptureTest#testHeicExif
कैमरे के वीटीएस टेस्ट