ক্যামেরা সংস্করণ সমর্থন

এই পৃষ্ঠায় ক্যামেরা HAL, API এবং সংশ্লিষ্ট কম্প্যাটিবিলিটি টেস্ট স্যুট (CTS) টেস্টগুলোর ভার্সনগত পার্থক্য বিস্তারিতভাবে বর্ণনা করা হয়েছে। এছাড়াও এতে অ্যান্ড্রয়েড ৭.০-তে ক্যামেরা ফ্রেমওয়ার্ককে আরও শক্তিশালী ও সুরক্ষিত করার জন্য করা বিভিন্ন আর্কিটেকচারাল পরিবর্তন, অ্যান্ড্রয়েড ৮.০-তে ট্রেবল-এ স্থানান্তর এবং এই পরিবর্তনগুলোকে সমর্থন করার জন্য ভেন্ডরদের তাদের ক্যামেরা ইমপ্লিমেন্টেশনে যে আপডেটগুলো করতে হবে, সে বিষয়গুলোও আলোচনা করা হয়েছে।

পরিভাষা

এই পৃষ্ঠায় নিম্নলিখিত পরিভাষাগুলো ব্যবহৃত হয়েছে:

ক্যামেরা এপিআই১
অ্যান্ড্রয়েড ৪.৪ এবং এর নিচের সংস্করণগুলোর ডিভাইসগুলোতে অ্যাপ-স্তরের ক্যামেরা ফ্রেমওয়ার্কটি android.hardware.Camera ক্লাসের মাধ্যমে প্রকাশ করা হয়।
ক্যামেরা এপিআই২
অ্যান্ড্রয়েড ৫.০ এবং এর পরবর্তী সংস্করণগুলোর ডিভাইসগুলোতে অ্যাপ-স্তরের ক্যামেরা ফ্রেমওয়ার্ক, যা android.hardware.camera2 প্যাকেজের মাধ্যমে উন্মুক্ত করা হয়।
ক্যামেরা এইচএএল
ক্যামেরা মডিউল লেয়ারটি SoC ভেন্ডরদের দ্বারা বাস্তবায়িত হয়। অ্যাপ-লেভেলের পাবলিক ফ্রেমওয়ার্কগুলো ক্যামেরা HAL-এর উপরে নির্মিত।
ক্যামেরা HAL3.1
HAL ক্যামেরা ডিভাইসটির সংস্করণটি অ্যান্ড্রয়েড ৪.৪ সহ প্রকাশ করা হয়েছে।
ক্যামেরা HAL3.2
HAL ক্যামেরা ডিভাইসটির সংস্করণটি অ্যান্ড্রয়েড ৫.০ সহ প্রকাশ করা হয়েছে।
ক্যামেরা এপিআই১ সিটিএস
ক্যামেরা এপিআই১ (Caper API1)-এর উপর চালিত ক্যামেরা সিটিএস (CTS) টেস্টের সেট।
ক্যামেরা এপিআই২ সিটিএস
ক্যামেরা এপিআই২ (Camera API2)-এর উপর ভিত্তি করে চালিত ক্যামেরা সিটিএস (CTS) পরীক্ষার অতিরিক্ত একটি সেট।
ট্রিবল
একটি নতুন ভেন্ডর ইন্টারফেসের মাধ্যমে ভেন্ডর ইমপ্লিমেন্টেশনকে (সিলিকন প্রস্তুতকারকদের দ্বারা লিখিত ডিভাইস-নির্দিষ্ট, নিম্ন-স্তরের সফটওয়্যার) অ্যান্ড্রয়েড ওএস ফ্রেমওয়ার্ক থেকে পৃথক করে।
এইচআইডিএল
ট্রেবল-এর সাথে প্রবর্তিত এইচএএল ইন্টারফেস ডেফিনিশন ল্যাঙ্গুয়েজটি একটি এইচএএল এবং এর ব্যবহারকারীদের মধ্যকার ইন্টারফেস নির্দিষ্ট করতে ব্যবহৃত হয়।
ভিটিএস
ট্রেবলের পাশাপাশি ভেন্ডর টেস্ট স্যুট চালু করা হয়েছে।

ক্যামেরা এপিআই

অ্যান্ড্রয়েডে নিম্নলিখিত ক্যামেরা এপিআইগুলো অন্তর্ভুক্ত রয়েছে।

ক্যামেরা এপিআই১

অ্যান্ড্রয়েড ৫.০ ক্যামেরা এপিআই১-কে অপ্রচলিত ঘোষণা করেছে, যা পর্যায়ক্রমে বিলুপ্ত করা হচ্ছে কারণ নতুন প্ল্যাটফর্মের উন্নয়ন ক্যামেরা এপিআই২-এর উপর দৃষ্টি নিবদ্ধ করছে। তবে, এই বিলুপ্তির প্রক্রিয়াটি দীর্ঘ হবে এবং অ্যান্ড্রয়েড রিলিজগুলো আরও কিছু সময়ের জন্য ক্যামেরা এপিআই১ অ্যাপগুলোকে সমর্থন করা চালিয়ে যাবে। বিশেষত, নিম্নলিখিত অ্যাপগুলোর জন্য সমর্থন অব্যাহত থাকবে:

  • অ্যাপের জন্য ক্যামেরা এপিআই১ ইন্টারফেস। ক্যামেরা এপিআই১-এর উপর ভিত্তি করে তৈরি ক্যামেরা অ্যাপগুলো অ্যান্ড্রয়েডের নিম্নতর সংস্করণে চালিত ডিভাইসের মতোই কাজ করবে।
  • ক্যামেরা HAL সংস্করণসমূহ। ক্যামেরা HAL 1.0-এর জন্য সমর্থন অন্তর্ভুক্ত।

ক্যামেরা এপিআই২

ক্যামেরা এপিআই২ ফ্রেমওয়ার্কটি অ্যাপের কাছে ক্যামেরার নিম্ন-স্তরের নিয়ন্ত্রণ উন্মুক্ত করে, যার মধ্যে রয়েছে কার্যকর জিরো-কপি বার্স্ট/স্ট্রিমিং ফ্লো এবং প্রতি-ফ্রেমের এক্সপোজার, গেইন, হোয়াইট ব্যালেন্স গেইন, কালার কনভার্সন, ডিনয়েজিং, শার্পেনিং ও আরও অনেক কিছুর নিয়ন্ত্রণ। বিস্তারিত জানতে গুগল আই/ও ভিডিও ওভারভিউটি দেখুন।

অ্যান্ড্রয়েড ৫.০ এবং তার পরবর্তী সংস্করণগুলোতে ক্যামেরা এপিআই২ অন্তর্ভুক্ত রয়েছে; তবে, অ্যান্ড্রয়েড ৫.০ এবং তার পরবর্তী সংস্করণে চালিত ডিভাইসগুলো ক্যামেরা এপিআই২-এর সব ফিচার সমর্থন নাও করতে পারে। অ্যাপগুলো ক্যামেরা এপিআই২ ইন্টারফেসের মাধ্যমে android.info.supportedHardwareLevel প্রপার্টিটি সম্পর্কে জানতে পারে, যা নিম্নলিখিত সাপোর্ট লেভেলগুলোর মধ্যে একটি রিপোর্ট করে:

  • LEGACY : এই ডিভাইসগুলো ক্যামেরা API2 ইন্টারফেসের মাধ্যমে অ্যাপগুলোকে এমন সব সক্ষমতা প্রদান করে, যা ক্যামেরা API1 ইন্টারফেসের মাধ্যমে অ্যাপগুলোকে দেওয়া সক্ষমতার প্রায় সমান। লিগ্যাসি ফ্রেমওয়ার্কের কোড ধারণাগতভাবে ক্যামেরা API2 কলগুলোকে ক্যামেরা API1 কলে রূপান্তরিত করে; লিগ্যাসি ডিভাইসগুলো প্রতি-ফ্রেম নিয়ন্ত্রণের মতো ক্যামেরা API2 ফিচারগুলো সমর্থন করে না।
  • LIMITED : এই ডিভাইসগুলো ক্যামেরা এপিআই২-এর কিছু সক্ষমতা সমর্থন করে (তবে সবগুলো নয়) এবং এগুলোতে অবশ্যই ক্যামেরা এইচএএল ৩.২ বা উচ্চতর সংস্করণ ব্যবহার করতে হবে।
  • FULL : এই ডিভাইসগুলো ক্যামেরা এপিআই২ (Camera API2)-এর সকল প্রধান বৈশিষ্ট্য সমর্থন করে এবং এগুলোতে অবশ্যই ক্যামেরা এইচএএল (Camera HAL) ৩.২ বা তার উচ্চতর সংস্করণ এবং অ্যান্ড্রয়েড (Android) ৫.০ বা তার উচ্চতর সংস্করণ ব্যবহার করতে হবে।
  • LEVEL_3 : এই ডিভাইসগুলো YUV রিপ্রসেসিং ও RAW ইমেজ ক্যাপচারের পাশাপাশি অতিরিক্ত আউটপুট স্ট্রিম কনফিগারেশন সমর্থন করে।
  • EXTERNAL : এই ডিভাইসগুলো LIMITED ডিভাইসের মতোই, তবে কিছু ব্যতিক্রম রয়েছে; যেমন, কিছু সেন্সর বা লেন্সের তথ্য রিপোর্ট করা নাও হতে পারে অথবা এগুলোর ফ্রেম রেট কম স্থিতিশীল হতে পারে। এই লেভেলটি ইউএসবি ওয়েবক্যামের মতো এক্সটার্নাল ক্যামেরার জন্য ব্যবহৃত হয়।

ক্যামেরা API2 ইন্টারফেসে android.request.availableCapabilities প্রপার্টির মাধ্যমে স্বতন্ত্র ক্যাপাবিলিটিগুলো প্রকাশ করা হয়। FULL ডিভাইসগুলোর জন্য MANUAL_SENSOR এবং MANUAL_POST_PROCESSING সহ অন্যান্য ক্যাপাবিলিটিগুলো আবশ্যক। FULL ডিভাইসগুলোর জন্যও RAW ক্যাপাবিলিটিটি ঐচ্ছিক। LIMITED ডিভাইসগুলো এই ক্যাপাবিলিটিগুলোর যেকোনো উপসেট বিজ্ঞাপন করতে পারে, এমনকি কোনোটিই না। তবে, BACKWARD_COMPATIBLE ক্যাপাবিলিটিটি অবশ্যই সংজ্ঞায়িত থাকতে হবে।

ডিভাইসটির সমর্থিত হার্ডওয়্যার লেভেল এবং এর দ্বারা সমর্থিত নির্দিষ্ট Camera API2 সক্ষমতাগুলো নিম্নলিখিত ফিচার ফ্ল্যাগ হিসেবে উপলব্ধ রয়েছে, যা Google Play-তে Camera API2 ক্যামেরা অ্যাপ ফিল্টার করার সুযোগ দেয়।

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

CTS প্রয়োজনীয়তা

অ্যান্ড্রয়েড ৫.০ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলোকে অবশ্যই Camera API1 CTS, Camera API2 CTS এবং CTS Verifier ক্যামেরা টেস্টগুলোতে উত্তীর্ণ হতে হবে।

যেসব ডিভাইসে ক্যামেরা HAL3.2 ইমপ্লিমেন্টেশন নেই এবং যেগুলো সম্পূর্ণ ক্যামেরা API2 ইন্টারফেস সমর্থন করতে সক্ষম নয়, সেগুলোকেও ক্যামেরা API2 CTS টেস্টে উত্তীর্ণ হতে হবে। তবে, ডিভাইসটি ক্যামেরা API2 LEGACY মোডে চলে (যেখানে ক্যামেরা API2 কলগুলোকে ধারণাগতভাবে ক্যামেরা API1 কলের সাথে ম্যাপ করা হয়), ফলে ক্যামেরা API1-এর বাইরের কোনো ফিচার বা সক্ষমতা সম্পর্কিত যেকোনো ক্যামেরা API2 CTS টেস্ট স্বয়ংক্রিয়ভাবে বাদ হয়ে যায়।

লিগ্যাসি ডিভাইসগুলিতে, যে Camera API2 CTS টেস্টগুলি চালানো হয়, সেগুলি কোনো নতুন আবশ্যকতা ছাড়াই বিদ্যমান পাবলিক Camera API1 ইন্টারফেস এবং সক্ষমতা ব্যবহার করে। যে বাগগুলি প্রকাশ পায় (এবং যা Camera API2 CTS ব্যর্থতার কারণ হয়), সেগুলি ডিভাইসের বিদ্যমান Camera HAL-এ আগে থেকেই উপস্থিত থাকে, এবং তাই বিদ্যমান Camera API1 অ্যাপগুলি দ্বারা সেগুলি খুঁজে পাওয়া যাবে। আমরা এই ধরনের অনেক বাগ আশা করি না (তবে, Camera API2 CTS টেস্টে উত্তীর্ণ হওয়ার জন্য এই ধরনের যেকোনো বাগ অবশ্যই ঠিক করতে হবে)।

ভিটিএস প্রয়োজনীয়তা

অ্যান্ড্রয়েড ৮.০ বা তার উচ্চতর সংস্করণে চালিত এবং বাইন্ডারাইজড এইচএএল (HAL) ইমপ্লিমেন্টেশনযুক্ত ডিভাইসগুলোকে অবশ্যই ক্যামেরা ভিটিএস (VTS) পরীক্ষায় উত্তীর্ণ হতে হবে।

ক্যামেরা ফ্রেমওয়ার্ক শক্তিশালীকরণ

মিডিয়া এবং ক্যামেরা ফ্রেমওয়ার্কের নিরাপত্তা জোরদার করতে, অ্যান্ড্রয়েড ৭.০ ক্যামেরা সার্ভিসকে মিডিয়াসার্ভার থেকে সরিয়ে নিয়েছে। অ্যান্ড্রয়েড ৮.০ থেকে শুরু করে, প্রতিটি বাইন্ডারাইজড ক্যামেরা এইচএএল (HAL) ক্যামেরা সার্ভিস থেকে আলাদা একটি প্রসেসে চলে। ব্যবহৃত এপিআই (API) এবং এইচএএল (HAL) ভার্সনের উপর নির্ভর করে ভেন্ডরদের ক্যামেরা এইচএএল-এ পরিবর্তন আনার প্রয়োজন হতে পারে। নিম্নলিখিত বিভাগগুলিতে এইচএএল১ (HAL1) এবং এইচএএল৩ (HAL3)-এর জন্য এপি১ (AP1) এবং এপি২ (AP2)-এর স্থাপত্যগত পরিবর্তন এবং সাধারণ প্রয়োজনীয়তাগুলি বিস্তারিতভাবে বর্ণনা করা হয়েছে।

API1 এর জন্য স্থাপত্যগত পরিবর্তন

API1 ভিডিও রেকর্ডিং-এর ক্ষেত্রে ক্যামেরা এবং ভিডিও এনকোডার একই প্রসেসে থাকতে পারে। API1 ব্যবহার করার সময়:

  • HAL3-এর ক্ষেত্রে, যেখানে ক্যামেরা সার্ভিস প্রসেসগুলোর মধ্যে বাফার আদান-প্রদানের জন্য BufferQueue ব্যবহার করে, সেখানে কোনো ভেন্ডর আপডেটের প্রয়োজন নেই

    HAL3-এর API1-এ অ্যান্ড্রয়েড ৭.০ ক্যামেরা ও মিডিয়া স্ট্যাক

    চিত্র ১. HAL3-এর API1-এ অ্যান্ড্রয়েড ৭.০ ক্যামেরা ও মিডিয়া স্ট্যাক

  • HAL1, যা ভিডিও বাফারে মেটাডেটা পাস করা সমর্থন করে, ভেন্ডরদের অবশ্যই kMetadataBufferTypeNativeHandleSource ব্যবহার করার জন্য HAL আপডেট করতে হবে। (Android 7.0-এ kMetadataBufferTypeCameraSource আর সমর্থিত নয়।)

    HAL1-এর API1-এ অ্যান্ড্রয়েড ৭.০ ক্যামেরা ও মিডিয়া স্ট্যাক

    চিত্র ২. HAL1-এর API1-এ অ্যান্ড্রয়েড ৭.০ ক্যামেরা ও মিডিয়া স্ট্যাক।

API2 এর জন্য স্থাপত্যগত পরিবর্তন

HAL1 বা HAL3-তে API2-এর জন্য, BufferQueue বাফার পাস করে, ফলে সেই পাথগুলো কাজ করতে থাকে। API2-এর জন্য অ্যান্ড্রয়েড ৭.০ আর্কিটেকচার:

  • ক্যামেরাসার্ভিস স্থানান্তরের ফলে HAL1 প্রভাবিত হয় না, এবং কোনো ভেন্ডর আপডেটের প্রয়োজন নেই
  • HAL3 প্রভাবিত হয়েছে , কিন্তু কোনো ভেন্ডর আপডেটের প্রয়োজন নেই:

    HAL3-এর API2-তে অ্যান্ড্রয়েড ৭.০ ক্যামেরা এবং মিডিয়া স্ট্যাক

    চিত্র ৩. HAL3-এর API2-তে অ্যান্ড্রয়েড ৭.০ ক্যামেরা ও মিডিয়া স্ট্যাক

অতিরিক্ত প্রয়োজনীয়তা

মিডিয়া ও ক্যামেরা ফ্রেমওয়ার্কের নিরাপত্তা জোরদার করার জন্য যে স্থাপত্যগত পরিবর্তনগুলো করা হয়েছে, তাতে নিম্নলিখিত অতিরিক্ত ডিভাইসের প্রয়োজনীয়তাগুলো অন্তর্ভুক্ত রয়েছে।

  • সাধারণ। আইপিসি (IPC)-এর কারণে ডিভাইসগুলিতে অতিরিক্ত ব্যান্ডউইথের প্রয়োজন হয়, যা হাই-স্পিড ভিডিও রেকর্ডিং-এর মতো সময়-সংবেদনশীল ক্যামেরা ব্যবহারের ক্ষেত্রে প্রভাব ফেলতে পারে। ভেন্ডররা android.hardware.camera2.cts.PerformanceTest এবং Google Camera অ্যাপটি চালিয়ে 120/240 FPS হাই-স্পিড ভিডিও রেকর্ডিং-এর মাধ্যমে এর প্রকৃত প্রভাব পরিমাপ করতে পারেন। নতুন প্রসেসটি তৈরি করার জন্য ডিভাইসগুলিতে অল্প পরিমাণ অতিরিক্ত র‍্যামেরও প্রয়োজন হয়।
  • ভিডিও বাফারে মেটাডেটা পাস করুন ( শুধুমাত্র HAL1-এর জন্য )। যদি HAL1 ভিডিও বাফারে আসল YUV ফ্রেম ডেটার পরিবর্তে মেটাডেটা সংরক্ষণ করে, তবে HAL-কে অবশ্যই মেটাডেটা বাফার টাইপ হিসেবে kMetadataBufferTypeNativeHandleSource ব্যবহার করতে হবে এবং ভিডিও বাফারে VideoNativeHandleMetadata পাস করতে হবে। (Android 7.0-এ kMetadataBufferTypeCameraSource আর সমর্থিত নয়।) VideoNativeHandleMetadata এর মাধ্যমে, ক্যামেরা এবং মিডিয়া ফ্রেমওয়ার্কগুলো নেটিভ হ্যান্ডেলগুলোকে সঠিকভাবে সিরিয়ালাইজ ও ডিসিরিয়ালাইজ করার মাধ্যমে প্রসেসগুলোর মধ্যে ভিডিও বাফার পাস করতে পারে।
  • বাফার হ্যান্ডেল অ্যাড্রেস সবসময় একই বাফার সংরক্ষণ করে না ( শুধুমাত্র HAL3-এর ক্ষেত্রে )। প্রতিটি ক্যাপচার অনুরোধের জন্য, HAL3 বাফার হ্যান্ডেলগুলোর অ্যাড্রেস সংগ্রহ করে। HAL বাফার শনাক্ত করার জন্য এই অ্যাড্রেসগুলো ব্যবহার করতে পারে না, কারণ HAL বাফারটি ফেরত দেওয়ার পর অ্যাড্রেসগুলোতে অন্য কোনো বাফার হ্যান্ডেল সংরক্ষিত থাকতে পারে। বাফার শনাক্ত করার জন্য বাফার হ্যান্ডেল ব্যবহার করতে হলে আপনাকে অবশ্যই HAL-কে আপডেট করতে হবে। উদাহরণস্বরূপ, HAL একটি বাফার হ্যান্ডেল অ্যাড্রেস A গ্রহণ করে, যেখানে বাফার হ্যান্ডেল A সংরক্ষিত থাকে। HAL বাফার হ্যান্ডেল A ফেরত দেওয়ার পর, পরবর্তীবার যখন HAL অ্যাড্রেসটি গ্রহণ করবে, তখন সেই A-তে বাফার হ্যান্ডেল B সংরক্ষিত থাকতে পারে।
  • ক্যামেরাসার্ভারের জন্য SELinux পলিসি আপডেট করুন। যদি ডিভাইস-নির্দিষ্ট SELinux পলিসি মিডিয়াসার্ভারকে ক্যামেরা চালানোর অনুমতি দেয়, তবে আপনাকে অবশ্যই SELinux পলিসি আপডেট করে ক্যামেরাসার্ভারকে যথাযথ অনুমতি দিতে হবে। আমরা ক্যামেরাসার্ভারের জন্য মিডিয়াসার্ভারের SELinux পলিসি হুবহু নকল করতে নিরুৎসাহিত করি (কারণ মিডিয়াসার্ভার এবং ক্যামেরাসার্ভারের জন্য সিস্টেমে সাধারণত ভিন্ন ভিন্ন রিসোর্সের প্রয়োজন হয়)। ক্যামেরাসার্ভারের শুধুমাত্র ক্যামেরার কার্যকারিতা সম্পাদনের জন্য প্রয়োজনীয় অনুমতি থাকা উচিত এবং মিডিয়াসার্ভার থেকে ক্যামেরা-সম্পর্কিত যেকোনো অপ্রয়োজনীয় অনুমতি সরিয়ে ফেলা উচিত।
  • ক্যামেরা HAL এবং ক্যামেরা সার্ভারের মধ্যে পৃথকীকরণ। অ্যান্ড্রয়েড ৮.০ এবং এর পরবর্তী সংস্করণগুলোতে বাইন্ডারাইজড ক্যামেরা HAL-কে ক্যামেরা সার্ভার থেকে ভিন্ন একটি প্রসেসে অতিরিক্তভাবে আলাদা করা হয়। IPC, HIDL-দ্বারা সংজ্ঞায়িত ইন্টারফেসের মাধ্যমে সম্পন্ন হয়।

বৈধতা

ক্যামেরাযুক্ত এবং অ্যান্ড্রয়েড ৭.০ চালিত সকল ডিভাইসের ক্ষেত্রে, অ্যান্ড্রয়েড ৭.০ সিটিএস (CTS) চালিয়ে এর বাস্তবায়ন যাচাই করুন। যদিও অ্যান্ড্রয়েড ৭.০-তে ক্যামেরা সার্ভিসের পরিবর্তন যাচাই করার জন্য নতুন কোনো সিটিএস টেস্ট অন্তর্ভুক্ত নেই, কিন্তু আপনি উপরে উল্লিখিত আপডেটগুলো না করে থাকলে বিদ্যমান সিটিএস টেস্টগুলো ব্যর্থ হবে।

ক্যামেরাযুক্ত এবং অ্যান্ড্রয়েড ৮.০ বা তার উচ্চতর সংস্করণে চালিত সকল ডিভাইসের ক্ষেত্রে, VTS চালিয়ে ভেন্ডরের বাস্তবায়ন যাচাই করুন।

ক্যামেরা HAL সংস্করণের ইতিহাস

অ্যান্ড্রয়েড ক্যামেরা এইচএএল মূল্যায়নের জন্য উপলব্ধ পরীক্ষাগুলির তালিকার জন্য, ক্যামেরা এইচএএল টেস্টিং চেকলিস্ট দেখুন।

অ্যান্ড্রয়েড ১০

অ্যান্ড্রয়েড ১০-এ নিম্নলিখিত আপডেটগুলো আনা হয়েছে।

ক্যামেরা এপিআই

  • একাধিক ক্যামেরার উন্নতি যা ফিজিক্যাল ক্যামেরা আইডি গোপন করে সেগুলোকে আলাদাভাবে অথবা সংশ্লিষ্ট লজিক্যাল ক্যামেরার মাধ্যমে ব্যবহার করার সুযোগ দেয়। একাধিক ক্যামেরা সমর্থন দেখুন।
  • নতুন সেশন তৈরির অতিরিক্ত পারফরম্যান্স খরচ ছাড়াই কোনো নির্দিষ্ট সেশন কনফিগারেশন সমর্থিত কিনা তা যাচাই করার সুবিধা। CameraDevice দেখুন।
  • কোনো নির্দিষ্ট ব্যবহারের ক্ষেত্রে ক্লায়েন্টকে আরও শক্তি-সাশ্রয়ী ও কর্মক্ষম করে তোলার জন্য প্রস্তাবিত স্ট্রিম কনফিগারেশনগুলো পাওয়ার সুবিধা। getRecommendedStreamConfigurationMap দেখুন।
  • ডেপথ JPEG ইমেজ ফরম্যাটের জন্য সমর্থন। আরও বিস্তারিত জানতে, ডাইনামিক ডেপথ স্পেসিফিকেশন দেখুন।
  • HEIC ইমেজ ফরম্যাটের জন্য সমর্থন। HEIF ইমেজিং দেখুন।
  • গোপনীয়তার উন্নতি। CameraCharacteristics থেকে নির্দিষ্ট কিছু কী পুনরুদ্ধার করার জন্য ক্লায়েন্টের CAMERA অনুমতি থাকা প্রয়োজন। getKeysNeedingPermission দেখুন।

ক্যামেরা এইচএএল

অ্যান্ড্রয়েড ১০-এ নিম্নলিখিত ক্যামেরা HAL সংস্করণগুলো আপডেট করা হয়েছে।

৩.৫

ICameraDevice

ICameraDeviceSession

  • isReconfigurationNeeded : এই মেথডটি ক্যামেরা ফ্রেমওয়ার্ককে জানায় যে সম্ভাব্য নতুন সেশন প্যারামিটার মানগুলির জন্য সম্পূর্ণ স্ট্রিম পুনর্গঠনের প্রয়োজন আছে কিনা। এটি অপ্রয়োজনীয় ক্যামেরা পুনর্গঠন বিলম্ব এড়াতে সাহায্য করে। সেশন পুনর্গঠন কোয়েরি দেখুন।
  • HAL বাফার ম্যানেজমেন্ট এপিআই : এই এপিআইগুলো ক্যামেরা পাইপলাইন জুড়ে প্রতিটি ক্যাপচার অনুরোধকে তার সংশ্লিষ্ট বাফারগুলোর সাথে যুক্ত করার পরিবর্তে, ক্যামেরা HAL-কে শুধুমাত্র প্রয়োজনের সময় ক্যামেরা ফ্রেমওয়ার্ক থেকে বাফার অনুরোধ করার সুযোগ দেয়, যার ফলে উল্লেখযোগ্য পরিমাণে মেমরি সাশ্রয় হতে পারে।
    • signalStreamFlush : HAL-কে সংকেত দেয় যে ক্যামেরা পরিষেবাটি configureStreams_3_5 সম্পাদন করতে চলেছে এবং HAL-কে অবশ্যই নির্ধারিত স্ট্রিমগুলির সমস্ত বাফার ফেরত দিতে হবে।
    • configureStreams_3_5 : এটি ICameraDevice3.4.configureStreams অনুরূপ, তবে এর পাশাপাশি configureStreams_3_5 এবং signalStreamFlush কলগুলোর মধ্যে রেস কন্ডিশন (race condition) পরীক্ষা করার জন্য streamConfigCounter কাউন্টারটি প্রদান করা হয়।

ICameraDeviceCallback এর আপডেটসমূহ:

  • requestStreamBuffers : এটি একটি সিনক্রোনাস কলব্যাক যা ক্যামেরা HAL, ক্যামেরা সার্ভারের কাছে বাফারের জন্য অনুরোধ করতে ব্যবহার করে। requestStreamBuffers দেখুন।
  • returnStreamBuffers : ক্যামেরা HAL-এর জন্য ক্যামেরা সার্ভারে আউটপুট বাফার ফেরত পাঠানোর সিঙ্ক্রোনাস কলব্যাক। returnStreamBuffers দেখুন।

৩.৪

অ্যান্ড্রয়েড ১০-এ ক্যামেরা মেটাডেটাতে নিম্নলিখিত কী-গুলো যোগ করা হয়েছে।

  • ছবির ফরম্যাট
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • ক্যামেরার মেটাডেটা ট্যাগ
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • সক্ষমতা
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT কী-এর জন্য মানগুলি
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • উপলব্ধ গতিশীল গভীরতা প্রবাহ কনফিগারেশন
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • উপলব্ধ HEIC স্ট্রিম কনফিগারেশন
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

ক্যামেরা মডিউল

অ্যান্ড্রয়েড ১০-এ নিম্নলিখিত ক্যামেরা মডিউল সংস্করণগুলো আপডেট করা হয়েছে।

২.৫

  • ডিভাইসগুলির জন্য notifyDeviceStateChange মেথডটি যোগ করা হয়েছে, যা ফোল্ডিং-এর মতো ভৌত পরিবর্তনের ফলে ক্যামেরা ও রাউটিং প্রভাবিত হলে ক্যামেরা HAL-কে অবহিত করে।

২.৪

  • যেসব ডিভাইস API লেভেল ২৯ বা তার চেয়ে উচ্চতর লেভেলে চালু হচ্ছে, সেগুলোকে অবশ্যই isTorchModeSupported জন্য true রিপোর্ট করতে হবে।

অ্যান্ড্রয়েড ৯

অ্যান্ড্রয়েড ৯ সংস্করণে ক্যামেরা এপিআই২ এবং এইচএএল ইন্টারফেসে নিম্নলিখিত আপডেটগুলো আনা হয়েছে।

ক্যামেরা এপিআই

  • একই দিকে মুখ করা একাধিক ক্যামেরাযুক্ত ডিভাইসগুলোকে আরও ভালোভাবে সাপোর্ট করার জন্য মাল্টি-ক্যামেরা এপিআই চালু করা হয়েছে, যা বোকেহ এবং সিমলেস জুমের মতো ফিচারগুলো সক্ষম করে। এর ফলে অ্যাপগুলো একটি ডিভাইসের একাধিক ক্যামেরাকে একটি লজিক্যাল ইউনিট (লজিক্যাল ক্যামেরা) হিসেবে দেখতে পারে। একটি লজিক্যাল ক্যামেরার অন্তর্ভুক্ত পৃথক ক্যামেরা ডিভাইসগুলোতেও ক্যাপচারের অনুরোধ পাঠানো যেতে পারে। মাল্টি-ক্যামেরা সাপোর্ট দেখুন।
  • সেশন প্যারামিটার চালু করা হলো। সেশন প্যারামিটার হলো উপলব্ধ ক্যাপচার প্যারামিটারগুলোর একটি উপসেট, যা পরিবর্তন করা হলে প্রক্রিয়াকরণে গুরুতর বিলম্ব ঘটাতে পারে। ক্লায়েন্টরা যদি ক্যাপচার সেশন শুরুর সময় তাদের প্রাথমিক মানগুলো প্রদান করে, তবে এই সমস্যাগুলো প্রশমিত করা যেতে পারে। সেশন প্যারামিটার দেখুন।
  • অ্যাপ-স্তরের স্থিতিশীলতা এবং প্রভাবের জন্য অপটিক্যাল স্থিতিশীলতা (OIS) ডেটা কী যোগ করে। STATISTICS_OIS_SAMPLES দেখুন।
  • এক্সটার্নাল ফ্ল্যাশ সাপোর্ট যোগ করে। CONTROL_AE_MODE_ON_EXTERNAL_FLASH দেখুন।
  • CAPTURE_INTENT এ একটি মোশন ট্র্যাকিং ইন্টেন্ট যোগ করে। CONTROL_CAPTURE_INTENT_MOTION_TRACKING দেখুন।
  • LENS_RADIAL_DISTORTION বাতিল করে এর পরিবর্তে LENS_DISTORTION যোগ করা হয়েছে।
  • CaptureRequest এ বিকৃতি সংশোধন মোড যোগ করে। DISTORTION_CORRECTION_MODE দেখুন।
  • সমর্থিত ডিভাইসগুলিতে বাহ্যিক USB/UVC ক্যামেরার জন্য সমর্থন যোগ করা হয়েছে। INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL দেখুন।

ক্যামেরা এইচএএল

৩.৪

ICameraDeviceSession এর আপডেট

  • configureStreams_3_4 : sessionParameters এবং লজিক্যাল ক্যামেরার জন্য সমর্থন যোগ করে।
  • processCaptureRequest_3_4 : স্ট্রিম কাঠামোতে ফিজিক্যাল ক্যামেরা আইডি অন্তর্ভুক্ত করার সুবিধা যোগ করা হয়েছে।

ICameraDeviceCallback এর আপডেট

  • processCaptureResult_3_4 : ক্যাপচার ফলাফলে ফিজিক্যাল ক্যামেরা মেটাডেটা যোগ করে।

৩.৩

অ্যান্ড্রয়েড ৯-এ ক্যামেরা মেটাডেটাতে নিম্নলিখিত কী-গুলো যোগ করা হয়েছে।

  • সক্ষমতা
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • ক্যামেরার মেটাডেটা ট্যাগ
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

অ্যান্ড্রয়েড ৮.০

অ্যান্ড্রয়েড ৮.০ রিলিজে ট্রেবল (Treble) চালু করা হয়েছে। ট্রেবলের ফলে, ভেন্ডর ক্যামেরা এইচএএল (HAL) ইমপ্লিমেন্টেশনগুলোকে অবশ্যই বাইন্ডারাইজড করতে হবে। অ্যান্ড্রয়েড ৮.০-তে ক্যামেরা সার্ভিসের জন্য এই গুরুত্বপূর্ণ উন্নতিগুলোও রয়েছে:

  • শেয়ার করা সারফেস: একই OutputConfiguration শেয়ার করে এমন একাধিক সারফেস সক্ষম করুন।
  • কাস্টম ক্যামেরা মোডের জন্য সিস্টেম এপিআই
  • onCaptureQueueEmpty

এই বৈশিষ্ট্যগুলো সম্পর্কে আরও তথ্যের জন্য নিচের বিভাগগুলো দেখুন।

ভাগ করা পৃষ্ঠতল

এই ফিচারটি শুধুমাত্র একটি বাফার সেট ব্যবহার করে প্রিভিউ এবং ভিডিও এনকোডিং-এর মতো দুটি আউটপুট পরিচালনা করতে সক্ষম করে, যা বিদ্যুৎ এবং মেমরি খরচ কমায়। এই ফিচারটি সমর্থন করার জন্য, ডিভাইস নির্মাতাদের নিশ্চিত করতে হবে যে তাদের ক্যামেরা HAL এবং gralloc HAL ইমপ্লিমেন্টেশনগুলো শুধুমাত্র একটি কনজিউমারের পরিবর্তে একাধিক ভিন্ন কনজিউমার (যেমন হার্ডওয়্যার কম্পোজার/GPU এবং ভিডিও এনকোডার) দ্বারা ব্যবহৃত gralloc বাফার তৈরি করতে পারে। ক্যামেরা সার্ভিসটি কনজিউমার ব্যবহারের ফ্ল্যাগগুলো ক্যামেরা HAL এবং gralloc HAL-এর কাছে পাঠায়; সেগুলোকে হয় সঠিক ধরনের বাফার বরাদ্দ করতে হবে, অথবা ক্যামেরা HAL-কে একটি এরর রিটার্ন করতে হবে যে কনজিউমারদের এই সংমিশ্রণটি সমর্থিত নয়।

অতিরিক্ত বিবরণের জন্য enableSurfaceSharing ডেভেলপার ডকুমেন্টেশন দেখুন।

কাস্টম ক্যামেরা মোডের জন্য সিস্টেম এপিআই

পাবলিক ক্যামেরা এপিআই দুটি অপারেটিং মোড সংজ্ঞায়িত করে: সাধারণ এবং সীমাবদ্ধ উচ্চ-গতির রেকর্ডিং। এগুলোর অর্থগত দিক বেশ ভিন্ন; উদাহরণস্বরূপ, উচ্চ-গতির মোড একবারে সর্বাধিক দুটি নির্দিষ্ট আউটপুটে সীমাবদ্ধ থাকে। বিভিন্ন OEM হার্ডওয়্যার-নির্দিষ্ট সক্ষমতার জন্য অন্যান্য কাস্টম মোড সংজ্ঞায়িত করতে আগ্রহ প্রকাশ করেছে। অভ্যন্তরীণভাবে, মোডটি হলো configure_streams এ পাস করা একটি পূর্ণসংখ্যা মাত্র। দেখুন: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams

এই ফিচারে একটি সিস্টেম এপিআই কল অন্তর্ভুক্ত রয়েছে, যা ব্যবহার করে ওইএম (OEM) ক্যামেরা অ্যাপগুলো একটি কাস্টম মোড চালু করতে পারে। পাবলিক এপিআই-তে ভবিষ্যতে যুক্ত হওয়া মোডগুলোর সাথে সংঘাত এড়ানোর জন্য এই মোডগুলোকে অবশ্যই 0x8000 পূর্ণসংখ্যা মান থেকে শুরু করতে হবে।

এই ফিচারটি সমর্থন করার জন্য, OEM-দের কেবল তাদের HAL-এ নতুন মোডটি যোগ করতে হবে, যা configure_streams-এর সময় HAL-এ পাঠানো এই ইন্টিজারটি দ্বারা চালু হবে, এবং তারপর তাদের কাস্টম ক্যামেরা অ্যাপকে সিস্টেম API ব্যবহার করতে হবে।

মেথডটির নাম হলো android.hardware.camera2.CameraDevice#createCustomCaptureSession । দেখুন: frameworks/base/core/java/android/hardware/camera2/CameraDevice

onCaptureQueueEmpty

এই API-এর উদ্দেশ্য হলো রিকোয়েস্ট কিউকে যথাসম্ভব খালি রেখে জুমের মতো কন্ট্রোল পরিবর্তনের ল্যাটেন্সি কমানো। onCaptureQueueEmpty জন্য HAL-এর কোনো কাজের প্রয়োজন হয় না; এটি সম্পূর্ণরূপে ফ্রেমওয়ার্কের পক্ষ থেকে যুক্ত করা হয়েছিল। যে অ্যাপগুলো এর সুবিধা নিতে চায়, তাদের ওই কলব্যাকে একটি লিসেনার যোগ করতে হবে এবং যথাযথভাবে সাড়া দিতে হবে। সাধারণত ক্যামেরা ডিভাইসে আরেকটি ক্যাপচার রিকোয়েস্ট পাঠানোর মাধ্যমে এটি করা হয়।

ক্যামেরা HIDL ইন্টারফেস

ক্যামেরা HIDL ইন্টারফেসটি হলো ক্যামেরা HAL ইন্টারফেসের একটি সম্পূর্ণ নতুন সংস্করণ, যা স্থিতিশীল HIDL-সংজ্ঞায়িত API ব্যবহার করে। সবচেয়ে সাম্প্রতিক লিগ্যাসি সংস্করণ ৩.৪ এবং ২.৪-এ (ক্যামেরা মডিউলের জন্য) প্রবর্তিত সমস্ত বৈশিষ্ট্য এবং ক্যামেরার সক্ষমতাও HIDL সংজ্ঞার অংশ।

৩.৪

সমর্থিত মেটাডেটাতে সামান্য সংযোজন এবং data_space সাপোর্টে পরিবর্তন:

  • RAW_OPAQUE ফরম্যাট সমর্থিত হলে ANDROID_SENSOR_OPAQUE_RAW_SIZE স্ট্যাটিক মেটাডেটা বাধ্যতামূলকভাবে যোগ করুন।
  • যেকোনো RAW ফরম্যাট সমর্থিত হলে ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE স্ট্যাটিক মেটাডেটা বাধ্যতামূলক হিসেবে যোগ করুন।
  • ডেটাস্পেস এনকোডিং-এর ভার্সন ০ সংজ্ঞা ব্যবহার করে camera3_stream_t data_space ফিল্ডটিকে আরও নমনীয় সংজ্ঞায় পরিবর্তন করুন।
  • সাধারণ মেটাডেটা সংযোজন যা HALv3.2 বা নতুন সংস্করণের জন্য ব্যবহারযোগ্য:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

৩.৩

বর্ধিত-ক্ষমতাসম্পন্ন HAL-এর সামান্য সংশোধন:

  • OPAQUE এবং YUV পুনঃপ্রক্রিয়াকরণ API আপডেট।
  • ডেপথ আউটপুট বাফারের জন্য প্রাথমিক সমর্থন।
  • camera3_stream_t তে data_space ফিল্ড যোগ করা হয়েছে।
  • camera3_stream_t তে ঘূর্ণন ক্ষেত্র যোগ করা।
  • camera3_stream_configuration_t তে camera3 স্ট্রিম কনফিগারেশন অপারেশন মোড যোগ করা হয়েছে।

৩.২

বর্ধিত-ক্ষমতাসম্পন্ন HAL-এর সামান্য সংশোধন:

  • get_metadata_vendor_tag_ops অপ্রচলিত করা হয়েছে। এর পরিবর্তে camera_common.h এ থাকা get_vendor_tag_ops ব্যবহার করুন।
  • register_stream_buffers অপ্রচলিত করা হলো। process_capture_request এ ফ্রেমওয়ার্ক দ্বারা HAL-কে সরবরাহ করা সমস্ত gralloc বাফার যেকোনো সময় নতুন হতে পারে।
  • আংশিক ফলাফল সমর্থন যোগ করা হয়েছে। সম্পূর্ণ ফলাফল উপলব্ধ হওয়ার আগে, উপলব্ধ ফলাফলের একটি উপসেট দিয়ে process_capture_result একাধিকবার কল করা যেতে পারে।
  • camera3_request_template এ ম্যানুয়াল টেমপ্লেট যোগ করুন। অ্যাপগুলো সরাসরি ক্যাপচার সেটিংস নিয়ন্ত্রণ করতে এই টেমপ্লেটটি ব্যবহার করতে পারে।
  • দ্বিমুখী এবং ইনপুট স্ট্রিম স্পেসিফিকেশনগুলো পুনর্বিবেচনা করুন।
  • ইনপুট বাফার রিটার্ন পাথ পরিবর্তন করুন। বাফারটি process_capture_request এর পরিবর্তে process_capture_result এ রিটার্ন করা হয়।

৩.১

বর্ধিত-ক্ষমতাসম্পন্ন HAL-এর সামান্য সংশোধন:

  • configure_streams কনজিউমার ব্যবহারের ফ্ল্যাগগুলো HAL-এর কাছে প্রেরণ করে।
  • যত দ্রুত সম্ভব সমস্ত ইন-ফ্লাইট রিকোয়েস্ট/বাফার ড্রপ করার জন্য ফ্লাশ কল।

৩.০

বর্ধিত-ক্ষমতাসম্পন্ন HAL-এর প্রথম সংস্করণ:

  • প্রধান সংস্করণ পরিবর্তন, কারণ ABI সম্পূর্ণ ভিন্ন। 2.0 থেকে প্রয়োজনীয় হার্ডওয়্যার সক্ষমতা বা অপারেশনাল মডেলে কোনো পরিবর্তন নেই।
  • পুনর্গঠিত ইনপুট রিকোয়েস্ট এবং স্ট্রিম কিউ ইন্টারফেস: ফ্রেমওয়ার্ক পরবর্তী রিকোয়েস্ট এবং স্ট্রিম বাফারগুলো আগে থেকেই ডিকিউ করে রেখে HAL-কে কল করে। সিঙ্ক ফ্রেমওয়ার্ক সাপোর্ট অন্তর্ভুক্ত করা হয়েছে, যা কার্যকর বাস্তবায়নের জন্য প্রয়োজনীয়।
  • ট্রিগারগুলোকে রিকোয়েস্টের মধ্যে এবং বেশিরভাগ নোটিফিকেশনকে রেজাল্টের মধ্যে স্থানান্তর করা হয়েছে।
  • ফ্রেমওয়ার্কের সমস্ত কলব্যাককে একটি কাঠামোতে এবং সমস্ত সেটআপ মেথডকে একটিমাত্র initialize() কলে একত্রিত করা হয়েছে।
  • স্ট্রিম ব্যবস্থাপনা সহজ করার জন্য স্ট্রিম কনফিগারেশনকে একটিমাত্র কলে আনা হয়েছে। দ্বিমুখী স্ট্রিমগুলো STREAM_FROM_STREAM কনস্ট্রাক্টকে প্রতিস্থাপন করেছে।
  • পুরোনো/সীমিত হার্ডওয়্যার ডিভাইসগুলির জন্য সীমিত মোডের অর্থ।

২.০

বর্ধিত-ক্ষমতাসম্পন্ন HAL (অ্যান্ড্রয়েড ৪.২) [camera2.h]-এর প্রাথমিক রিলিজ:

  • বিদ্যমান android.hardware.Camera API বাস্তবায়নের জন্য যথেষ্ট।
  • ক্যামেরা সার্ভিস লেয়ারে ZSL কিউ ব্যবহারের সুযোগ দেয়।
  • ম্যানুয়াল ক্যাপচার কন্ট্রোল, বেয়ার RAW ক্যাপচার, RAW ডেটার পুনঃপ্রক্রিয়াকরণ ইত্যাদির মতো কোনো নতুন ফিচারের জন্য পরীক্ষা করা হয়নি।

১.০

প্রাথমিক অ্যান্ড্রয়েড ক্যামেরা HAL (অ্যান্ড্রয়েড ৪.০) [camera.h]:

  • C++ CameraHardwareInterface অ্যাবস্ট্রাকশন লেয়ার থেকে রূপান্তরিত।
  • android.hardware.Camera API সমর্থন করে।

ক্যামেরা মডিউলের সংস্করণের ইতিহাস

এই বিভাগে camera_module_t.common.module_api_version এর উপর ভিত্তি করে ক্যামেরা হার্ডওয়্যার মডিউলের মডিউল ভার্সনিং তথ্য রয়েছে। সবচেয়ে গুরুত্বপূর্ণ দুটি হেক্স ডিজিট মেজর ভার্সন এবং সবচেয়ে কম গুরুত্বপূর্ণ দুটি ডিজিট মাইনর ভার্সন নির্দেশ করে।

২.৪

এই ক্যামেরা মডিউল সংস্করণে নিম্নলিখিত API পরিবর্তনগুলি যোগ করা হয়েছে:

  1. টর্চ মোড সমর্থন। ফ্রেমওয়ার্কটি কোনো ক্যামেরা ডিভাইস না খুলেই, ফ্ল্যাশ ইউনিট আছে এমন যেকোনো ক্যামেরা ডিভাইসের জন্য টর্চ মোড চালু করতে পারে। ফ্ল্যাশ ইউনিট অ্যাক্সেস করার ক্ষেত্রে ক্যামেরা মডিউলের চেয়ে ক্যামেরা ডিভাইসের অগ্রাধিকার বেশি; যদি মডিউল ইন্টারফেসের মাধ্যমে টর্চ মোড চালু করা হয়ে থাকে, তবে ক্যামেরা ডিভাইস খুললে তা বন্ধ হয়ে যায়। যখন কোনো রিসোর্স দ্বন্দ্ব দেখা দেয়, যেমন কোনো ক্যামেরা ডিভাইস খোলার জন্য open() কল করা হয়, তখন ক্যামেরা HAL মডিউলকে অবশ্যই টর্চ মোড স্ট্যাটাস কলব্যাকের মাধ্যমে ফ্রেমওয়ার্ককে জানাতে হবে যে টর্চ মোড বন্ধ করা হয়েছে।
  2. বাহ্যিক ক্যামেরা (যেমন, ইউএসবি হট-প্লাগ ক্যামেরা) সমর্থন। এপিআই আপডেটগুলি নির্দিষ্ট করে যে, বাহ্যিক হট-প্লাগ ক্যামেরার ক্ষেত্রে ক্যামেরার স্ট্যাটিক তথ্য কেবল তখনই পাওয়া যাবে যখন ক্যামেরাটি সংযুক্ত এবং ব্যবহারের জন্য প্রস্তুত থাকবে। যখন ক্যামেরার স্ট্যাটাস CAMERA_DEVICE_STATUS_PRESENT না থাকে, তখন স্ট্যাটিক তথ্য পাওয়ার জন্য করা কলগুলি অবৈধ বলে গণ্য হবে। ফ্রেমওয়ার্কটি উপলব্ধ বাহ্যিক ক্যামেরার তালিকা পরিচালনা করার জন্য শুধুমাত্র ডিভাইস স্ট্যাটাস পরিবর্তনের কলব্যাকগুলির উপর নির্ভর করে।
  3. ক্যামেরা আরবিট্রেশন হিন্টস। একই সাথে কতগুলো ক্যামেরা ডিভাইস খোলা এবং ব্যবহার করা যাবে, তা স্পষ্টভাবে নির্দেশ করার জন্য সমর্থন যোগ করা হয়েছে। ডিভাইসগুলোর বৈধ সংমিশ্রণ নির্দিষ্ট করার জন্য, get_camera_info কল দ্বারা ফেরত আসা camera_info স্ট্রাকচারে resource_cost এবং conflicting_devices ফিল্ডগুলো সর্বদা সেট করতে হবে।
  4. মডিউল প্রারম্ভিকীকরণ পদ্ধতি। HAL মডিউল লোড হওয়ার পর ক্যামেরা সার্ভিস দ্বারা এটিকে কল করা হয়, যাতে HAL-এর এককালীন প্রারম্ভিকীকরণ করা যায়। অন্য কোনো মডিউল পদ্ধতি কল করার আগে এটিকে কল করা হয়।

২.৩

এই ক্যামেরা মডিউল সংস্করণটি ওপেন লিগ্যাসি ক্যামেরা HAL ডিভাইস সাপোর্ট যোগ করে। যদি একই ডিভাইস একাধিক ডিভাইস API সংস্করণ সাপোর্ট করতে পারে, তবে ফ্রেমওয়ার্কটি ক্যামেরা ডিভাইসটিকে নিম্নতর HAL সংস্করণের ডিভাইস হিসেবে খোলার জন্য এটি ব্যবহার করতে পারে। স্ট্যান্ডার্ড হার্ডওয়্যার মডিউল ওপেন কল ( common.methods->open ) ক্যামেরা ডিভাইসটিকে সর্বশেষ সমর্থিত সংস্করণ দিয়ে খোলা অব্যাহত রাখে, যা camera_info_t.device_version এ তালিকাভুক্ত সংস্করণও বটে।

২.২

ক্যামেরা মডিউলের এই সংস্করণটি মডিউল থেকে ভেন্ডর ট্যাগ সাপোর্ট যোগ করে এবং পুরোনো vendor_tag_query_ops অপ্রচলিত ঘোষণা করে, যা আগে শুধুমাত্র একটি ডিভাইস খোলা থাকলেই অ্যাক্সেস করা যেত।

২.১

ক্যামেরা মডিউলের এই সংস্করণটি ক্যামেরা HAL মডিউল থেকে ফ্রেমওয়ার্কে অ্যাসিঙ্ক্রোনাস কলব্যাকের জন্য সমর্থন যোগ করে, যা ক্যামেরা মডিউলের অবস্থার পরিবর্তন সম্পর্কে ফ্রেমওয়ার্ককে অবহিত করতে ব্যবহৃত হয়। যে মডিউলগুলো একটি বৈধ set_callbacks() মেথড প্রদান করে, তাদের অবশ্যই অন্তত এই সংস্করণ নম্বরটি রিপোর্ট করতে হবে।

২.০

যে ক্যামেরা মডিউলগুলো এই সংস্করণ নম্বরটি রিপোর্ট করে, সেগুলো ক্যামেরা মডিউল HAL ইন্টারফেসের দ্বিতীয় সংস্করণটি বাস্তবায়ন করে। এই মডিউলের মাধ্যমে খোলা যায় এমন ক্যামেরা ডিভাইসগুলো ক্যামেরা ডিভাইস HAL ইন্টারফেসের সংস্করণ ১.০ অথবা সংস্করণ ২.০ সমর্থন করতে পারে। camera_info-এর device_version ফিল্ডটি সর্বদা বৈধ; camera_info এর static_camera_characteristics ফিল্ডটি তখনই বৈধ হবে, যদি device_version ফিল্ডটির মান ২.০ বা তার বেশি হয়।

১.০

যে ক্যামেরা মডিউলগুলো এই সংস্করণ নম্বরগুলো রিপোর্ট করে, সেগুলো প্রাথমিক ক্যামেরা মডিউল HAL ইন্টারফেস প্রয়োগ করে। এই মডিউলের মাধ্যমে খোলা যায় এমন সমস্ত ক্যামেরা ডিভাইস শুধুমাত্র ক্যামেরা ডিভাইস HAL-এর সংস্করণ ১ সমর্থন করে। camera_info এর device_version এবং static_camera_characteristics ফিল্ডগুলো বৈধ নয়। এই মডিউল এবং এর ডিভাইসগুলো শুধুমাত্র android.hardware.Camera API সমর্থন করতে পারে।