Android-এ এমন ফিচার আছে যা ক্যামেরা ক্লায়েন্টকে নির্দিষ্ট ব্যবহারের ক্ষেত্রে অপ্টিমাল ক্যামেরা স্ট্রিম বেছে নিতে এবং নিশ্চিত করে যে নির্দিষ্ট স্ট্রিম কম্বিনেশন ক্যামেরা ডিভাইসে কাজ করে। স্ট্রিম কনফিগারেশন বলতে ক্যামেরা ডিভাইসে কনফিগার করা একটি ক্যামেরা স্ট্রিমকে বোঝায় এবং স্ট্রিম কম্বিনেশন বলতে ক্যামেরা ডিভাইসে কনফিগার করা এক বা একাধিক স্ট্রিমের সেটকে বোঝায়। এইসব ফিচার সম্পর্কে আরও জানতে, দেখুন সাজেস্ট করা স্ট্রিম কনফিগারেশন এবং ফিচার কম্বিনেশন কোয়েরি করার API।
রেফারেন্স প্রয়োগ করা
সাজেস্ট করা কনফিগারেশন স্ট্রিম এবং স্ট্রিম কম্বিনেশন ফিচার কোয়েরি করার API-এর ভেন্ডর-সাইড রেফারেন্স প্রয়োগ আছে। আপনি এই ইমপ্লিমেন্টেশনটি QCamera3HWI.cpp-এ খুঁজে পাবেন
সাজেস্ট করা স্ট্রিম কনফিগারেশন
ক্যামেরা ভেন্ডররা ক্যামেরা ক্লায়েন্টদের কাছে নির্দিষ্ট ব্যবহারের ক্ষেত্রে সাজেস্ট করা স্ট্রিম কনফিগারেশন বিজ্ঞাপন দিতে পারেন। এইসব সাজেস্ট করা স্ট্রিম কনফিগারেশন, যা StreamConfigurationMap-এর সাবসেট, ক্যামেরা ক্লায়েন্টকে সবচেয়ে ভালো কনফিগারেশন বেছে নিতে সাহায্য করতে পারে।
যদিও StreamConfigurationMap ক্যামেরা ক্লায়েন্টকে স্ট্রিম কনফিগারেশন সংক্রান্ত বিস্তারিত তথ্য দেয়, তবে এটি একটি স্ট্রিমের পরিবর্তে অন্য একটি স্ট্রিম বেছে নেওয়ার ফলে হওয়া দক্ষতা, পাওয়ার বা পারফর্ম্যান্সের প্রভাব সম্পর্কে কোনও তথ্য দেয় না। ক্যামেরা ক্লায়েন্টরা সম্ভাব্য সব স্ট্রিম কনফিগারেশন থেকে যেকোনও একটি বেছে নিতে পারে, কিন্তু অনেক ক্ষেত্রে এর ফলে ক্লায়েন্টরা সাব-অপ্টিমাল ক্যামেরা কনফিগারেশন ব্যবহার করে এবং অ্যাপগুলি সময়সাপেক্ষ বিস্তারিত সার্চ করে।
যেমন, যদিও কিছু প্রসেস করা YUV ফর্ম্যাট প্রয়োজন এবং সেগুলি কাজ করতে হবে, ক্যামেরা ডিভাইসে সেইসব ফর্ম্যাটের নেটিভ সাপোর্ট নাও থাকতে পারে। এর ফলে ফর্ম্যাট কনভার্সনের জন্য অতিরিক্ত প্রসেসিং পাস করতে হয় এবং দক্ষতা কমে যায়। সাইজ ও সংশ্লিষ্ট অ্যাস্পেক্ট রেশিও একই ধরনের প্রভাব ফেলতে পারে, যার ফলে পাওয়ার ও পারফর্ম্যান্সের ক্ষেত্রে নির্দিষ্ট ডাইমেনশন বেশি পছন্দসই হতে পারে।
আপনার সাজেস্ট করা স্ট্রিম কনফিগারেশন ম্যাপকে StreamConfigurationMap-এর তুলনায় খুব বিস্তারিত হতে হবে না। সাজেস্ট করা কনফিগারেশন ম্যাপকে অবশ্যই ইমপ্লিমেন্টেশন বিভাগে উল্লেখ করা প্রয়োজনীয়তা মেনে চলতে হবে এবং এর মধ্যে StreamConfigurationMap-এ উপলভ্য ফর্ম্যাট, সাইজ বা অন্যান্য ভ্যালু থাকতে পারে। StreamConfigurationMap-এ খুঁজে পাওয়া যায়নি এমন লুকানো ফর্ম্যাট, সাইজ বা অন্যান্য ভ্যালু সাজেস্ট করা স্ট্রিম কনফিগারেশন ম্যাপে অন্তর্ভুক্ত করা যাবে না।
সব পরীক্ষা অপরিবর্তিত থাকে এবং সাজেস্ট করা স্ট্রিম কনফিগারেশনের উপর নির্ভর করে শিথিল করা হয় না।
ক্যামেরা ইমপ্লিমেন্টেশন দ্বারা প্রদত্ত সাজেস্ট করা স্ট্রিম কনফিগারেশন ঐচ্ছিক এবং ক্যামেরা ক্লায়েন্ট সেগুলি উপেক্ষা করতে পারে।
প্রয়োগ
এই ফিচার প্রয়োগ করতে এইসব ধাপ অনুসরণ করুন।
মেটাডেটা এন্ট্রি
এই ফিচার চালু করতে, ক্যামেরা HAL-কে নিম্নলিখিত স্ট্যাটিক মেটাডেটা এন্ট্রি পপুলেট করতে হবে:
android.scaler.availableRecommendedStreamConfigurations: নির্দিষ্ট ব্যবহারিক প্রয়োগের জন্য সাজেস্ট করা স্ট্রিম কনফিগারেশনের সাবসেট।[1 << PREVIEW | 1 << RECORD..]-এর আকারে সাজেস্ট করা ব্যবহারের ক্ষেত্রগুলি নির্দেশ করে, এমন বিটম্যাপ ঘোষণা ব্যবহার করে। ব্যবহারের উদাহরণগুলি একটি অতিরিক্ত এন্ট্রি সহ সাধারণ (ফর্ম্যাট, প্রস্থ, উচ্চতা, ইনপুট) টিপলকে প্রসারিত করে। বিদ্যমান নয় এমন সর্বজনীন ব্যবহারিক ক্ষেত্র বা[PUBLIC_END, VENDOR_START]রেঞ্জের মধ্যে সেট করা অন্য কোনও বিট নিষিদ্ধ।এই তথ্য
availableRecommendedStreamConfigurationsমেটাডেটা ট্যাগে স্টোর করা হয়।নিচের উদাহরণে একটি ক্যামেরা ডিভাইসের জন্য সাজেস্ট করা স্ট্রিম কনফিগারেশনের একটি অ্যারে দেখানো হয়েছে, এটি শুধুমাত্র 4K ও 1080p সাপোর্ট করে। এখানে ভিডিও রেকর্ডিংয়ের জন্য দুটি রেজোলিউশনই পছন্দ করা হয়, কিন্তু প্রিভিউয়ের জন্য শুধুমাত্র 1080p সাজেস্ট করা হয়।
[3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT), 1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT, (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT | 1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]android.depth.availableRecommendedDepthStreamConfigurations(ডিভাইসে কাজ করলে তবেই উপলভ্য): এই ক্যামেরা ডিভাইসের জন্য সাজেস্ট করা ডেপথ ডেটাস্পেস স্ট্রিম কনফিগারেশন। উপরের মেটাডেটা এন্ট্রির মতো, অতিরিক্ত ব্যবহারের ক্ষেত্রে বিটম্যাপ, সাজেস্ট করা ব্যবহারের ক্ষেত্রে নির্দেশ করে।এই তথ্য
availableRecommendedInputOutputFormatsMapমেটাডেটা ট্যাগে স্টোর করা হয়।android.scaler.availableRecommendedInputOutputFormatsMap(শুধুমাত্র ডিভাইসে কাজ করলে উপলভ্য): ইনপুট স্ট্রিমের জন্য সাজেস্ট করা ছবি ফর্ম্যাটের ম্যাপিং, সেগুলির অনুরূপ আউটপুট ফর্ম্যাটে।এই তথ্য
availableRecommendedDepthStreamConfigurationsমেটাডেটা ট্যাগে স্টোর করা হয়।
এই তথ্য ক্যামেরা ক্লায়েন্টদের জন্য RecommendedStreamConfigurationMap API-এর মাধ্যমে উপলভ্য।
প্রয়োজনীয় ব্যবহারিক প্রয়োগ
নিম্নলিখিত ব্যবহারের ক্ষেত্রে সাজেস্ট করা স্ট্রিম কনফিগারেশন প্রদান করতে হবে এবং সংশ্লিষ্ট প্রয়োজনীয়তা পূরণ করতে হবে:
| ব্যবহারের ক্ষেত্র | প্রয়োজনীয়তা |
|---|---|
PREVIEW |
প্রিভিউতে অবশ্যই এমন প্রসেস করা স্ট্রিম কনফিগারেশন থাকতে হবে যা স্টল হয় না
এবং YUV_420_888 ও
IMPLEMENTATION_DEFINED-এর মতো আউটপুট ফর্ম্যাট থাকতে হবে। |
RECORD |
ভিডিও রেকর্ডে অবশ্যই স্ট্রিম কনফিগারেশন অন্তর্ভুক্ত থাকতে হবে যা বিজ্ঞাপিত
সমর্থিত মিডিয়া প্রোফাইল
IMPLEMENTATION_DEFINED ফর্ম্যাটের সাথে মেলে। |
VIDEO_SNAPSHOT |
ভিডিও স্ন্যাপশটে অবশ্যই এমন স্ট্রিম কনফিগারেশন থাকতে হবে যা সর্বাধিক RECORD রেজোলিউশনের সমান বা তার থেকে বড় এবং শুধুমাত্র BLOB + DATASPACE_JFIF ফর্ম্যাট/ডেটা স্পেস কম্বিনেশন (JPEG) সহ হতে হবে। কনফিগারেশনের কারণে প্রিভিউতে কোনও সমস্যা হওয়া উচিত নয় এবং এটি ৩০ fps-এ রান করতে পারা উচিত। |
SNAPSHOT |
স্ন্যাপশট স্ট্রিম কনফিগারেশনে অবশ্যই এমন অন্তত একটি থাকতে হবে যার সাইজ android.sensor.info.activeArraySize-এর কাছাকাছি
এবং BLOB +
DATASPACE_JFIF ফর্ম্যাট/ডেটা স্পেসের কম্বিনেশন (JPEG) আছে। অ্যাস্পেক্ট রেশিও, অ্যালাইনমেন্ট ও অন্যান্য ভেন্ডর-নির্দিষ্ট বিধিনিষেধের কথা মাথায় রেখে,
সর্বাধিক সাজেস্ট করা সাইজের ক্ষেত্রফল সেন্সর অ্যারে সাইজের ক্ষেত্রফলের ৯৭%-এর কম হওয়া উচিত নয়। |
ZSL (কাজ করলে) |
ক্যামেরা ডিভাইসে কাজ করলে, সাজেস্ট করা ইনপুট স্ট্রিম কনফিগারেশন শুধুমাত্র অন্যান্য প্রসেস করা বা স্টল করা আউটপুট ফর্ম্যাটের সাথে একসাথে বিজ্ঞাপন দিতে হবে। |
RAW (কাজ করলে) |
ক্যামেরা ডিভাইসে কাজ করলে, সাজেস্ট করা র স্ট্রিম কনফিগারেশনে শুধুমাত্র RAW ভিত্তিক আউটপুট ফর্ম্যাট থাকতে হবে। |
অন্যান্য ব্যবহারিক তথ্য
আপনার প্রয়োগের ক্ষেত্রে নির্দিষ্ট ব্যবহারের কেসের জন্য আপনি অতিরিক্ত সাজেস্ট করা কনফিগারেশন স্ট্রিম প্রদান করতে পারেন।
যাচাইকরণ
সাজেস্ট করা কনফিগারেশন স্ট্রিম প্রয়োগ করা হয়েছে কিনা তা পরীক্ষা করে দেখতে, নিম্নলিখিত CTS ও VTS পরীক্ষা চালান:
ফিচার কম্বিনেশন কোয়েরি করার জন্য API
Android 15 থেকে শুরু করে, Android প্ল্যাটফর্ম ফিচার কম্বিনেশন কোয়েরি করার জন্য একটি API প্রদান করে। এই API-এর মাধ্যমে ক্যামেরা ক্লায়েন্ট কোয়েরি করতে পারে যে ডিভাইসটি নির্দিষ্ট ফিচার কম্বিনেশন সাপোর্ট করতে পারবে কিনা। এই API-এর প্রয়োজন আছে, কারণ camera2 API মডেল 4k, 60fps, HDR ভিডিও, UltraHDR, আল্ট্রাওয়াইড জুম ও স্টেবিলাইজেশনের মতো বিভিন্ন ফিচারকে অর্থোগোনাল কন্ট্রোল হিসেবে ব্যবহার করে।
প্রয়োজনীয়তা
ফিচার কম্বিনেশন কোয়েরি করার জন্য API-কে সহায়তা করতে, ক্যামেরা HAL-কে ICameraDevice ইন্টারফেসের
ভার্সন ৩ প্রয়োগ করতে হবে। বিবরণের জন্য, প্রয়োগ করা বিভাগ দেখুন।
API কাজ করলে, প্রিভিউ স্টেবিলাইজেশনকে অন্যান্য ফিচারের সাথে
অর্থোগোনাল হতে হবে। এর অর্থ হল, প্রিভিউ স্টেবিলাইজেশন সাপোর্ট করে এমন ক্যামেরা ডিভাইসের ক্ষেত্রে,
নির্দিষ্ট কম্বিনেশনের জন্য isStreamCombinationWithSettingsSupported-এর রিটার্ন ভ্যালু, প্রিভিউ স্টেবিলাইজেশন
চালু বা বন্ধ থাকার সময় একই হতে হবে। এটি ফিচার কম্বিনেশন কোয়েরির জন্য সার্চ স্পেস কমায়।
এছাড়াও, মিডিয়া পারফর্ম্যান্স ক্লাস ১৫-এর জন্য, প্রাইমারি রিয়ার ক্যামেরায় অবশ্যই ১০৮০p ও ৭২০p প্রিভিউয়ের জন্য ১০-বিট HLG10 প্রিভিউ সহ প্রিভিউ স্ট্যাবিলাইজেশন এবং সর্বাধিক সাইজের JPEG কাজ করতে হবে। এইসব প্রয়োজনীয়তা সম্পর্কে আরও জানতে, বিভাগ ২.২.৭.২ দেখুন। CDD-এর ক্যামেরা।
প্রয়োগ
ফিচার কম্বিনেশন কোয়েরি করার জন্য API-কে সহায়তা করতে, নিম্নলিখিত
ফিচার কম্বিনেশন কোয়েরি API-কে
ICameraDevice-এর ভার্সন ৩-এ প্রয়োগ করুন:
constructDefaultRequestSettings: নির্দিষ্টCaptureRequestধরনের জন্য ডিফল্ট সেটিংস তৈরি করে। HALICameraDeviceSession::constructDefaultRequestSettingsইমপ্লিমেন্টেশন ব্যবহার করতে পারে।isStreamCombinationWithSettingsSupported: সেশন প্যারামিটার ও অতিরিক্তCaptureRequestকী সহ নির্দিষ্ট ক্যামেরা স্ট্রিম কম্বিনেশন ডিভাইসে কাজ করে কিনা তা চেক করে। কাজ করে এমন কম্বিনেশনের জন্যtrueএবং কাজ করে না এমন ফিচার কম্বিনেশনের জন্যfalseফেরত দিতেই হবে। HAL,isStreamCombinationSupportedইমপ্লিমেন্টেশন ব্যবহার করতে এবংsessionParams-এ পাস করাCaptureRequestসেটিংস চেক করার জন্য সহায়তা যোগ করতে পারে।getSessionCharacteristics: সেশন প্যারামিটার সহ কাজ করে এমন স্ট্রিম কম্বিনেশন নেয় এবং সেশন-নির্দিষ্ট বৈশিষ্ট্য রিটার্ন করে।INFO_SESSION_CONFIGURATION_QUERY_VERSION: সাধারণত ব্যবহার করা হয় এমন সব সেশন কনফিগারেশনের তালিকা দেখায়। এইসব কনফিগারেশন নিয়ম মেনে চলা সংক্রান্ত পরীক্ষার মাধ্যমে যাচাই করা হয়।
ICameraDevice ইন্টারফেসের ভার্সন ৩-এর আগের ভার্সনের জন্য, HAL
কে
isStreamCombinationSupported
মেথড প্রয়োগ করতে হবে।
API-এর কোয়েরি করা ফিচার কম্বিনেশন সম্পর্কে আরও জানতে, sessionConfigurationQueryVersion-এর
ডকুমেন্টেশন দেখুন
system/media/camera/docs/metadata_definitions.xml।
এই ফিচারের রেফারেন্স প্রয়োগের জন্য, hardware/google/camera/devices/EmulatedCamera/hwl/ দেখুন।
পাবলিক API
ডিভাইসের জন্য কাজ করে এমন ফিচারের কম্বিনেশন সম্পর্কে কোয়েরি করতে অ্যাপ নিম্নলিখিত পাবলিক API ব্যবহার করতে পারে:
CameraDevice.CameraDeviceSetup:CameraDevice-এর সীমিত উপস্থাপনা যাCameraDeviceইনস্ট্যান্সের প্রয়োজন ছাড়াই ফিচার কম্বিনেশন কোয়েরি করতে ব্যবহার করা যেতে পারে।getCameraDeviceSetup:isCameraDeviceSetupSupportedtrueরিটার্ন করলে, প্রদত্ত ক্যামেরা আইডির জন্য একটিCameraDeviceSetupঅবজেক্ট অ্যাকোয়ার করে।INFO_SESSION_CONFIGURATION_QUERY_VERSION: এই ভ্যালুVANILLA_ICE_CREAMবা তার বেশি হলে ফিচার কম্বিনেশন কোয়েরি কাজ করে।OutputConfiguration: ক্যামেরা আউটপুট বর্ণনা করে এমন একটি ক্লাস, যাতে কম লেটেন্সি ফিচার কম্বিনেশন কোয়েরির উদ্দেশ্যে একটি ডিফার্ড সারফেস থাকতে পারে।SessionConfiguration: একটি ইউটিলিটি ক্লাস যা স্ট্রিম কম্বিনেশন এবং সেশন প্যারামিটার সহ সেশন কনফিগারেশন বর্ণনা করে, যা ফিচার কম্বিনেশন কোয়েরির জন্য ব্যবহার করা যেতে পারে।
যাচাইকরণ
এই ফিচারের আপনার প্রয়োগ যাচাই করতে, নিম্নলিখিত VTS, CTS এবং ক্যামেরা ITS (CTS যাচাইকারী) টেস্ট ব্যবহার করুন:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ক্যামেরা ITS