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

অ্যান্ড্রয়েড 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 এ কিছু বা সমস্ত PHYSICAL_ID-এর বিজ্ঞাপন না দেওয়ার নির্বাচন করে সরাসরি একটি অ্যাপের মাধ্যমে খোলা যেতে পারে এমন ক্যামেরার সংখ্যা কমাতে পারে। 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_LANDMARKSANDROID_SCALER_CROP_REGION কীভাবে ANDROID_CONTROL_ZOOM_RATIO সাথে একসাথে কাজ করে সে সম্পর্কে আরও তথ্যের জন্য, camera3_crop_reprocess#cropping দেখুন।
  • ফিজিক্যাল ক্যামেরা সহ মাল্টি-ক্যামেরা ডিভাইসগুলির জন্য যেগুলির বিভিন্ন ক্ষমতা রয়েছে, নিশ্চিত করুন যে ডিভাইসটি একটি নির্দিষ্ট মান বা পরিসরের জন্য সমর্থনের বিজ্ঞাপন দেয় শুধুমাত্র যদি পুরো জুম পরিসর মান বা পরিসর সমর্থন করে। উদাহরণস্বরূপ, যদি লজিক্যাল ক্যামেরাটি একটি আল্ট্রাওয়াইড, একটি প্রশস্ত এবং একটি টেলিফটো ক্যামেরার সমন্বয়ে গঠিত হয়, তাহলে নিম্নলিখিতগুলি করুন:
    • ফিজিক্যাল ক্যামেরার সক্রিয় অ্যারের আকার ভিন্ন হলে, ক্যামেরা 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 যাতে অ্যাপ থেকে দৃষ্টিকোণ, স্থানাঙ্ক সিস্টেম হল লজিক্যাল ক্যামেরার সক্রিয় অ্যারের আকার।
    • যদি প্রশস্ত এবং টেলিফোটো ক্যামেরা অটোফোকাস সমর্থন করে, কিন্তু আল্ট্রাওয়াইড ক্যামেরা স্থির ফোকাস থাকে, তাহলে নিশ্চিত করুন যে লজিক্যাল ক্যামেরা অটোফোকাস সমর্থনের বিজ্ঞাপন দেয়। 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 ব্যবহার করছে যাতে একটি বাফার সারি দুটি অ্যাপ-মুখী সারফেসকে ব্যাক করতে ব্যবহার করা হয়, যাতে মেমরি খরচ কম হয়।