মাল্টি-ক্যামেরা সমর্থন

অ্যান্ড্রয়েড 9 মাল্টি-ক্যামেরা ডিভাইসগুলির জন্য API সমর্থন চালু করেছে একটি নতুন লজিক্যাল ক্যামেরা ডিভাইসের মাধ্যমে যা একই দিকে নির্দেশ করে দুটি বা ততোধিক শারীরিক ক্যামেরা ডিভাইসের সমন্বয়ে গঠিত। লজিক্যাল ক্যামেরা ডিভাইসটি HAL- ইন্টিগ্রেটেড মাল্টি-ক্যামেরা বৈশিষ্ট্যগুলির সাথে মিথস্ক্রিয়া করার অনুমতি দেয় এমন একটি অ্যাপে একক ক্যামেরাডিভাইস/ক্যাপচার সেশন হিসাবে উন্মুক্ত করা হয়। অ্যাপগুলি ঐচ্ছিকভাবে অন্তর্নিহিত শারীরিক ক্যামেরা স্ট্রীম, মেটাডেটা এবং নিয়ন্ত্রণগুলি অ্যাক্সেস এবং নিয়ন্ত্রণ করতে পারে।

মাল্টি-ক্যামেরা সমর্থন

চিত্র 1 । মাল্টি-ক্যামেরা সমর্থন

এই ডায়াগ্রামে, বিভিন্ন ক্যামেরা আইডি কালার কোডেড। অ্যাপটি একই সময়ে প্রতিটি ফিজিক্যাল ক্যামেরা থেকে কাঁচা বাফার স্ট্রিম করতে পারে। আলাদা কন্ট্রোল সেট করা এবং বিভিন্ন ফিজিক্যাল ক্যামেরা থেকে আলাদা মেটাডেটা গ্রহণ করাও সম্ভব।

উদাহরণ এবং উত্স

মাল্টি-ক্যামেরা ডিভাইসগুলিকে অবশ্যই লজিক্যাল মাল্টি-ক্যামেরা ক্ষমতার সাথে বিজ্ঞাপন দিতে হবে।

ক্যামেরা ক্লায়েন্টরা getPhysicalCameraIds() কল করে একটি নির্দিষ্ট লজিক্যাল ক্যামেরা তৈরি করা ভৌত ডিভাইসের ক্যামেরা আইডি জিজ্ঞাসা করতে পারে। ফলাফলের অংশ হিসাবে ফিরে আসা আইডিগুলি setPhysicalCameraId() মাধ্যমে পৃথকভাবে শারীরিক ডিভাইসগুলি নিয়ন্ত্রণ করতে ব্যবহৃত হয়। getPhysicalCameraResults() করে এই ধরনের পৃথক অনুরোধের ফলাফলগুলি সম্পূর্ণ ফলাফল থেকে জিজ্ঞাসা করা যেতে পারে।

ব্যক্তিগত ফিজিক্যাল ক্যামেরার অনুরোধ শুধুমাত্র সীমিত প্যারামিটারের উপসেট সমর্থন করতে পারে। সমর্থিত প্যারামিটারগুলির একটি তালিকা পেতে, বিকাশকারীরা getAvailablePhysicalCameraRequestKeys() কল করতে পারেন।

ফিজিক্যাল ক্যামেরা স্ট্রীম শুধুমাত্র নন-প্রসেসিং অনুরোধের জন্য এবং শুধুমাত্র একরঙা এবং বেয়ার সেন্সরগুলির জন্য সমর্থিত।

বাস্তবায়ন

সমর্থন চেকলিস্ট

HAL পাশে লজিক্যাল মাল্টি-ক্যামেরা ডিভাইস যোগ করতে:

  • যেকোনও লজিক্যাল ক্যামেরা ডিভাইসের জন্য একটি ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA সক্ষমতা যোগ করুন যা দুটি বা ততোধিক ফিজিক্যাল ক্যামেরা দ্বারা সমর্থিত যেগুলি একটি অ্যাপের সংস্পর্শে আসে।
  • ফিজিক্যাল ক্যামেরা আইডিগুলির একটি তালিকা সহ স্ট্যাটিক ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS মেটাডেটা ক্ষেত্রটি পূরণ করুন৷
  • ফিজিক্যাল ক্যামেরা স্ট্রীমের পিক্সেলগুলির মধ্যে পারস্পরিক সম্পর্ক স্থাপনের জন্য প্রয়োজনীয় গভীরতা-সম্পর্কিত স্ট্যাটিক মেটাডেটা পূরণ করুন: ANDROID_LENS_POSE_ROTATION , ANDROID_LENS_POSE_TRANSLATION , ANDROID_LENS_INTRINSIC_CALIBRATION , ANDROID_LENS_DISTORTION , ANDROID_LENS_POSE_REFERENCE
  • স্ট্যাটিক ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE মেটাডেটা ফিল্ড এতে সেট করুন:

  • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS স্বতন্ত্র ফিজিক্যাল ক্যামেরার জন্য সমর্থিত প্যারামিটারের একটি তালিকা সহ পপুলেট করুন। তালিকাটি খালি হতে পারে যদি লজিক্যাল ডিভাইসটি পৃথক অনুরোধ সমর্থন না করে।

  • যদি পৃথক অনুরোধগুলি সমর্থিত হয়, তবে পৃথক physicalCameraSettings সেটিংস প্রক্রিয়া করুন এবং প্রয়োগ করুন যা ক্যাপচার অনুরোধের অংশ হিসাবে আসতে পারে এবং সেই অনুযায়ী পৃথক physicalCameraMetadata যুক্ত করতে পারে।

  • ক্যামেরা HAL ডিভাইসের ভার্সন 3.5 (Android 10-এ প্রবর্তিত) বা উচ্চতর সংস্করণের জন্য, লজিক্যাল ক্যামেরার সমর্থনকারী বর্তমান সক্রিয় ফিজিক্যাল ক্যামেরার ID ব্যবহার করে ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID ফলাফল কী পূরণ করুন।

অ্যান্ড্রয়েড 9 চালিত ডিভাইসগুলির জন্য, ক্যামেরা ডিভাইসগুলিকে অবশ্যই একটি লজিক্যাল YUV/RAW স্ট্রীমকে একই আকারের (RAW স্ট্রিমগুলিতে প্রযোজ্য নয়) এবং দুটি ফিজিক্যাল ক্যামেরা থেকে একই বিন্যাসের সাথে প্রতিস্থাপন করতে হবে। এটি Android 10 চালিত ডিভাইসগুলিতে প্রযোজ্য নয়।

Android 10 চালিত ডিভাইসগুলির জন্য যেখানে ক্যামেরা HAL ডিভাইসের সংস্করণটি 3.5 বা তার বেশি, ক্যামেরা ডিভাইসটি অবশ্যই isStreamCombinationSupported সমর্থন করতে হবে যাতে ফিজিক্যাল স্ট্রীম সমন্বিত একটি নির্দিষ্ট স্ট্রিম সংমিশ্রণ সমর্থিত কিনা তা অনুসন্ধান করতে অ্যাপগুলির জন্য।

স্ট্রিম কনফিগারেশন মানচিত্র

একটি যৌক্তিক ক্যামেরার জন্য, একটি নির্দিষ্ট হার্ডওয়্যার স্তরের ক্যামেরা ডিভাইসের জন্য বাধ্যতামূলক স্ট্রিম কম্বিনেশনগুলি CameraDevice.createCaptureSession এ যা প্রয়োজন তা একই। স্ট্রীম কনফিগারেশন মানচিত্রের সমস্ত স্ট্রীম অবশ্যই লজিক্যাল স্ট্রীম হতে হবে৷

বিভিন্ন আকারের ফিজিক্যাল সাব-ক্যামেরা সহ RAW সক্ষমতা সমর্থন করে এমন একটি লজিক্যাল ক্যামেরা ডিভাইসের জন্য, যদি একটি অ্যাপ একটি লজিক্যাল RAW স্ট্রীম কনফিগার করে, তাহলে লজিক্যাল ক্যামেরা ডিভাইসটিকে বিভিন্ন সেন্সর আকারের ফিজিক্যাল সাব-ক্যামেরাগুলিতে স্যুইচ করা উচিত নয়। এটি নিশ্চিত করে যে বিদ্যমান RAW ক্যাপচার অ্যাপগুলি ভাঙবে না।

RAW ক্যাপচারের সময় ফিজিক্যাল সাব-ক্যামেরাগুলির মধ্যে স্যুইচ করে HAL-বাস্তবায়িত অপটিক্যাল জুমের সুবিধা নিতে, অ্যাপগুলিকে অবশ্যই লজিক্যাল RAW স্ট্রিমের পরিবর্তে ফিজিক্যাল সাব-ক্যামেরা স্ট্রীম কনফিগার করতে হবে।

গ্যারান্টিযুক্ত স্ট্রিম সংমিশ্রণ

লজিক্যাল ক্যামেরা এবং এর অন্তর্নিহিত ফিজিক্যাল ক্যামেরা উভয়কেই তাদের ডিভাইসের স্তরের জন্য প্রয়োজনীয় বাধ্যতামূলক স্ট্রিম কম্বিনেশনের নিশ্চয়তা দিতে হবে।

একটি যৌক্তিক ক্যামেরা ডিভাইস তার হার্ডওয়্যার স্তর এবং ক্ষমতার উপর ভিত্তি করে একটি শারীরিক ক্যামেরা ডিভাইসের মতো একইভাবে কাজ করা উচিত। এটি সুপারিশ করা হয় যে এর বৈশিষ্ট্য সেটটি পৃথক শারীরিক ক্যামেরাগুলির একটি সুপারসেট।

Android 9 চালিত ডিভাইসগুলিতে, প্রতিটি গ্যারান্টিযুক্ত স্ট্রিম সংমিশ্রণের জন্য, লজিক্যাল ক্যামেরা অবশ্যই সমর্থন করবে:

  • একটি যৌক্তিক YUV_420_888 বা কাঁচা স্ট্রীমকে একই আকার এবং বিন্যাসের দুটি ফিজিক্যাল স্ট্রিম দিয়ে প্রতিস্থাপন করা হচ্ছে, প্রতিটি আলাদা ফিজিক্যাল ক্যামেরা থেকে, প্রদত্ত যে আকার এবং বিন্যাস ফিজিক্যাল ক্যামেরা দ্বারা সমর্থিত।

  • দুটি কাঁচা স্ট্রীম যোগ করা, প্রতিটি ফিজিক্যাল ক্যামেরা থেকে একটি, যদি লজিক্যাল ক্যামেরা RAW ক্ষমতার বিজ্ঞাপন না দেয়, তবে অন্তর্নিহিত ফিজিক্যাল ক্যামেরাগুলো করে। এটি সাধারণত ঘটে যখন শারীরিক ক্যামেরার বিভিন্ন সেন্সর আকার থাকে।

  • একই আকার এবং বিন্যাসের একটি লজিক্যাল স্ট্রিমের জায়গায় শারীরিক স্ট্রীম ব্যবহার করা। ফিজিক্যাল এবং লজিক্যাল স্ট্রীমের ন্যূনতম ফ্রেমের সময়কাল একই হলে এটি ক্যাপচারের ফ্রেম রেটকে ধীর করবে না।

কর্মক্ষমতা এবং ক্ষমতা বিবেচনা

  • কর্মক্ষমতা:

    • রিসোর্স সীমাবদ্ধতার কারণে ভৌত স্ট্রীম কনফিগার করা এবং স্ট্রিম করা লজিক্যাল ক্যামেরার ক্যাপচার রেটকে কমিয়ে দিতে পারে।
    • ফিজিক্যাল ক্যামেরা সেটিংস প্রয়োগ করলে ক্যাপচার রেট কমে যেতে পারে যদি অন্তর্নিহিত ক্যামেরাগুলিকে ভিন্ন ফ্রেমের হারে রাখা হয়।
  • শক্তি:

    • ডিফল্ট ক্ষেত্রে HAL এর পাওয়ার অপ্টিমাইজেশন কাজ করে চলেছে।
    • শারীরিক স্ট্রীম কনফিগার করা বা অনুরোধ করা HAL-এর অভ্যন্তরীণ পাওয়ার অপ্টিমাইজেশানকে ওভাররাইড করতে পারে এবং আরও শক্তি ব্যবহার করতে পারে।

কাস্টমাইজেশন

আপনি নিম্নলিখিত উপায়ে আপনার ডিভাইস বাস্তবায়ন কাস্টমাইজ করতে পারেন.

  • লজিক্যাল ক্যামেরা ডিভাইসের ফিউজড আউটপুট সম্পূর্ণরূপে HAL বাস্তবায়নের উপর নির্ভর করে। ফিজিক্যাল ক্যামেরাগুলি থেকে কীভাবে ফিউজড লজিক্যাল স্ট্রিমগুলি নেওয়া হয় সেই সিদ্ধান্তটি অ্যাপ এবং অ্যান্ড্রয়েড ক্যামেরা ফ্রেমওয়ার্কের জন্য স্বচ্ছ।
  • ব্যক্তিগত শারীরিক অনুরোধ এবং ফলাফল ঐচ্ছিকভাবে সমর্থিত হতে পারে. এই ধরনের অনুরোধে উপলব্ধ পরামিতিগুলির সেটও সম্পূর্ণরূপে নির্দিষ্ট HAL বাস্তবায়নের উপর নির্ভরশীল।
  • Android 10 থেকে, HAL getCameraIdList-এ কিছু বা সমস্ত getCameraIdList এর বিজ্ঞাপন না দেওয়ার জন্য নির্বাচন করে একটি অ্যাপের মাধ্যমে সরাসরি খোলা যেতে পারে এমন ক্যামেরার সংখ্যা কমাতে পারে। getPhysicalCameraCharacteristics কল করলে ফিজিক্যাল ক্যামেরার বৈশিষ্ট্য ফেরত দিতে হবে।

বৈধতা

লজিক্যাল মাল্টি-ক্যামেরা ডিভাইসগুলিকে অবশ্যই অন্যান্য নিয়মিত ক্যামেরার মতো ক্যামেরা CTS পাস করতে হবে। এই ধরনের ডিভাইসকে লক্ষ্য করে এমন পরীক্ষার ক্ষেত্রে LogicalCameraDeviceTest মডিউলে পাওয়া যাবে।

এই তিনটি আইটিএস পরীক্ষাগুলি ইমেজগুলির যথাযথ ফিউজিং সহজতর করার জন্য মাল্টি-ক্যামেরা সিস্টেমকে লক্ষ্য করে:

দৃশ্য 1 এবং দৃশ্য 4 পরীক্ষাগুলি আইটিএস-ইন-এ-বক্স টেস্ট রিগ দিয়ে চালানো হয়। test_multi_camera_match পরীক্ষাটি নিশ্চিত করে যে দুটি ক্যামেরা উভয়ই সক্ষম হলে ছবির কেন্দ্রের উজ্জ্বলতা মেলে। test_multi_camera_alignment পরীক্ষাটি নিশ্চিত করে যে ক্যামেরা স্পেসিং, ওরিয়েন্টেশন এবং বিকৃতি পরামিতিগুলি সঠিকভাবে লোড করা হয়েছে। যদি মাল্টি-ক্যামেরা সিস্টেমে একটি Wide FoV ক্যামেরা (>90o) থাকে, তাহলে ITS বক্সের rev2 সংস্করণ প্রয়োজন।

Sensor_fusion হল একটি দ্বিতীয় টেস্ট রিগ যা বারবার, নির্ধারিত ফোন মোশন সক্ষম করে এবং জাইরোস্কোপ এবং ইমেজ সেন্সর টাইমস্ট্যাম্পগুলি মিলে যায় এবং মাল্টি-ক্যামেরা ফ্রেমগুলি সিঙ্কে রয়েছে বলে দাবি করে৷

সমস্ত বাক্স AcuSpec, Inc. ( www.acuspecinc.com , fred@acuspecinc.com) এবং MYWAY Manufacturing ( www.myway.tw , sales@myway.tw) এর মাধ্যমে উপলব্ধ। উপরন্তু, rev1 ITS বক্সটি West-Mark ( www.west-mark.com , dgoodman@west-mark.com) এর মাধ্যমে কেনা যাবে।

সেরা অনুশীলন

অ্যাপ্লিকেশান সামঞ্জস্য বজায় রাখার সময় মাল্টি-ক্যামেরা দ্বারা সক্ষম বৈশিষ্ট্যগুলির সম্পূর্ণ সুবিধা নিতে, একটি লজিক্যাল মাল্টি-ক্যামেরা ডিভাইস বাস্তবায়ন করার সময় এই সেরা অনুশীলনগুলি অনুসরণ করুন:

  • (Android 10 বা উচ্চতর) getCameraIdList থেকে ফিজিক্যাল সাব-ক্যামেরা লুকান। এটি ক্যামেরার সংখ্যা কমিয়ে দেয় যা সরাসরি অ্যাপের মাধ্যমে খোলা যায়, জটিল ক্যামেরা নির্বাচন যুক্তিযুক্ত অ্যাপগুলির প্রয়োজনীয়তা দূর করে।
  • (Android 11 বা উচ্চতর) অপটিক্যাল জুম সমর্থনকারী লজিক্যাল মাল্টি-ক্যামেরা ডিভাইসের জন্য, ANDROID_CONTROL_ZOOM_RATIO API প্রয়োগ করুন এবং শুধুমাত্র আকৃতির অনুপাত কাটানোর জন্য ANDROID_SCALER_CROP_REGION ব্যবহার করুন৷ ANDROID_CONTROL_ZOOM_RATIO ডিভাইসটিকে জুম আউট করতে এবং আরও ভাল নির্ভুলতা বজায় রাখতে সক্ষম করে৷ এই ক্ষেত্রে, HAL-কে অবশ্যই ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES , ANDROID_STATISTICS_FACE_LANDMARKS সক্রিয় ক্ষেত্র এবং ক্ষেত্রটিকে দেখতে বা দেখতে হবে। ANDROID_CONTROL_ZOOM_RATIO কীভাবে ANDROID_SCALER_CROP_REGION এর সাথে একসাথে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, camera3_crop_reprocess#cropping দেখুন।
  • ফিজিক্যাল ক্যামেরা সহ মাল্টি-ক্যামেরা ডিভাইসগুলির জন্য যেগুলির বিভিন্ন ক্ষমতা রয়েছে, নিশ্চিত করুন যে ডিভাইসটি একটি নির্দিষ্ট মান বা পরিসরের জন্য সমর্থনের বিজ্ঞাপন দেয় শুধুমাত্র যদি পুরো জুম পরিসর মান বা পরিসর সমর্থন করে। উদাহরণস্বরূপ, যদি লজিক্যাল ক্যামেরাটি একটি আল্ট্রাওয়াইড, একটি প্রশস্ত এবং একটি টেলিফটো ক্যামেরার সমন্বয়ে গঠিত হয়, তাহলে নিম্নলিখিতগুলি করুন:
    • If the active array sizes of the physical cameras are different, the camera HAL must do the mapping from the physical cameras' active arrays to the logical camera active array for ANDROID_SCALER_CROP_REGION , ANDROID_CONTROL_AE_REGIONS , ANDROID_CONTROL_AWB_REGIONS , ANDROID_CONTROL_AF_REGIONS , ANDROID_STATISTICS_FACE_RECTANGLES , and ANDROID_STATISTICS_FACE_LANDMARKS so that from the app's দৃষ্টিকোণ, স্থানাঙ্ক সিস্টেম হল লজিক্যাল ক্যামেরার সক্রিয় অ্যারের আকার।
    • যদি প্রশস্ত এবং টেলিফোটো ক্যামেরা অটোফোকাস সমর্থন করে, কিন্তু আল্ট্রাওয়াইড ক্যামেরা স্থির ফোকাস থাকে, তাহলে নিশ্চিত করুন যে লজিক্যাল ক্যামেরা অটোফোকাস সমর্থনের বিজ্ঞাপন দেয়। HAL-কে অবশ্যই আল্ট্রাওয়াইড ক্যামেরার জন্য একটি অটোফোকাস স্টেট মেশিন সিমুলেট করতে হবে যাতে অ্যাপটি যখন আল্ট্রাওয়াইড লেন্সে জুম আউট করে, তখন অন্তর্নিহিত ফিজিক্যাল ক্যামেরা ফিক্সড ফোকাস অ্যাপে স্বচ্ছ হয় এবং সমর্থিত AF মোডের জন্য অটোফোকাস স্টেট মেশিন। প্রত্যাশিত হিসাবে কাজ।
    • যদি প্রশস্ত এবং টেলিফটো ক্যামেরা 4K @ 60 fps সমর্থন করে এবং আল্ট্রাওয়াইড ক্যামেরা শুধুমাত্র 4K @ 30 fps, বা 1080p @ 60 fps সমর্থন করে, কিন্তু 4K @ 60 fps নয়, তাহলে নিশ্চিত করুন যে লজিক্যাল ক্যামেরা 4k @ 60 fps-এ বিজ্ঞাপন দেয় না। এর সমর্থিত স্ট্রিম কনফিগারেশন। এটি লজিক্যাল ক্যামেরার ক্ষমতার অখণ্ডতার গ্যারান্টি দেয়, নিশ্চিত করে যে অ্যাপটি 1-এর কম ANDROID_CONTROL_ZOOM_RATIO 4k @ 60 fps অর্জন না করার সমস্যায় পড়বে না।
  • অ্যান্ড্রয়েড 10 থেকে দেখে, একটি যৌক্তিক মাল্টি-ক্যামেরা স্ট্রীম সংমিশ্রণকে সমর্থন করার জন্য প্রয়োজন হয় না যাতে ফিজিক্যাল স্ট্রিম অন্তর্ভুক্ত থাকে। যদি HAL শারীরিক স্ট্রিমগুলির সাথে একটি সংমিশ্রণ সমর্থন করে:
    • (Android 11 বা উচ্চতর) স্টেরিও এবং মোশন ট্র্যাকিং থেকে গভীরতার মতো ব্যবহারের ক্ষেত্রে আরও ভালভাবে পরিচালনা করার জন্য, হার্ডওয়্যার দ্বারা যতটা অর্জন করা যায় ফিজিক্যাল স্ট্রিম আউটপুটগুলির দৃশ্যের ক্ষেত্রটিকে বড় করুন৷ যাইহোক, যদি একটি ফিজিক্যাল স্ট্রীম এবং একটি লজিক্যাল স্ট্রীম একই ফিজিক্যাল ক্যামেরা থেকে উদ্ভূত হয়, তাহলে হার্ডওয়্যারের সীমাবদ্ধতা ফিজিক্যাল স্ট্রীমের ভিউ অফ ফিল্ডকে লজিক্যাল স্ট্রিমের মতো হতে বাধ্য করতে পারে।
    • একাধিক শারীরিক স্ট্রীম দ্বারা সৃষ্ট মেমরির চাপকে মোকাবেলা করার জন্য, নিশ্চিত করুন যে কোনো ফিজিক্যাল স্ট্রীম একটি নির্দিষ্ট সময়ের জন্য নিষ্ক্রিয় থাকার প্রত্যাশিত হলে বিনামূল্যের বাফারগুলি (ভোক্তাদের দ্বারা প্রকাশ করা বাফারগুলি কিন্তু এখনও প্রযোজকের দ্বারা সারিবদ্ধ নয়) discardFreeBuffers করার জন্য অ্যাপগুলি বাতিলফ্রিবাফার ব্যবহার করে৷ সময়ের
    • যদি বিভিন্ন ফিজিক্যাল ক্যামেরা থেকে ফিজিক্যাল স্ট্রীমগুলি সাধারণত একই অনুরোধের সাথে সংযুক্ত না হয়, তাহলে নিশ্চিত করুন যে অ্যাপগুলি surface group ব্যবহার করে যাতে একটি বাফার সারি দুটি অ্যাপ-মুখী সারফেসকে ব্যাক করতে ব্যবহার করা হয়, যাতে মেমরি খরচ কম হয়।