অ্যান্ড্রয়েডে এমন বৈশিষ্ট্য রয়েছে যা ক্যামেরা ক্লায়েন্টদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে সর্বোত্তম ক্যামেরা স্ট্রীম বেছে নিতে এবং নির্দিষ্ট স্ট্রীম সংমিশ্রণগুলি ক্যামেরা ডিভাইস দ্বারা সমর্থিত তা নিশ্চিত করার অনুমতি দেয়। একটি স্ট্রিম কনফিগারেশন বলতে ক্যামেরা ডিভাইসে কনফিগার করা একটি একক ক্যামেরা স্ট্রীমকে বোঝায় এবং একটি স্ট্রিম সংমিশ্রণ বলতে ক্যামেরা ডিভাইসে কনফিগার করা এক বা একাধিক সেটকে বোঝায়। এই বৈশিষ্ট্যগুলি সম্পর্কে আরও জানতে, প্রস্তাবিত স্ট্রীম কনফিগারেশন এবং API-এর বৈশিষ্ট্য সমন্বয়গুলি অনুসন্ধান করুন ৷
রেফারেন্স বাস্তবায়ন
প্রস্তাবিত কনফিগারেশন স্ট্রীমগুলির একটি বিক্রেতা-সাইড রেফারেন্স বাস্তবায়ন রয়েছে এবং স্ট্রিম সমন্বয় বৈশিষ্ট্যগুলি অনুসন্ধান করার জন্য API রয়েছে৷ আপনি QCamera3HWI.cpp- এ এই বাস্তবায়ন খুঁজে পেতে পারেন
প্রস্তাবিত স্ট্রিম কনফিগারেশন
ক্যামেরা বিক্রেতারা ক্যামেরা ক্লায়েন্টদের কাছে নির্দিষ্ট ব্যবহারের ক্ষেত্রে প্রস্তাবিত স্ট্রিম কনফিগারেশনের বিজ্ঞাপন দিতে পারে। এই প্রস্তাবিত স্ট্রিম কনফিগারেশনগুলি, যা StreamConfigurationMap- এর উপসেট, ক্যামেরা ক্লায়েন্টদের সর্বোত্তম কনফিগারেশন বেছে নিতে সাহায্য করতে পারে।
যদিও StreamConfigurationMap ক্যামেরা ক্লায়েন্টদের সম্পূর্ণ স্ট্রীম কনফিগারেশন তথ্য প্রদান করে, এটি একটি স্ট্রীমের উপর অন্য একটি স্ট্রীম বেছে নেওয়ার দক্ষতা, শক্তি বা কর্মক্ষমতা প্রভাব সম্পর্কে কোনো তথ্য প্রদান করে না। ক্যামেরা ক্লায়েন্টরা সমস্ত সম্ভাব্য স্ট্রিম কনফিগারেশন থেকে অবাধে বেছে নিতে পারে কিন্তু অনেক ক্ষেত্রে, এটি ক্লায়েন্টদের সাব-অপ্টিমাল ক্যামেরা কনফিগারেশন এবং অ্যাপ ব্যবহার করে সময় সাপেক্ষ সম্পূর্ণ অনুসন্ধানের দিকে নিয়ে যায়।
উদাহরণস্বরূপ, যদিও কিছু প্রক্রিয়াকৃত YUV ফরম্যাট প্রয়োজন এবং সমর্থিত হওয়া আবশ্যক, ক্যামেরা ডিভাইসে ফর্ম্যাটের জন্য স্থানীয় সমর্থন নাও থাকতে পারে। এর ফলে ফর্ম্যাট রূপান্তরের জন্য একটি অতিরিক্ত প্রক্রিয়াকরণ পাস হয় এবং দক্ষতা হ্রাস পায়। আকার এবং অনুপাতের অনুপাতও একই রকম প্রভাব ফেলতে পারে যা শক্তি এবং কর্মক্ষমতার ক্ষেত্রে নির্দিষ্ট মাত্রাকে অগ্রাধিকারযোগ্য করে তোলে।
আপনার প্রস্তাবিত স্ট্রীম কনফিগারেশন মানচিত্রগুলি 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 | একটি ভিডিও স্ন্যাপশটে অবশ্যই স্ট্রীম কনফিগারেশন অন্তর্ভুক্ত থাকতে হবে যা কমপক্ষে সর্বোচ্চ রেকর্ড রেজোলিউশনের মতো বড় এবং শুধুমাত্র BLOB + DATASPACE_JFIF ফর্ম্যাট/ডেটাস্পেস সংমিশ্রণ (JPEG) সহ। কনফিগারেশনগুলি প্রিভিউ গ্লিচের কারণ হওয়া উচিত নয় এবং 30 fps এ চলতে সক্ষম হওয়া উচিত। |
SNAPSHOT | স্ন্যাপশট স্ট্রীম কনফিগারেশনে BLOB + DATASPACE_JFIF ফরম্যাট/ডেটাস্পেস কম্বিনেশন (JPEG) সহ android.sensor.info.activeArraySize এর কাছাকাছি সাইজ সহ কমপক্ষে একটি অন্তর্ভুক্ত করতে হবে। আকৃতির অনুপাত, প্রান্তিককরণ, এবং অন্যান্য বিক্রেতা-নির্দিষ্ট বিধিনিষেধের উপর অ্যাকাউন্ট বিধিনিষেধ বিবেচনা করে, সর্বাধিক প্রস্তাবিত আকারের ক্ষেত্রটি সেন্সর অ্যারের আকারের ক্ষেত্রফলের 97% এর কম হওয়া উচিত নয়। |
ZSL (যদি সমর্থিত হয়) | ক্যামেরা ডিভাইস দ্বারা সমর্থিত হলে, প্রস্তাবিত ইনপুট স্ট্রীম কনফিগারেশনগুলি শুধুমাত্র অন্যান্য প্রক্রিয়াকৃত বা স্টল করা আউটপুট ফর্ম্যাটের সাথে একসাথে বিজ্ঞাপন দিতে হবে। |
RAW (যদি সমর্থিত হয়) | ক্যামেরা ডিভাইস দ্বারা সমর্থিত হলে, প্রস্তাবিত কাঁচা স্ট্রীম কনফিগারেশনে শুধুমাত্র RAW ভিত্তিক আউটপুট ফর্ম্যাট অন্তর্ভুক্ত করা আবশ্যক। |
অন্যান্য ব্যবহারের ক্ষেত্রে
আপনি আপনার বাস্তবায়নের জন্য নির্দিষ্ট ব্যবহারের ক্ষেত্রে অতিরিক্ত প্রস্তাবিত কনফিগারেশন স্ট্রীম প্রদান করতে পারেন।
বৈধতা
প্রস্তাবিত কনফিগারেশন স্ট্রীমগুলির আপনার বাস্তবায়ন পরীক্ষা করতে, নিম্নলিখিত CTS এবং VTS পরীক্ষাগুলি চালান:
ক্যোয়ারী বৈশিষ্ট্য সমন্বয় API
অ্যান্ড্রয়েড 15 থেকে শুরু করে, অ্যান্ড্রয়েড প্ল্যাটফর্মটি বৈশিষ্ট্যের সংমিশ্রণগুলি অনুসন্ধান করার জন্য একটি API প্রদান করে। এই APIটি ক্যামেরা ক্লায়েন্টদের জিজ্ঞাসা করতে দেয় যে বৈশিষ্ট্যগুলির একটি নির্দিষ্ট সমন্বয় ডিভাইস দ্বারা সমর্থিত হতে পারে কিনা। এই APIটি প্রয়োজনীয় কারণ ক্যামেরা2 API মডেল বিভিন্ন বৈশিষ্ট্য যেমন 4k, 60fps, HDR ভিডিও, আল্ট্রাএইচডিআর, আল্ট্রাওয়াইড জুম এবং অর্থোগোনাল কন্ট্রোল হিসাবে স্থিরকরণ।
প্রয়োজনীয়তা
API-কে ক্যোয়ারী ফিচার কম্বিনেশন সমর্থন করতে, ক্যামেরা HAL-কে অবশ্যই ICameraDevice ইন্টারফেসের সংস্করণ 3 বাস্তবায়ন করতে হবে। বিস্তারিত জানার জন্য, বাস্তবায়ন বিভাগ দেখুন।
যখন API সমর্থিত হয়, তখন পূর্বরূপ স্থিরকরণ অন্যান্য বৈশিষ্ট্যের জন্য অর্থোগোনাল হতে হবে। এর মানে হল যে একটি ক্যামেরা ডিভাইস যা প্রিভিউ স্ট্যাবিলাইজেশন সমর্থন করে, একটি নির্দিষ্ট সংমিশ্রণের জন্য isStreamCombinationWithSettingsSupported এর রিটার্ন মান একই মান হতে হবে যখন প্রিভিউ স্ট্যাবিলাইজেশন চালু বা বন্ধ থাকে। এটি বৈশিষ্ট্য সংমিশ্রণ প্রশ্নের জন্য অনুসন্ধান স্থান হ্রাস করে।
উপরন্তু, মিডিয়া পারফরম্যান্স ক্লাস 15-এর জন্য, প্রাথমিক পিছনের ক্যামেরা 1080p এবং 720p পূর্বরূপ এবং সর্বাধিক আকারের JPEG-এর জন্য 10-বিট HLG10 প্রিভিউ সহ প্রিভিউ স্ট্যাবিলাইজেশন সমর্থন করবে। এই প্রয়োজনীয়তা সম্পর্কে আরো বিস্তারিত জানার জন্য, বিভাগ 2.2.7.2 দেখুন। CDD এর ক্যামেরা ।
বাস্তবায়ন
বৈশিষ্ট্য সমন্বয় ক্যোয়ারী API সমর্থন করতে, ICameraDevice সংস্করণ 3 এ নিম্নলিখিত বৈশিষ্ট্য সমন্বয় ক্যোয়ারী API গুলি প্রয়োগ করুন:
constructDefaultRequestSettings: একটি নির্দিষ্টCaptureRequestপ্রকারের জন্য ডিফল্ট সেটিংস তৈরি করে। HALICameraDeviceSession::constructDefaultRequestSettingsবাস্তবায়ন ব্যবহার করতে পারে।isStreamCombinationWithSettingsSupported: সেশন প্যারামিটার এবং অতিরিক্তCaptureRequestকীগুলির সাথে একটি নির্দিষ্ট ক্যামেরা স্ট্রিম সংমিশ্রণের ডিভাইস সমর্থনের জন্য পরীক্ষা করে। সমর্থিত সংমিশ্রণের জন্যtrueএবং অসমর্থিত বৈশিষ্ট্য সংমিশ্রণের জন্যfalseফেরত দিতে হবে। HALisStreamCombinationSupportedইমপ্লিমেন্টেশন ব্যবহার করতে পারে এবংsessionParamsপাস করাCaptureRequestসেটিংস চেক করতে সমর্থন যোগ করতে পারে।getSessionCharacteristics: সেশন প্যারামিটারের সাথে একটি সমর্থিত স্ট্রিম সমন্বয় নেয় এবং সেশন-নির্দিষ্ট বৈশিষ্ট্য প্রদান করে।INFO_SESSION_CONFIGURATION_QUERY_VERSION: সাধারণভাবে ব্যবহৃত সমস্ত সেশন কনফিগারেশন তালিকাভুক্ত করে। এই কনফিগারেশনগুলি কমপ্লায়েন্স টেস্টিং দ্বারা যাচাই করা হয়।
ICameraDevice ইন্টারফেসের সংস্করণ 3-এর চেয়ে কম সংস্করণের জন্য, HAL-এর isStreamCombinationSupported পদ্ধতি প্রয়োগ করা উচিত।
API দ্বারা অনুসন্ধান করা বৈশিষ্ট্য সমন্বয় সম্পর্কে আরও তথ্যের জন্য, system/media/camera/docs/metadata_definitions.xml এ sessionConfigurationQueryVersion এর ডকুমেন্টেশন দেখুন।
এই বৈশিষ্ট্যটির একটি রেফারেন্স বাস্তবায়নের জন্য, 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, এবং Camera ITS (CTS Verifier) পরীক্ষাগুলি ব্যবহার করুন:
ভিটিএস
সিটিএস
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
ক্যামেরা আইটিএস