অ্যান্ড্রয়েডের ক্যামেরা হার্ডওয়্যার অ্যাবস্ট্রাকশন লেয়ার (HAL) android.hardware.camera2- এ থাকা উচ্চ-স্তরের ক্যামেরা ফ্রেমওয়ার্ক API-গুলোকে আপনার অন্তর্নিহিত ক্যামেরা ড্রাইভার এবং হার্ডওয়্যারের সাথে সংযুক্ত করে। অ্যান্ড্রয়েড ১৩ থেকে, ক্যামেরা HAL ইন্টারফেস ডেভেলপমেন্টে AIDL ব্যবহৃত হয়। অ্যান্ড্রয়েড ৮.০-তে Treble চালু হওয়ার পর, ক্যামেরা HAL API-কে HAL ইন্টারফেস ডেসক্রিপশন ল্যাঙ্গুয়েজ (HIDL) দ্বারা সংজ্ঞায়িত একটি স্থিতিশীল ইন্টারফেসে পরিবর্তন করা হয়। আপনি যদি আগে অ্যান্ড্রয়েড ৭.০ বা তার নিচের সংস্করণের জন্য ক্যামেরা HAL মডিউল এবং ড্রাইভার তৈরি করে থাকেন, তবে ক্যামেরা পাইপলাইনের উল্লেখযোগ্য পরিবর্তনগুলো সম্পর্কে সচেতন থাকুন।
AIDL ক্যামেরা HAL
অ্যান্ড্রয়েড ১৩ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলির জন্য, ক্যামেরা ফ্রেমওয়ার্কে AIDL ক্যামেরা HAL-এর সমর্থন অন্তর্ভুক্ত রয়েছে। ক্যামেরা ফ্রেমওয়ার্কটি HIDL ক্যামেরা HAL-কেও সমর্থন করে, তবে অ্যান্ড্রয়েড ১৩ বা তার উচ্চতর সংস্করণে যুক্ত হওয়া ক্যামেরার বৈশিষ্ট্যগুলি শুধুমাত্র AIDL ক্যামেরা HAL ইন্টারফেসের মাধ্যমেই পাওয়া যায়। অ্যান্ড্রয়েড ১৩ বা তার উচ্চতর সংস্করণে আপগ্রেড করা ডিভাইসগুলিতে এই ধরনের বৈশিষ্ট্যগুলি বাস্তবায়ন করতে, ডিভাইস নির্মাতাদের অবশ্যই তাদের HAL প্রক্রিয়াটিকে HIDL ক্যামেরা ইন্টারফেস ব্যবহার থেকে AIDL ক্যামেরা ইন্টারফেসে স্থানান্তরিত করতে হবে।
AIDL-এর সুবিধাগুলো সম্পর্কে জানতে, AIDL for HALs দেখুন।
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-এ স্থানান্তরিত হতে চলা ডিভাইসগুলোর ক্ষেত্রে, কোড কাঠামোর ওপর নির্ভর করে ডিভাইস প্রস্তুতকারকদের অ্যান্ড্রয়েড SELinux পলিসি (sepolicy) এবং RC ফাইলগুলো পরিবর্তন করার প্রয়োজন হতে পারে।
AIDL ক্যামেরা HAL যাচাই করুন
আপনার AIDL ক্যামেরা HAL ইমপ্লিমেন্টেশন পরীক্ষা করার জন্য, নিশ্চিত করুন যে ডিভাইসটি সমস্ত CTS এবং VTS পরীক্ষায় উত্তীর্ণ হয়েছে। Android 13-এ AIDL VTS পরীক্ষা, VtsAidlHalCameraProvider_TargetTest.cpp , চালু করা হয়েছে।
ক্যামেরা HAL3 বৈশিষ্ট্য
অ্যান্ড্রয়েড ক্যামেরা এপিআই-এর নতুন ডিজাইনের উদ্দেশ্য হলো, এপিআই-কে আরও কার্যকর ও রক্ষণাবেক্ষণযোগ্য করে তোলার জন্য এর পুনর্গঠনের মাধ্যমে অ্যান্ড্রয়েড ডিভাইসের ক্যামেরা সাবসিস্টেমকে নিয়ন্ত্রণ করার ক্ষমতা উল্লেখযোগ্যভাবে বৃদ্ধি করা। এই অতিরিক্ত নিয়ন্ত্রণের ফলে অ্যান্ড্রয়েড ডিভাইসে উচ্চ-মানের ক্যামেরা অ্যাপ তৈরি করা সহজ হয়, যা একাধিক ডিভাইসে নির্ভরযোগ্যভাবে কাজ করতে পারে এবং একই সাথে গুণমান ও কর্মক্ষমতা সর্বোচ্চ করার জন্য যথাসম্ভব ডিভাইস-নির্দিষ্ট অ্যালগরিদম ব্যবহার করে।
ক্যামেরা সাবসিস্টেমের সংস্করণ ৩ অপারেশন মোডগুলোকে একটি একক সমন্বিত ভিউতে সাজিয়েছে, যা ব্যবহার করে পূর্ববর্তী যেকোনো মোড এবং বার্স্ট মোডের মতো আরও কয়েকটি মোড প্রয়োগ করা যায়। এর ফলে ফোকাস ও এক্সপোজারের ওপর ব্যবহারকারীর নিয়ন্ত্রণ বাড়ে এবং নয়েজ রিডাকশন, কনট্রাস্ট ও শার্পেনিং-এর মতো আরও বেশি পোস্ট-প্রসেসিং করা যায়। এছাড়াও, এই সরলীকৃত ভিউ অ্যাপ্লিকেশন ডেভেলপারদের জন্য ক্যামেরার বিভিন্ন ফাংশন ব্যবহার করা আরও সহজ করে তোলে।
এপিআইটি ক্যামেরা সাবসিস্টেমকে একটি পাইপলাইন হিসেবে মডেল করে, যা ফ্রেম ক্যাপচারের জন্য আগত অনুরোধগুলোকে ১:১ অনুপাতে ফ্রেমে রূপান্তরিত করে। এই অনুরোধগুলোতে একটি ফ্রেমের ক্যাপচার এবং প্রসেসিং সম্পর্কিত সমস্ত কনফিগারেশন তথ্য অন্তর্ভুক্ত থাকে। এর মধ্যে রয়েছে রেজোলিউশন এবং পিক্সেল ফরম্যাট; ম্যানুয়াল সেন্সর, লেন্স এবং ফ্ল্যাশ নিয়ন্ত্রণ; ৩এ অপারেটিং মোড; RAW->YUV প্রসেসিং নিয়ন্ত্রণ; পরিসংখ্যান তৈরি; ইত্যাদি।
সহজ কথায়, অ্যাপ্লিকেশন ফ্রেমওয়ার্ক ক্যামেরা সাবসিস্টেমের কাছে একটি ফ্রেমের জন্য অনুরোধ করে এবং ক্যামেরা সাবসিস্টেম একটি আউটপুট স্ট্রিমে ফলাফল ফেরত পাঠায়। এছাড়াও, প্রতিটি ফলাফলের সেটের জন্য মেটাডেটা তৈরি করা হয়, যাতে কালার স্পেস এবং লেন্স শেডিং-এর মতো তথ্য থাকে। আপনি ক্যামেরা ভার্সন ৩-কে ক্যামেরা ভার্সন ১-এর একমুখী স্ট্রিমে যাওয়ার একটি পাইপলাইন হিসেবে ভাবতে পারেন। এটি প্রতিটি ক্যাপচার অনুরোধকে সেন্সর দ্বারা ধারণ করা একটি ছবিতে রূপান্তরিত করে, যা প্রক্রিয়াজাত হয়ে নিম্নলিখিত রূপ নেয়:
- ক্যাপচার সম্পর্কিত মেটাডেটা সহ একটি ফলাফল অবজেক্ট।
- এক থেকে N সংখ্যক ইমেজ ডেটা বাফার, যার প্রতিটি তার নিজস্ব গন্তব্য পৃষ্ঠে জমা হয়।
সম্ভাব্য আউটপুট পৃষ্ঠতলগুলির সেট পূর্ব-কনফিগার করা থাকে:
- প্রতিটি পৃষ্ঠতল একটি নির্দিষ্ট রেজোলিউশনের ইমেজ বাফার প্রবাহের গন্তব্যস্থল।
- একসাথে অল্প সংখ্যক পৃষ্ঠতলকেই (~৩টি) আউটপুট হিসেবে কনফিগার করা যায়।
একটি অনুরোধে সমস্ত কাঙ্ক্ষিত ক্যাপচার সেটিংস এবং এই অনুরোধের জন্য ইমেজ বাফার পাঠানোর জন্য আউটপুট সারফেসের তালিকা (মোট কনফিগার করা সেটের মধ্য থেকে) থাকে। একটি অনুরোধ একবারের জন্য হতে পারে ( capture() মাধ্যমে), অথবা এটি অনির্দিষ্টকালের জন্য পুনরাবৃত্তি করা যেতে পারে ( setRepeatingRequest() মাধ্যমে)। পুনরাবৃত্তিমূলক অনুরোধের চেয়ে ক্যাপচারের অগ্রাধিকার বেশি।

চিত্র ১. ক্যামেরা কোরের কার্যপ্রণালী মডেল
ক্যামেরা HAL1 এর সংক্ষিপ্ত বিবরণ
ক্যামেরা সাবসিস্টেমের ভার্সন ১-কে উচ্চ-স্তরের নিয়ন্ত্রণ এবং নিম্নলিখিত তিনটি অপারেটিং মোড সহ একটি ব্ল্যাক বক্স হিসাবে ডিজাইন করা হয়েছিল:
- প্রিভিউ
- ভিডিও রেকর্ড
- স্থিরচিত্র
প্রতিটি মোডের ক্ষমতা কিছুটা ভিন্ন এবং কিছু ক্ষেত্রে একে অপরের সাথে মিলে যায়। এর ফলে বার্স্ট মোডের মতো নতুন ফিচারগুলো বাস্তবায়ন করা কঠিন হয়ে পড়েছিল, যা দুটি অপারেটিং মোডের মাঝামাঝি অবস্থানে রয়েছে।

চিত্র ২. ক্যামেরার উপাদানসমূহ
অ্যান্ড্রয়েড ৭.০ ক্যামেরা HAL1-কে সমর্থন করা অব্যাহত রেখেছে, কারণ অনেক ডিভাইস এখনও এর উপর নির্ভর করে। এছাড়াও, অ্যান্ড্রয়েড ক্যামেরা সার্ভিস উভয় HAL (১ এবং ৩) বাস্তবায়ন সমর্থন করে, যা তখন কাজে আসে যখন আপনি ক্যামেরা HAL1 দিয়ে একটি কম ক্ষমতাসম্পন্ন ফ্রন্ট-ফেসিং ক্যামেরা এবং ক্যামেরা HAL3 দিয়ে একটি আরও উন্নত ব্যাক-ফেসিং ক্যামেরা সমর্থন করতে চান।
একটিমাত্র ক্যামেরা HAL মডিউল (যার নিজস্ব ভার্সন নম্বর আছে) রয়েছে, যা একাধিক স্বাধীন ক্যামেরা ডিভাইসের তালিকা করে, এবং প্রতিটি ডিভাইসের নিজস্ব ভার্সন নম্বর থাকে। ডিভাইস ২ বা তার পরবর্তী সংস্করণ সমর্থন করার জন্য ক্যামেরা মডিউল ২ বা তার পরবর্তী সংস্করণ প্রয়োজন, এবং এই ধরনের ক্যামেরা মডিউলগুলোতে বিভিন্ন ভার্সনের ক্যামেরা ডিভাইসের মিশ্রণ থাকতে পারে (অ্যান্ড্রয়েড উভয় HAL বাস্তবায়ন সমর্থন করে বলতে আমরা এটাই বোঝাই)।