সেশন প্যারামিটার ফিচারটি ক্যামেরা ক্লায়েন্টদের ক্যাপচার সেশন ইনিশিয়ালাইজেশন পর্বের অংশ হিসেবে ব্যয়বহুল রিকোয়েস্ট প্যারামিটারগুলোর একটি উপসেট, অর্থাৎ সেশন প্যারামিটারগুলো, সক্রিয়ভাবে কনফিগার করার সুযোগ দিয়ে বিলম্ব কমায়। এই ফিচারের মাধ্যমে, আপনার HAL ইমপ্লিমেন্টেশনগুলো প্রথম ক্যাপচার রিকোয়েস্টের পরিবর্তে স্ট্রিম কনফিগারেশন পর্বেই ক্লায়েন্ট প্যারামিটারগুলো গ্রহণ করে এবং সেগুলোর মানের ওপর নির্ভর করে আরও দক্ষতার সাথে অভ্যন্তরীণ পাইপলাইন প্রস্তুত ও তৈরি করতে পারে।
অ্যান্ড্রয়েড ১০-এ, অভ্যন্তরীণ সেশন প্যারামিটার পুনর্বিন্যাস লজিকের উপর আরও বেশি নিয়ন্ত্রণের জন্য আপনি ঐচ্ছিক 'সেশন পুনর্বিন্যাস কোয়েরি' ফিচারটি ব্যবহার করে পারফরম্যান্স উন্নত করতে পারেন। আরও তথ্যের জন্য, 'সেশন পুনর্বিন্যাস কোয়েরি' দেখুন।
উদাহরণ এবং উৎস
একটি রেফারেন্স সেশন প্যারামিটার ইমপ্লিমেন্টেশন ইতিমধ্যেই CameraHal- এর একটি অংশ। এই HAL লিগ্যাসি Hal API ব্যবহার করে। যে বাইন্ডারাইজড CameraHal ক্যামেরা HIDL API ইমপ্লিমেন্ট করে, স্ট্রিম কনফিগারেশনের সময় যেকোনো নতুন আগত সেশন প্যারামিটার অ্যাক্সেস করার জন্য তাকে অবশ্যই সংশ্লিষ্ট HIDL sessionParams এন্ট্রি ব্যবহার করতে হবে।
ক্যামেরা ক্লায়েন্টরা getAvailableSessionKeys() কল করে সমস্ত সমর্থিত সেশন প্যারামিটারের কী-গুলো জানতে পারে এবং অবশেষে setSessionParameters() এর মাধ্যমে তাদের প্রাথমিক মান সেট করতে পারে।
বাস্তবায়ন
আপনার CameraHal ইমপ্লিমেন্টেশনকে অবশ্যই সংশ্লিষ্ট স্ট্যাটিক ক্যামেরা মেটাডেটার মধ্যে ANDROID_REQUEST_AVAILABLE_SESSION_KEYS পূরণ করতে হবে এবং ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS এর একটি উপসেট প্রদান করতে হবে, যেটিতে এমন সব কী-এর তালিকা রয়েছে যা প্রতি-ফ্রেমে প্রয়োগ করা কঠিন এবং ক্যাপচার সেশন চলাকালীন পরিবর্তন করা হলে অপ্রত্যাশিত বিলম্ব ঘটাতে পারে।
সাধারণ উদাহরণগুলির মধ্যে এমন প্যারামিটার অন্তর্ভুক্ত রয়েছে যার জন্য সময়সাপেক্ষ হার্ডওয়্যার পুনর্গঠন বা অভ্যন্তরীণ ক্যামেরা পাইপলাইন পরিবর্তনের প্রয়োজন হয়। ক্যাপচার অনুরোধের মাধ্যমে সেশন প্যারামিটারগুলির উপর নিয়ন্ত্রণ রাখা সম্ভব, তবে ক্লায়েন্টদের তাদের অ্যাপে বিলম্ব সম্পর্কে সচেতন থাকতে হবে এবং এর জন্য প্রস্তুত থাকতে হবে।
ফ্রেমওয়ার্কটি সমস্ত আগত অনুরোধ পর্যবেক্ষণ করে এবং কোনো সেশন প্যারামিটারের মানে পরিবর্তন শনাক্ত করলে, এটি অভ্যন্তরীণভাবে ক্যামেরাটি পুনরায় কনফিগার করে। এরপর CameraHal-এ পাঠানো নতুন স্ট্রিম কনফিগারেশনে আপডেট করা সেশন প্যারামিটারের মানগুলো অন্তর্ভুক্ত থাকে, যা ক্যামেরা পাইপলাইনকে আরও দক্ষতার সাথে কনফিগার করতে ব্যবহৃত হয়।
কাস্টমাইজেশন
আপনি CameraHal-এর পক্ষ থেকে পূরণ করা উপলব্ধ সেশন প্যারামিটার তালিকায় ট্যাগ নির্ধারণ করতে পারেন। CameraHal যদি উপলব্ধ সেশন প্যারামিটার তালিকাটি খালি রাখে, তাহলে এই বৈশিষ্ট্যটি সক্রিয় থাকে না।
বৈধতা
সেশন প্যারামিটার পরীক্ষা করার জন্য CTS-এ নিম্নলিখিত নতুন কেসগুলো অন্তর্ভুক্ত করা হয়েছে:
-
CameraDeviceTest#testSessionConfiguration -
CameraDeviceTest#testCreateSessionWithParameters -
CameraDeviceTest#testSessionParametersStateLeak -
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
সাধারণত, কোনো নির্দিষ্ট প্যারামিটার সেশন কী লিস্টের অংশ হয়ে গেলে, HAL লেয়ারে স্ট্রিম কনফিগারেশনের সময় পাস করা সেশন প্যারামিটারগুলোর অংশ হিসেবে এর বর্তমান মানটিও অন্তর্ভুক্ত করা হয়।
সেশন প্যারামিটারগুলো অবশ্যই সতর্কতার সাথে নির্বাচন করতে হবে। স্ট্রিম কনফিগারেশনের মধ্যে এর মানগুলো ঘন ঘন পরিবর্তন হওয়া উচিত নয়, বা আদৌ হওয়া উচিত নয়। যে প্যারামিটারগুলো ঘন ঘন পরিবর্তিত হয়, যেমন ক্যাপচার ইনটেন্ট, সেগুলো অনুপযুক্ত এবং সেশন প্যারামিটার তালিকায় এগুলো যোগ করলে অতিরিক্ত অভ্যন্তরীণ পুনঃকনফিগারেশনের কারণে CTS ব্যর্থ হতে পারে।
সেশন পুনর্গঠন কোয়েরি
অ্যান্ড্রয়েড ১০ একটি ঐচ্ছিক সেশন রিকনফিগারেশন কোয়েরি ফিচার চালু করেছে, যা পারফরম্যান্স উন্নত করে। কারণ সেশন প্যারামিটার ভ্যালু পরিবর্তনের ফলে সৃষ্ট অভ্যন্তরীণ স্ট্রিম রিকনফিগারেশন পারফরম্যান্স কমিয়ে দিতে পারে। এই সমস্যাটির সমাধান করতে, HIDL ICameraDeviceSession ভার্সন ৩.৫ এবং তার পরবর্তী সংস্করণগুলোতে isReconfigurationRequired মেথডটি সাপোর্ট করে, যা অভ্যন্তরীণ সেশন প্যারামিটার রিকনফিগারেশন লজিকের উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। এই মেথডটি ব্যবহার করে, স্ট্রিম রিকনফিগারেশন ঠিক যখন প্রয়োজন তখনই সম্পন্ন করা যায়।
isReconfigurationRequired এর আর্গুমেন্টগুলো প্রতিটি অপেক্ষাধীন সেশন প্যারামিটার পরিবর্তন সম্পর্কে প্রয়োজনীয় তথ্য প্রদান করে, যা বিভিন্ন ধরনের ডিভাইস-নির্দিষ্ট কাস্টমাইজেশনের সুযোগ করে দেয়।
এই ফিচারটি শুধুমাত্র ক্যামেরা সার্ভিস এবং ক্যামেরা HAL-এ প্রয়োগ করা হয়েছে। এর কোনো পাবলিক API নেই। এই ফিচারটি প্রয়োগ করা হলে, সেশন প্যারামিটার নিয়ে কাজ করার সময় ক্যামেরা ক্লায়েন্টরা পারফরম্যান্সের উন্নতি দেখতে পাবে।
বাস্তবায়ন
সেশন পুনর্গঠন কোয়েরি সমর্থন করার জন্য, নতুন সেশন প্যারামিটার মানগুলির জন্য সম্পূর্ণ স্ট্রিম পুনর্গঠন প্রয়োজন কিনা তা পরীক্ষা করতে আপনাকে অবশ্যই isReconfigurationRequired পদ্ধতিটি প্রয়োগ করতে হবে।
যদি ক্লায়েন্ট কোনো বিজ্ঞাপিত সেশন প্যারামিটারের মান পরিবর্তন করে, তাহলে ক্যামেরা ফ্রেমওয়ার্ক isReconfigurationRequired মেথডটিকে কল করে। নির্দিষ্ট মানগুলোর উপর নির্ভর করে, HAL সিদ্ধান্ত নেয় যে একটি সম্পূর্ণ স্ট্রিম পুনঃকনফিগারেশন প্রয়োজন কিনা। যদি HAL ' false রিটার্ন করে, তাহলে ক্যামেরা ফ্রেমওয়ার্ক অভ্যন্তরীণ পুনঃকনফিগারেশনটি এড়িয়ে যায়। যদি HAL ' true রিটার্ন করে, তাহলে ফ্রেমওয়ার্ক স্ট্রিমগুলোকে পুনঃকনফিগার করে এবং সেই অনুযায়ী নতুন সেশন প্যারামিটারের মানগুলো পাস করে।
নতুন প্যারামিটারসহ কোনো অনুরোধ HAL-এ জমা দেওয়ার কিছু সময় আগে ফ্রেমওয়ার্ক isReconfigurationRequired মেথডটিকে কল করতে পারে, এবং অনুরোধটি জমা দেওয়ার আগেও বাতিল করা যেতে পারে। অতএব, HAL-এর আচরণ কোনোভাবেই পরিবর্তন করার জন্য এই মেথড কলটি ব্যবহার করা উচিত নয়।
HAL বাস্তবায়নকে অবশ্যই নিম্নলিখিত শর্তগুলো পূরণ করতে হবে:
- সক্রিয় সেশন কনফিগারেশনের পরে যেকোনো সময়ে ফ্রেমওয়ার্কটিকে অবশ্যই
isReconfigurationRequiredমেথডটি কল করতে সক্ষম হতে হবে। - অপেক্ষাধীন ক্যামেরা অনুরোধগুলোর কার্যকারিতার উপর কোনো প্রভাব পড়া যাবে না। বিশেষ করে, স্বাভাবিক ক্যামেরা স্ট্রিমিং চলাকালীন কোনো ত্রুটি বা বিলম্ব হওয়া চলবে না।
ডিভাইস এবং HAL বাস্তবায়নকে অবশ্যই নিম্নলিখিত কর্মক্ষমতার প্রয়োজনীয়তাগুলো পূরণ করতে হবে:
- হার্ডওয়্যার ও সফটওয়্যার ক্যামেরা সেটিংস পরিবর্তন করা যাবে না।
- ক্যামেরার পারফরম্যান্সে ব্যবহারকারীর চোখে পড়ার মতো কোনো প্রভাব থাকা চলবে না।
isReconfigurationRequired মেথডটি নিম্নলিখিত আর্গুমেন্টগুলো গ্রহণ করে:
-
oldSessionParams: পূর্ববর্তী সেশনের সেশন প্যারামিটারসমূহ। সাধারণত বিদ্যমান সেশন প্যারামিটারগুলো। -
newSessionParams: ক্লায়েন্ট কর্তৃক নির্ধারিত নতুন সেশন প্যারামিটারসমূহ।
প্রত্যাশিত রিটার্ন স্ট্যাটাস কোডগুলো হলো:
-
OK: প্রয়োজনীয় কোয়েরিটির সফল পুনর্গঠন করা হয়েছে। -
METHOD_NOT_SUPPORTED: ক্যামেরা ডিভাইসটি পুনঃকনফিগারেশন কোয়েরি সমর্থন করে না। -
INTERNAL_ERROR: একটি অভ্যন্তরীণ ত্রুটির কারণে পুনর্গঠন কোয়েরিটি সম্পন্ন করা যাচ্ছে না।
ফেরত আসা মানগুলো হলো:
-
true: স্ট্রিম পুনর্গঠন প্রয়োজন। -
false: স্ট্রিম পুনর্গঠনের প্রয়োজন নেই।
একটি সেশন পুনর্গঠন কোয়েরি উপেক্ষা করতে, HAL METHOD_NOT_SUPPORTED বা false রিটার্ন করে। এর ফলে ক্যামেরা সার্ভিসের ডিফল্ট আচরণটি কার্যকর হয়, যেখানে প্রতিটি সেশন প্যারামিটার পরিবর্তনের সাথে সাথে স্ট্রিম পুনর্গঠন শুরু হয়।
বৈধতা
CameraHidlTest#configureStreamsWithSessionParameters -এ থাকা VTS টেস্ট কেসটি ব্যবহার করে সেশন পুনঃকনফিগারেশন কোয়েরি ফিচারটি যাচাই করা যেতে পারে।