আপনি একাধিক ক্লায়েন্টকে একই সাথে একটি ক্যামেরা অ্যাক্সেস করতে সক্ষম করতে পারেন। এটি করার জন্য, সিস্টেম ক্যামেরা ক্লায়েন্টগুলিতে অ্যাক্সেস ভাগ করে নিতে এই পৃষ্ঠায় বর্ণিত জাভা এবং অ্যান্ড্রয়েড এনডিকে সিস্টেম এপিআই ব্যবহার করুন।
প্রাথমিক ক্লায়েন্ট: শেয়ার্ড ক্লায়েন্টদের মধ্যে সর্বোচ্চ অগ্রাধিকারপ্রাপ্ত ক্লায়েন্ট। একটি প্রাথমিক ক্লায়েন্ট ক্যাপচার অনুরোধ তৈরি করতে এবং ক্যাপচার প্যারামিটার পরিবর্তন করতে পারে।
সেকেন্ডারি ক্লায়েন্ট: অন্যান্য সকল শেয়ার্ড ক্লায়েন্টই সেকেন্ডারি ক্লায়েন্ট। সেকেন্ডারি ক্লায়েন্টরা ক্যাপচার অনুরোধ তৈরি করতে পারে না বা ক্যাপচার প্যারামিটার পরিবর্তন করতে পারে না। সেকেন্ডারি ক্লায়েন্টরা কেবল স্ট্রিমিং শুরু বা বন্ধ করার জন্য অনুরোধ পাঠাতে পারে।
স্ট্রিমিংয়ের জন্য, ক্যামেরা পরিষেবা প্রিভিউ টেমপ্লেটের জন্য ডিফল্ট ক্যাপচার অনুরোধ প্যারামিটার ব্যবহার করে। যদি প্রাথমিক ক্লায়েন্ট স্ট্রিমিং করে, তাহলে পরিষেবাটি প্রাথমিক ক্লায়েন্ট দ্বারা নির্দিষ্ট ক্যাপচার অনুরোধ প্যারামিটার ব্যবহার করে।
একটি শেয়ার্ড সেশন কনফিগার করুন
একটি ক্যামেরা ডিভাইস শেয়ার করতে, /system_ext/etc/ এ অবস্থিত shared_session_config.xml ফাইলে শেয়ার করা সেশন কনফিগারেশন প্রদান করুন। এই কোড নমুনায়, ক্যামেরা আইডি 0 দুটি স্ট্রিম, ImageReader এবং SurfaceView সহ একটি কনফিগারেশন সহ ক্যামেরা শেয়ারিং সমর্থন করে।
<SharedCameraSessionConfigurations colorSpace="-1">
<!-- colorSpace: ANDROID_REQUEST_AVAILABLE_COLOR_SPACE_PROFILES_MAP_UNSPECIFIED -->
<SharedCameraSessionConfiguration cameraId="0">
<!-- First OutputConfiguration: All optional fields are provided -->
<OutputConfiguration>
<!-- surfaceType: SURFACE_TYPE_IMAGE_READER -->
<surfaceType>4</surfaceType>
<width>1920</width>
<height>1080</height>
<!-- physicalCameraId is omitted; defaults to "" -->
<!-- streamUseCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT -->
<streamUseCase>0</streamUseCase>
<!-- timestampBase: TIMESTAMP_BASE_DEFAULT -->
<timestampBase>0</timestampBase>
<!-- mirrorMode: MIRROR_MODE_AUTO -->
<mirrorMode>0</mirrorMode>
<useReadoutTimestamp>0</useReadoutTimestamp>
<!-- format: HAL_PIXEL_FORMAT_RGBA_8888 -->
<format>1</format>
<!-- usage: AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN -->
<usage>3</usage>
<!-- dataSpace: HAL_DATASPACE_UNKNOWN -->
<dataSpace>0</dataSpace>
</OutputConfiguration>
<!-- Second OutputConfiguration: All optional fields are provided -->
<OutputConfiguration>
<!-- surfaceType: SURFACE_TYPE_SURFACE_VIEW -->
<surfaceType>0</surfaceType>
<width>1920</width>
<height>1080</height>
<!-- physicalCameraId is omitted; defaults to "" -->
<!-- streamUseCase: ANDROID_SCALER_AVAILABLE_STREAM_USE_CASES_DEFAULT -->
<streamUseCase>0</streamUseCase>
<!-- timestampBase: TIMESTAMP_BASE_DEFAULT -->
<timestampBase>0</timestampBase>
<!-- mirrorMode: MIRROR_MODE_AUTO -->
<mirrorMode>0</mirrorMode>
<useReadoutTimestamp>0</useReadoutTimestamp>
<!-- format: HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED -->
<format>34</format>
<!-- usage: AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE|AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY -->
<usage>256|2048</usage>
<!-- dataSpace: HAL_DATASPACE_UNKNOWN -->
<dataSpace>0</dataSpace>
</OutputConfiguration>
</SharedCameraSessionConfiguration>
</SharedCameraSessionConfigurations>
একটি শেয়ার্ড সেশন কনফিগারেশন জিজ্ঞাসা করতে, ক্লায়েন্টরা SHARED_SESSION_CONFIGURATION এর জন্য CameraCharacteristics ব্যবহার করে। যে ক্লায়েন্টরা শেয়ার্ড মোডে ক্যামেরা অ্যাক্সেস করে তাদের অবশ্যই শেয়ার্ড সেশন কনফিগারেশন ব্যবহার করতে হবে। যখন কোনও ক্লায়েন্ট দ্বারা পাস করা সেশন কনফিগারেশন শেয়ার্ড সেশন কনফিগারেশনের সাথে মেলে না, তখন একটি createCaptureSession কল ব্যর্থ হয়।
জাভা এপিআই
CameraManager এবং CameraDevice শেয়ার্ড মোডে ক্যামেরা খোলার জন্য API প্রদান করে।
ক্যামেরা ম্যানেজার API গুলি
CameraManager এই API গুলি প্রদান করে:
isCameraDeviceSharingSupported: ক্যামেরা শেয়ার্ড মোড সমর্থন করে কিনা তা নির্ধারণ করতে ক্লায়েন্টরা এই API ব্যবহার করে।openSharedCamera: যদি কোনও ক্যামেরা শেয়ার্ড মোড সমর্থন করে, তাহলে ক্লায়েন্টরা শেয়ার্ড মোডে ক্যামেরাটি খুলতে এই API ব্যবহার করে।
ক্যামেরাডিভাইস.স্টেটকলব্যাক এপিআই
CameraDevice.StateCallback এই API গুলি প্রদান করে:
onOpenedInSharedMode: ক্যামেরাটি শেয়ার্ড মোডে খোলা হলে ক্লায়েন্টরা এই কলব্যাকটি গ্রহণ করে। কলব্যাকটি নির্দেশ করে যে ক্লায়েন্টটি প্রাথমিক নাকি সেকেন্ডারি ক্লায়েন্ট।onClientSharedAccessPriorityChanged: যখন একটি শেয়ার্ড সেশন খোলা হয়, তখন এই কলব্যাকটি ট্রিগার হয় যখন একটি ক্লায়েন্টের অগ্রাধিকার পরিবর্তন করা হয় কারণ একটি উচ্চ অগ্রাধিকার ক্লায়েন্ট একই ক্যামেরা খুলেছে বা বন্ধ করেছে।
ক্যামেরাশেয়ার্ডক্যাপচারসেশন
CameraSharedCaptureSession ক্লাসটি একটি শেয়ার্ড ক্যাপচার সেশন উপস্থাপন করে। শেয়ার্ড ক্যামেরা মোডে, যে ক্লায়েন্ট একটি সেশন তৈরি করে তাকে অবশ্যই SESSION_SHARED সেশন টাইপ ব্যবহার করতে হবে।
যখন সিস্টেম একটি সেশন তৈরি করে, তখন CameraCaptureSession CameraSharedCaptureSession এ কাস্ট করুন।
সেকেন্ডারি ক্লায়েন্টরা createCaptureRequest ব্যবহার করতে পারবে না। পরিবর্তে, সেকেন্ডারি ক্লায়েন্টরা নির্দিষ্ট সারফেসে স্ট্রিমিং শুরু করতে startStreaming API এবং স্ট্রিমিং বন্ধ করতে stopStreaming API ব্যবহার করে।
অ্যান্ড্রয়েড এনডিকে এপিআই
বিল্ট-ইন অ্যাপগুলি শেয়ার্ড মোডে ক্যামেরা খোলার জন্য এই Android NDK API গুলি ব্যবহার করে:
-
ACameraManager_isCameraDeviceSharingSupported -
ACameraManager_openSharedCamera -
ACameraCaptureSessionShared_startStreaming -
ACameraCaptureSessionShared_logicalCamera_startStreaming -
ACameraCaptureSessionShared_stopStreaming -
ACameraDevice_ClientSharedAccessPriorityChangedCallback -
onClientSharedAccessPriorityChanged
শেয়ার করা ক্যামেরা পরীক্ষা করুন
মাল্টি-ক্লায়েন্ট ক্যামেরার জন্য নির্দিষ্ট এই পরীক্ষাগুলি দেখুন:
ভেন্ডর টেস্ট স্যুট (VTS) :
VtsAidlCameraServiceTargetTestএSharedCameraTestদেখুনসামঞ্জস্যতা পরীক্ষা স্যুট (CTS) :
CtsCameraTestCasesএandroid.hardware.multiprocess.camera.cts.SharedCameraTestদেখুন।
বিধিনিষেধ
শেয়ার্ড ক্যামেরা মোড এই বিকল্পগুলি সমর্থন করে না :
- বার্স্ট ক্যাপচারের অনুরোধ
- এক্সটেনশন সেশন
- উচ্চ-গতির সেশন
- অফলাইন সেশন
- পৃষ্ঠ ভাগাভাগি সহ
OutputConfiguration - পুনঃপ্রক্রিয়াযোগ্য ক্যাপচার সেশন
- তৃতীয় পক্ষের অ্যাপ
যখন একটি উচ্চতর অগ্রাধিকার ক্লায়েন্ট স্বাভাবিক মোডে একটি ক্যামেরা খোলে, তখন সিস্টেমটি সমস্ত শেয়ার্ড ক্যামেরা ক্লায়েন্টকে বের করে দেয়।