সেশন প্যারামিটার ফিচারটি ক্যাপচার সেশন ইনিশিয়ালাইজেশন ফেজের অংশ হিসেবে, ক্যামেরা ক্লায়েন্টদের সক্রিয়ভাবে ব্যয়বহুল অনুরোধ প্যারামিটারের সাবসেট, অর্থাৎ সেশন প্যারামিটার কনফিগার করার সুবিধা দিয়ে বিলম্ব কমায়। এই ফিচারের সাহায্যে, আপনার HAL ইমপ্লিমেন্টেশন প্রথম ক্যাপচার অনুরোধের পরিবর্তে স্ট্রিম কনফিগারেশন ফেজে ক্লায়েন্ট প্যারামিটার পায় এবং সেগুলির ভ্যালুর উপর নির্ভর করে, ইন্টার্নাল পাইপলাইন আরও দক্ষতার সাথে প্রস্তুত ও বিল্ড করতে পারে।
Android 10-এ, আপনি ইন্টার্নাল সেশন প্যারামিটার রিকনফিগারেশন লজিকের উপর আরও বেশি কন্ট্রোল পেতে, ঐচ্ছিক সেশন রিকনফিগারেশন কোয়েরি ফিচার ব্যবহার করে পারফর্ম্যান্স উন্নত করতে পারবেন। আরও তথ্যের জন্য, সেশন রিকনফিগারেশন কোয়েরি দেখুন।
উদাহরণ ও সোর্স
রেফারেন্স সেশন প্যারামিটার প্রয়োগ করা ইতিমধ্যেই CameraHal-এর অংশ। এই HAL পুরনো Hal API ব্যবহার করে। ক্যামেরা HIDL API প্রয়োগ করে এমন বাইন্ডারাইজড CameraHal-কে স্ট্রিম কনফিগারেশনের সময় কোনও নতুন ইনকামিং সেশন প্যারামিটার অ্যাক্সেস করতে সংশ্লিষ্ট HIDL sessionParams এন্ট্রি ব্যবহার করতে হবে।
ক্যামেরা ক্লায়েন্ট
getAvailableSessionKeys()
কল করে সব কাজ করে এমন সেশন প্যারামিটারের কী কোয়েরি করতে পারে
এবং অবশেষে
setSessionParameters()-এর মাধ্যমে তাদের প্রাথমিক ভ্যালু সেট করতে পারে।
প্রয়োগ
আপনার CameraHal ইমপ্লিমেন্টেশনকে অবশ্যই সংশ্লিষ্ট স্ট্যাটিক ক্যামেরা মেটাডেটার মধ্যে
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
পপুলেট করতে হবে এবং
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS-এর একটি সাবসেট প্রদান করতে হবে,
যার মধ্যে এমন কীগুলির একটি তালিকা রয়েছে যা ফ্রেম প্রতি প্রয়োগ করা কঠিন এবং ক্যাপচার সেশনের লাইফটাইম চলাকালীন পরিবর্তন করা হলে
অপ্রত্যাশিত বিলম্বের কারণ হতে পারে।
সাধারণ উদাহরণের মধ্যে এমন প্যারামিটার অন্তর্ভুক্ত থাকে যেগুলির জন্য সময়সাপেক্ষ হার্ডওয়্যার পুনরায় কনফিগার করা বা ইন্টার্নাল ক্যামেরা পাইপলাইন পরিবর্তন করার প্রয়োজন হয়। ক্যাপচার অনুরোধে সেশন প্যারামিটারের উপর এখনও নিয়ন্ত্রণ প্রয়োগ করা যেতে পারে, তবে ক্লায়েন্টদের এ ব্যাপারে সচেতন থাকতে হবে এবং তাদের অ্যাপে বিলম্ব হতে পারে।
ফ্রেমওয়ার্কটি সব ইনকামিং অনুরোধ মনিটর করে এবং সেশন প্যারামিটারের ভ্যালুতে কোনও পরিবর্তন শনাক্ত করলে, এটি ইন্টার্নালি ক্যামেরা আবার কনফিগার করে। CameraHal-এ পাস করা নতুন স্ট্রিম কনফিগারেশনে আপডেট করা সেশন প্যারামিটার ভ্যালু অন্তর্ভুক্ত থাকে, যা ক্যামেরা পাইপলাইনকে আরও দক্ষতার সাথে কনফিগার করতে ব্যবহার করা হয়।
কাস্টমাইজেশন
আপনি উপলভ্য সেশন প্যারামিটার তালিকায় ট্যাগ নির্ধারণ করতে পারবেন যা CameraHal-এর দিকে পপুলেট করা হয়। CameraHal, উপলভ্য সেশন প্যারামিটার তালিকা খালি রাখলে এই ফিচার অ্যাক্টিভ থাকে না।
যাচাইকরণ
CTS-এ সেশন প্যারামিটার পরীক্ষা করার জন্য নিম্নলিখিত নতুন কেস অন্তর্ভুক্ত রয়েছে:
CameraDeviceTest#testSessionConfigurationCameraDeviceTest#testCreateSessionWithParametersCameraDeviceTest#testSessionParametersStateLeakNativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
সাধারণত, সেশন কী তালিকার অংশ হিসেবে কোনও নির্দিষ্ট প্যারামিটার যোগ করার পরে, HAL লেয়ারে স্ট্রিম কনফিগারেশনের সময় পাস করা সেশন প্যারামিটারের অংশ হিসেবে এটির বর্তমান ভ্যালু যোগ করা হয়।
সেশন প্যারামিটার খুব সাবধানে বেছে নিতে হবে। স্ট্রিম কনফিগারেশনের মধ্যে, যদি কখনও পরিবর্তন হয়, তাহলে ভ্যালুগুলি ঘন ঘন পরিবর্তন করা উচিত নয়। যেসব প্যারামিটার ঘন ঘন পরিবর্তিত হয়, যেমন ক্যাপচার ইনটেন্ট, সেগুলি উপযুক্ত নয় এবং সেগুলিকে সেশন প্যারামিটার তালিকায় যোগ করলে, অতিরিক্ত ইন্টার্নাল পুনরায় কনফিগারেশনের কারণে CTS ব্যর্থ হতে পারে।
সেশন রিকনফিগারেশন কোয়েরি
Android 10-এ ঐচ্ছিক সেশন
রিকনফিগারেশন কোয়েরি ফিচার যোগ করা হয়েছে। এর ফলে পারফর্ম্যান্স
উন্নত হয়, কারণ সেশন
প্যারামিটার ভ্যালু পরিবর্তনের ফলে ইন্টার্নাল স্ট্রিম রিকনফিগারেশন পারফর্ম্যান্স কমিয়ে দিতে পারে। এই সমস্যার সমাধান করতে,
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 রিটার্ন করে। এর ফলে ডিফল্ট ক্যামেরা পরিষেবা
আচরণ হয় যেখানে প্রতিটি সেশন প্যারামিটার
পরিবর্তনের সময় স্ট্রিম আবার কনফিগার করা হয়।
যাচাইকরণ
সেশন রিকনফিগারেশন কোয়েরি ফিচারটি VTS টেস্ট
কেস ব্যবহার করে
CameraHidlTest#configureStreamsWithSessionParameters-এ যাচাই করা যেতে পারে।