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

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

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

বাধ্যতামূলক স্ট্রিম কম্বিনেশনের একটি সেট যা সমসাময়িক স্ট্রিমিংয়ের সময় সমর্থিত হওয়া আবশ্যক একটি ক্যামেরা ডিভাইসের ক্যামেরা বৈশিষ্ট্যগুলির মাধ্যমে SCALER_MANDATORY_CONCURRENT_STREAM_COMBINATIONS বৈশিষ্ট্যে অন্তর্ভুক্ত করা হয়েছে৷

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

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

MONOCHROME সক্ষমতার সাথে ডিভাইসগুলি ( CameraCharacteristics#REQUEST_AVAILABLE_CAPABILITIES মধ্যে রয়েছে CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME ) Y8 সমর্থনকারী সমস্ত কমবিন স্ট্রীম গ্যারান্টিযুক্ত Y8 এর সাথে YUV স্ট্রীম প্রতিস্থাপন করতে হবে।

s720p 720p (1280 x 720) বা StreamConfigurationMap.getOutputSizes() দ্বারা প্রত্যাবর্তিত নির্দিষ্ট বিন্যাসের জন্য সর্বাধিক সমর্থিত রেজোলিউশনকে বোঝায়। s1440p 1440p (1920 x 1440) বা StreamConfigurationMap.getOutputSizes() দ্বারা প্রত্যাবর্তিত নির্দিষ্ট বিন্যাসের জন্য সর্বাধিক সমর্থিত রেজোলিউশনকে বোঝায়। যেসব ডিভাইসের ক্ষমতা ANDROID_REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE অন্তর্ভুক্ত করে না তাদের অবশ্যই কমপক্ষে একটি Y16 স্ট্রীম, Dataspace::DEPTH সহ sVGA রেজোলিউশন সহ সমসাময়িক অপারেশনের সময় সমর্থন করতে হবে, যেখানে sVGA নিম্নলিখিত দুটি রেজোলিউশনের মধ্যে ছোট:

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

বাস্তবায়ন

একটি ডিভাইসের ক্যামেরা সমসাময়িক স্ট্রিমিং সমর্থন করে কিনা তা নির্ধারণ করতে অ্যাপগুলিকে জিজ্ঞাসা করার অনুমতি দিতে, ICameraProvider@2.6 HAL ইন্টারফেস প্রয়োগ করুন, যার মধ্যে নিম্নলিখিত পদ্ধতিগুলি অন্তর্ভুক্ত রয়েছে:

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

বৈধতা

এই বৈশিষ্ট্যটি আপনার বাস্তবায়নের উদ্দেশ্য অনুযায়ী কাজ করে কিনা তা পরীক্ষা করতে, ConcurrentCameraTest.java CTS পরীক্ষা ব্যবহার করুন। এছাড়াও, একটি অ্যাপ ব্যবহার করে পরীক্ষা করুন যা একাধিক ক্যামেরা খোলে এবং সেগুলিকে একযোগে পরিচালনা করে।

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

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

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

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

সমস্যা

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

  • ক্যামেরা আইডি 0 হল একটি লজিক্যাল ক্যামেরা যা একটি প্রশস্ত এবং আল্ট্রা-ওয়াইড ক্যামেরা দ্বারা সমর্থিত, যেটি প্রতিটি একটি আইএসপি রিসোর্স নেয়।
  • ক্যামেরা আইডি 1 হল একটি ক্যামেরা যা একটি আইএসপি রিসোর্স নেয়।

ডিভাইসে (ফোন) দুটি আইএসপি রয়েছে। যদি ক্যামেরা আইডি 0 খোলা হয় এবং একটি সেশন কনফিগার করা হয়, তাহলে এটা সম্ভব যে ক্যামেরা HAL দুটি আইএসপি রিজার্ভ করে আল্ট্রাওয়াইড এবং ওয়াইড ক্যামেরা ব্যবহারের জন্য।

যদি তা হয়, সামনের ক্যামেরা (আইডি 1 ) কোনো স্ট্রিম কনফিগার করতে পারে না কারণ উভয় ISP ব্যবহার করা হচ্ছে।

সমাধান

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

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

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

  • সম্পূর্ণ জুম পরিসরের অনুপাত পরিচালনা করতে না পারার সমস্যাটি মোকাবেলা করার জন্য, নিশ্চিত করুন যে ক্যামেরা অ্যাপগুলি একসাথে ক্যামেরা ব্যবহার করার সময়, সম্পূর্ণ ZOOM_RATIO_RANGE এর পরিবর্তে শুধুমাত্র 1x এবং MAX_DIGITAL_ZOOM এর মধ্যে ZOOM_RATIO নিয়ন্ত্রণ সেটিং ব্যবহার করার নিশ্চয়তা রয়েছে (এটি স্যুইচিং প্রতিরোধ করে অভ্যন্তরীণভাবে ফিজিক্যাল ক্যামেরা, যার জন্য সম্ভাব্য আরও আইএসপি প্রয়োজন)।

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

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

টেস্ট testDualCameraPreview সমস্ত ক্যামেরা খোলার পরেই সেশন কনফিগার করে না। এটি এই ক্রম অনুসরণ করে:

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

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

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

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