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

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 जांच ऐप्लिकेशन का इस्तेमाल करें. इसके बाद, कैमरे के लिए नीचे दिए गए सीटीएस और वीटीएस टेस्ट चलाएं.

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

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