Android-এর ক্যামেরা হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) আপনার অন্তর্নিহিত ক্যামেরা ড্রাইভার ও হার্ডওয়্যারের সাথে android.hardware.camera2-এ উচ্চ লেভেলের ক্যামেরা ফ্রেমওয়ার্ক API কানেক্ট করে। Android 13 থেকে শুরু করে, ক্যামেরা HAL ইন্টারফেস ডেভেলপমেন্ট AIDL ব্যবহার করে। Android 8.0-তে Treble চালু করা হয়েছে, এর ফলে Camera HAL API পরিবর্তিত হয়ে HAL ইন্টারফেস বিবরণ ভাষা (HIDL) দ্বারা সংজ্ঞায়িত একটি স্থিতিশীল ইন্টারফেসে পরিণত হয়েছে। আপনি যদি আগে Android 7.0 এবং এর আগের যেকোনও ভার্সনের জন্য ক্যামেরা HAL মডিউল এবং ড্রাইভার ডেভেলপ করে থাকেন, তাহলে ক্যামেরা পাইপলাইনে হওয়া উল্লেখযোগ্য পরিবর্তন সম্পর্কে সচেতন থাকুন।
AIDL ক্যামেরা HAL
Android 13 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসের জন্য, ক্যামেরা ফ্রেমওয়ার্কে AIDL ক্যামেরা HAL-এর জন্য সহায়তা অন্তর্ভুক্ত থাকে। ক্যামেরা ফ্রেমওয়ার্ক HIDL ক্যামেরা HAL-কেও সাপোর্ট করে, তবে Android 13 বা তার পরের যেকোনও ভার্সনে ক্যামেরা ফিচার যোগ করা হলে তা শুধুমাত্র AIDL ক্যামেরা HAL ইন্টারফেসের মাধ্যমে উপলভ্য হয়। Android 13 বা এর পরের যেকোনও ভার্সনে আপগ্রেড করা ডিভাইসে এই ধরনের ফিচার প্রয়োগ করতে, ডিভাইস প্রস্তুতকারকদের অবশ্যই HIDL ক্যামেরা ইন্টারফেস ব্যবহার করা থেকে AIDL ক্যামেরা ইন্টারফেসে তাদের HAL প্রসেস মাইগ্রেট করতে হবে।
AIDL-এর সুবিধা সম্পর্কে জানতে, HAL-এর জন্য AIDL দেখুন।
AIDL ক্যামেরা HAL প্রয়োগ করুন
AIDL ক্যামেরা HAL-এর রেফারেন্স ইমপ্লিমেন্টেশনের জন্য,
hardware/google/camera/common/hal/aidl_service/ দেখুন।
AIDL ক্যামেরা HAL স্পেসিফিকেশন নিম্নলিখিত লোকেশনে আছে:
- ক্যামেরা পরিষেবা প্রদানকারী:
hardware/interfaces/camera/provider/aidl/ - ক্যামেরা ডিভাইস:
hardware/interfaces/camera/device/aidl/ - ক্যামেরা মেটাডেটা:
hardware/interfaces/camera/metadata/aidl/ - সাধারণ ডেটার ধরন:
hardware/interfaces/camera/common/aidl/
যেসব ডিভাইস AIDL-এ মাইগ্রেট করছে, সেগুলির ডিভাইস প্রস্তুতকারকদের কোড স্ট্রাকচারের উপর নির্ভর করে Android SELinux নীতি (sepolicy) এবং RC ফাইল পরিবর্তন করতে হতে পারে।
AIDL ক্যামেরা HAL যাচাই করুন
আপনার AIDL ক্যামেরা HAL ইমপ্লিমেন্টেশন পরীক্ষা করতে, ডিভাইসটি যাতে সব
CTS এবং VTS পরীক্ষা পাস করে তা নিশ্চিত করুন। Android 13, AIDL VTS
test,
VtsAidlHalCameraProvider_TargetTest.cpp নিয়ে এসেছে।
Camera HAL3 ফিচার
Android Camera API-কে নতুন করে ডিজাইন করার উদ্দেশ্য হল, Android ডিভাইসে ক্যামেরা সাবসিস্টেম কন্ট্রোল করার জন্য অ্যাপের ক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করা, একই সাথে API-কে আরও বেশি দক্ষ ও ম্যানেজ করার উপযুক্ত করে তুলতে পুনর্গঠন করা। অতিরিক্ত কন্ট্রোল Android ডিভাইসে খুব ভালো কোয়ালিটির ক্যামেরা অ্যাপ তৈরি করা আরও সহজ করে তোলে যা একাধিক প্রোডাক্ট জুড়ে নির্ভরযোগ্যভাবে কাজ করতে পারে এবং একই সাথে কোয়ালিটি ও পারফর্ম্যান্স সর্বাধিক করার জন্য যখনই সম্ভব ডিভাইস-নির্দিষ্ট অ্যালগরিদম ব্যবহার করে।
ক্যামেরা সাবসিস্টেমের ভার্সন ৩ অপারেশন মোডগুলিকে একটি একক ইউনিফায়েড ভিউতে স্ট্রাকচার করে, যা আগের যেকোনও মোড এবং বার্স্ট মোডের মতো আরও বেশ কয়েকটি মোড প্রয়োগ করতে ব্যবহার করা যেতে পারে। এর ফলে ফোকাস ও এক্সপোজারের ক্ষেত্রে ব্যবহারকারী আরও ভালো কন্ট্রোল পান এবং নয়েজ কমানো, কনট্রাস্ট ও শার্পেনিংয়ের মতো আরও বেশি পোস্ট-প্রসেসিং করা যায়। এছাড়াও, এই সরলীকৃত ভিউ অ্যাপ্লিকেশন ডেভেলপারদের জন্য ক্যামেরার বিভিন্ন ফাংশন ব্যবহার করা সহজ করে তোলে।
API, ক্যামেরা সাবসিস্টেমকে একটি পাইপলাইন হিসেবে মডেল করে যা ফ্রেম ক্যাপচার করার জন্য আসা অনুরোধকে ১:১ ভিত্তিতে ফ্রেমে কনভার্ট করে। অনুরোধে ফ্রেম ক্যাপচার ও প্রসেস করার ব্যাপারে সব কনফিগারেশন তথ্য থাকে। এর মধ্যে রেজোলিউশন ও পিক্সেল ফর্ম্যাট; ম্যানুয়াল সেন্সর, লেন্স ও ফ্ল্যাশ কন্ট্রোল; 3A অপারেটিং মোড; RAW->YUV প্রসেসিং কন্ট্রোল; পরিসংখ্যান তৈরি; এবং আরও অনেক কিছু অন্তর্ভুক্ত।
সহজ ভাষায় বলতে গেলে, অ্যাপ্লিকেশন ফ্রেমওয়ার্ক ক্যামেরা সাবসিস্টেমের কাছে ফ্রেমের অনুরোধ করে এবং ক্যামেরা সাবসিস্টেম আউটপুট স্ট্রিমে ফলাফল রিটার্ন করে। এছাড়াও, প্রতিটি ফলাফলের সেটের জন্য মেটাডেটা তৈরি করা হয় যাতে কালার স্পেস ও লেন্স শেডিংয়ের মতো তথ্য থাকে। আপনি ক্যামেরা ভার্সন ৩-কে ক্যামেরা ভার্সন ১-এর ওয়ান-ওয়ে স্ট্রিমের পাইপলাইন হিসেবে ভাবতে পারেন। এটি প্রতিটি ক্যাপচার অনুরোধকে সেন্সর দ্বারা ক্যাপচার করা একটি ছবিতে কনভার্ট করে, যা এগুলিতে প্রসেস করা হয়:
- ক্যাপচার সম্পর্কে মেটাডেটা সহ একটি ফলাফল অবজেক্ট।
- ছবি ডেটার এক থেকে একাধিক বাফার, প্রত্যেকটি নিজস্ব ডেস্টিনেশন সারফেসে।
সম্ভাব্য আউটপুট সারফেসের সেট আগে থেকেই কনফিগার করা থাকে:
- প্রতিটি সারফেস হল নির্দিষ্ট রেজোলিউশনের ইমেজ বাফারের স্ট্রিমের ডেস্টিনেশন।
- একসাথে খুব কম সংখ্যক সারফেস আউটপুট হিসেবে কনফিগার করা যায় (~৩)।
একটি অনুরোধে সমস্ত কাঙ্ক্ষিত ক্যাপচার সেটিংস এবং এই অনুরোধের জন্য ইমেজ বাফার পুশ করার জন্য আউটপুট সারফেসের তালিকা থাকে (মোট কনফিগার করা সেট থেকে)। অনুরোধ একবার করা যেতে পারে (capture() সহ) অথবা এটি
অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করা যেতে পারে (setRepeatingRequest() সহ)। ক্যাপচার
পুনরাবৃত্তির অনুরোধের চেয়ে বেশি অগ্রাধিকার পায়।
ছবি ১. ক্যামেরার মূল অপারেশন মডেল
ক্যামেরা HAL1 ওভারভিউ
ক্যামেরা সাবসিস্টেমের ভার্সন ১ হাই-লেভেল কন্ট্রোল সহ ব্ল্যাক বক্স হিসেবে ডিজাইন করা হয়েছে এবং এতে নিম্নলিখিত তিনটি অপারেটিং মোড আছে:
- প্রিভিউ
- ভিডিও রেকর্ড
- স্টিল ক্যাপচার
প্রতিটি মোডের ক্ষমতা কিছুটা আলাদা এবং ওভারল্যাপ করে। এর ফলে বার্স্ট মোডের মতো নতুন ফিচার প্রয়োগ করা কঠিন হয়ে পড়েছিল, কারণ এটি দুটি অপারেটিং মোডের মাঝখানে পড়ে।
ছবি ২. ক্যামেরার কম্পোনেন্ট
Android 7.0 এখনও ক্যামেরা HAL1-এ কাজ করে কারণ অনেক ডিভাইস এখনও এটির উপর নির্ভর করে। এছাড়াও, Android ক্যামেরা পরিষেবা দুটি HAL (১ এবং ৩) প্রয়োগ করতে সাহায্য করে, যা আপনি যখন ক্যামেরা HAL1-এর সাথে কম-ক্ষমতাসম্পন্ন ফ্রন্ট-ফেসিং ক্যামেরা এবং ক্যামেরা HAL3-এর সাথে আরও উন্নত ব্যাক-ফেসিং ক্যামেরা ব্যবহার করতে চান তখন কাজে লাগে।
একটি ক্যামেরা HAL মডিউল (নিজস্ব ভার্সন নম্বর সহ) আছে, যা একাধিক স্বতন্ত্র ক্যামেরা ডিভাইসের তালিকা দেখায়, যার প্রতিটির নিজস্ব ভার্সন নম্বর আছে। ২ বা তার পরের যেকোনও ডিভাইসকে সাপোর্ট করার জন্য ক্যামেরা মডিউল ২ বা তার পরের যেকোনও ভার্সন প্রয়োজন এবং এই ধরনের ক্যামেরা মডিউলে ক্যামেরা ডিভাইসের বিভিন্ন ভার্সন থাকতে পারে (এর অর্থ হল Android, দুটি HAL-এরই প্রয়োগকে সাপোর্ট করে)।