সমসাময়িক ক্যামেরা স্ট্রিমিং

অ্যান্ড্রয়েড ডিভাইসগুলিকে ক্যামেরা ডিভাইসগুলির একযোগে স্ট্রিমিং সমর্থন করার অনুমতি দেয়৷ উদাহরণস্বরূপ, এটি একটি ডিভাইসকে একই সময়ে সামনের এবং পিছনের উভয় ক্যামেরা পরিচালনা করার অনুমতি দেয়। অ্যান্ড্রয়েড 11 থেকে, ক্যামেরা 2 এপিআই নিম্নলিখিত পদ্ধতিগুলিকে অন্তর্ভুক্ত করে যেগুলি অ্যাপগুলি কল করে তা নির্ধারণ করতে পারে যে ক্যামেরাগুলি সমসাময়িক স্ট্রিমিং এবং স্ট্রিম কনফিগারেশন সমর্থন করে কিনা।

  • getConcurrentCameraIds : বর্তমানে সংযুক্ত ক্যামেরা ডিভাইস শনাক্তকারীর সংমিশ্রণের সেট পায় যা একই সাথে ক্যামেরা ডিভাইস সেশন কনফিগার করা সমর্থন করে।
  • isConcurrentSessionConfigurationSupported : ক্যামেরা ডিভাইসের প্রদত্ত সেট এবং তাদের সংশ্লিষ্ট সেশন কনফিগারেশনগুলি একযোগে কনফিগার করা যায় কিনা তা পরীক্ষা করে।

A set of mandatory stream combinations that must be supported during concurrent streaming are included through a camera device's camera characteristics in the SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS property.

getConcurrentStreamingCameraIds() এর মাধ্যমে বিজ্ঞাপিত প্রতিটি ক্যামেরা ডিভাইসকে সমসাময়িক স্ট্রিমগুলির জন্য নিম্নলিখিত গ্যারান্টিযুক্ত কনফিগারেশনগুলিকে সমর্থন করতে হবে।

লক্ষ্য 1 লক্ষ্য 2
টাইপ সর্বোচ্চ আকার টাইপ সর্বোচ্চ আকার নমুনা ব্যবহার ক্ষেত্রে
YUV s1440p ইন-অ্যাপ ভিডিও বা ইমেজ প্রসেসিং
PRIV s1440p ইন-অ্যাপ ভিউফাইন্ডার বিশ্লেষণ
জেপিইজি s1440p কোন ভিউফাইন্ডার স্থির চিত্র ক্যাপচার
YUV/PRIV s720p জেপিইজি s1440p স্ট্যান্ডার্ড স্টিল ইমেজিং
YUV/PRIV s720p YUV/PRIV s1440p ইন-অ্যাপ ভিডিও বা প্রিভিউ সহ প্রক্রিয়াকরণ

Devices with the MONOCHROME capability ( CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES includes CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME ) supporting Y8 must support substituting YUV streams with Y8 in all guaranteed stream combinations.

s720p refers to 720p (1280 x 720) or the maximum supported resolution for the particular format returned by StreamConfigurationMap.getOutputSizes() . s1440p 1440p (1920 x 1440) বা StreamConfigurationMap.getOutputSizes() দ্বারা প্রত্যাবর্তিত নির্দিষ্ট বিন্যাসের জন্য সর্বাধিক সমর্থিত রেজোলিউশনকে বোঝায়। Devices whose capabilities don't include ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE must support at least a single Y16 stream, Dataspace::DEPTH with sVGA resolution, during concurrent operation, where sVGA is the smaller of the two following resolutions:

  • প্রদত্ত বিন্যাসের জন্য সর্বোচ্চ আউটপুট রেজোলিউশন
  • 640 x 480

বাস্তবায়ন

To allow apps to query a device to determine if its cameras support concurrent streaming, implement the ICameraProvider@2.6 HAL interface, which includes the following methods:

ICameraProvider@2.6 HAL ইন্টারফেসের একটি রেফারেন্স বাস্তবায়নের জন্য, EmulatedCameraProviderHWLImpl.cpp এ অনুকরণ করা ক্যামেরা HAL লাইব্রেরি দেখুন।

বৈধতা

To test that your implementation of this feature works as intended, use the ConcurrentCameraTest.java CTS test. এছাড়াও, একটি অ্যাপ ব্যবহার করে পরীক্ষা করুন যা একাধিক ক্যামেরা খোলে এবং সেগুলিকে একযোগে পরিচালনা করে।

সম্পদ বরাদ্দ সমস্যা

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

উদাহরণ দৃশ্যকল্প

নিম্নলিখিত দৃশ্যকল্প এই সমস্যা প্রদর্শন করে.

সমস্যা

ডিভাইসের নিম্নলিখিত কনফিগারেশন আছে:

  • Camera ID 0 is a logical camera backed by a wide and ultra-wide camera, which each take one ISP resource.
  • Camera ID 1 is a camera which takes one ISP resource.

ডিভাইসে (ফোন) দুটি আইএসপি রয়েছে। If camera ID 0 is opened and a session is configured, it's possible that the camera HAL reserves two ISPs anticipating both ultrawide and wide camera use.

If that's the case, the front camera (ID 1 ) can't configure any streams because both ISPs are in use.

সমাধান

To address this problem, the framework can open both camera IDs 0 and 1 before configuring sessions to provide a hint to the camera HAL about how to allocate resources (because it now expects concurrent operation of cameras). যাইহোক, এটি সীমিত ক্ষমতার দিকে নিয়ে যেতে পারে, উদাহরণস্বরূপ, জুম সম্পূর্ণ জুম পরিসরের অনুপাত পরিচালনা করতে সক্ষম নাও হতে পারে (কারণ ফিজিক্যাল ক্যামেরা আইডি পরিবর্তন করা সমস্যাযুক্ত হতে পারে)।

এই সমাধানটি বাস্তবায়ন করতে, provider@2.6::ICameraProvider::getConcurrentCameraStreamingCameraIds এ নিম্নলিখিত আপডেটগুলি করুন।

  • ম্যান্ডেট যে ক্যামেরার একযোগে অপারেশনের জন্য, ক্যামেরা ডিভাইসে যেকোনো সেশন কনফিগার করার আগে ক্যামেরা ফ্রেমওয়ার্ককে অবশ্যই ক্যামেরা ডিভাইস ( @3.2::ICameraDevice::open ) খুলতে হবে। এটি ক্যামেরা প্রদানকারীদের সেই অনুযায়ী সম্পদ বরাদ্দ করতে দেয়।

  • To address the issue of not being able to handle the full zoom range ratio, ensure that camera apps, when using cameras concurrently, are guaranteed to use the ZOOM_RATIO control setting between only 1x and MAX_DIGITAL_ZOOM instead of the complete ZOOM_RATIO_RANGE (this prevents the switching of অভ্যন্তরীণভাবে ফিজিক্যাল ক্যামেরা, যার জন্য সম্ভাব্য আরও আইএসপি প্রয়োজন)।

testDualCameraPreview এর সাথে সমস্যা

আপনি যখন উপরের আপডেটগুলি করেন, তখন এটি MultiViewTest.java#testDualCameraPreview পরীক্ষা দ্বারা অনুমোদিত আচরণের সাথে একটি সমস্যা তৈরি করতে পারে।

The test testDualCameraPreview doesn't configure sessions only after opening all cameras. এটি এই ক্রম অনুসরণ করে:

for each camera  in cameraDevices :
  device = openCamera(camera)
     createCaptureSession(device);

তবে এটি ERROR_MAX_CAMERAS_IN_USE [1] এর সাথে ক্যামেরা খোলা ব্যর্থতা সহ্য করে। তৃতীয় পক্ষের অ্যাপ এই আচরণের উপর নির্ভর করতে পারে।

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

এই সমস্যাটি মোকাবেলা করার জন্য, সমসাময়িক স্ট্রিমিংকে সমর্থন করার পাশাপাশি পিছনের দিকে সামঞ্জস্য বজায় রাখা, ক্যামেরা HALগুলিকে ERROR_MAX_CAMERAS_IN_USE সাথে openCamera কলগুলি ব্যর্থ করা উচিত যদি তারা একসাথে চলমান সমস্ত ক্যামেরার জন্য সম্পূর্ণ স্ট্রিম কনফিগারেশন সমর্থন করতে না পারে৷