অ্যাপাচি লাইসেন্স, সংস্করণ ২.০ ("লাইসেন্স")-এর অধীনে লাইসেন্সপ্রাপ্ত; আপনি লাইসেন্সের শর্তাবলী মেনে চলা ব্যতীত এই ফাইলটি ব্যবহার করতে পারবেন না। আপনি এখানে লাইসেন্সের একটি অনুলিপি পেতে পারেন।
http://www.apache.org/licenses/LICENSE-2.0
প্রযোজ্য আইন দ্বারা আবশ্যক না হলে বা লিখিতভাবে সম্মত না হলে, লাইসেন্সের অধীনে বিতরণ করা সফ্টওয়্যারটি কোনো প্রকারের, প্রকাশ্য বা উহ্য, ওয়ারেন্টি বা শর্ত ছাড়াই "যেমন আছে" ভিত্তিতে বিতরণ করা হয়। লাইসেন্সের অধীনে নির্দিষ্ট ভাষা পরিচালনাকারী অনুমতি এবং সীমাবদ্ধতার জন্য লাইসেন্সটি দেখুন।
অ্যান্ড্রয়েড প্ল্যাটফর্ম স্ট্যান্ডার্ড অ্যান্ড্রয়েড ক্যামেরা২ এপিআই এবং ক্যামেরা এইচএএল ইন্টারফেস ব্যবহার করে প্লাগ-এন্ড-প্লে ইউএসবি ক্যামেরা (অর্থাৎ, ওয়েবক্যাম) ব্যবহার সমর্থন করে। ওয়েবক্যামগুলো সাধারণত ইউএসবি ভিডিও ক্লাস (ইউভিসি) ড্রাইভার সমর্থন করে এবং লিনাক্সে ইউভিসি ক্যামেরা নিয়ন্ত্রণ করার জন্য স্ট্যান্ডার্ড ভিডিও৪লিনাক্স (ভি৪এল) ড্রাইভার ব্যবহার করা হয়।
ওয়েবক্যাম সমর্থনের মাধ্যমে, ডিভাইসগুলো ভিডিও চ্যাটিং এবং ফটো কিয়স্কের মতো সাধারণ কাজে ব্যবহার করা যেতে পারে। এই ফিচারটি অ্যান্ড্রয়েড ফোনের সাধারণ অভ্যন্তরীণ ক্যামেরা HAL-কে প্রতিস্থাপন করে না এবং এটি উচ্চ-রেজোলিউশন ও উচ্চ-গতির স্ট্রিমিং, AR, এবং ম্যানুয়াল ISP/সেন্সর/লেন্স নিয়ন্ত্রণের মতো পারফরম্যান্স-নিবিড় ও জটিল কাজ সমর্থন করার জন্য ডিজাইন করা হয়নি।
ইউএসবি ক্যামেরা এইচএএল (HAL) প্রসেসটি এক্সটার্নাল ক্যামেরা প্রোভাইডারের একটি অংশ, যা ইউএসবি ডিভাইসের প্রাপ্যতা পর্যবেক্ষণ করে এবং সেই অনুযায়ী এক্সটার্নাল ক্যামেরা ডিভাইসগুলোকে তালিকাভুক্ত করে। এই প্রসেসটির পারমিশন এবং একটি এসই (SE) পলিসি রয়েছে, যা বিল্ট-ইন ক্যামেরা এইচএএল প্রসেসের মতোই। থার্ড-পার্টি ওয়েবক্যাম অ্যাপ, যেগুলো সরাসরি ইউএসবি ডিভাইসের সাথে যোগাযোগ করে, সেগুলোর ইউভিসি (UVC) ডিভাইস অ্যাক্সেস করার জন্য যেকোনো সাধারণ ক্যামেরা অ্যাপের মতোই একই ক্যামেরা পারমিশনের প্রয়োজন হয়।
উদাহরণ এবং উৎস
ইউএসবি ক্যামেরা কীভাবে প্রয়োগ করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, ExternalCameraProvider এ থাকা এক্সটার্নাল ক্যামেরা প্রোভাইডার রেফারেন্স ইমপ্লিমেন্টেশনটি দেখুন। এক্সটার্নাল ক্যামেরা ডিভাইস এবং সেশন ইমপ্লিমেন্টেশনগুলো ExternalCameraDevice এবং ExternalCameraDeviceSession এর অন্তর্ভুক্ত। এপিআই লেভেল ২৮ থেকে শুরু করে, জাভা ক্লায়েন্ট এপিআই-তে EXTERNAL হার্ডওয়্যার লেভেল অন্তর্ভুক্ত রয়েছে।
বাস্তবায়ন
বাস্তবায়নটিকে অবশ্যই android.hardware.usb.host সিস্টেম ফিচারটি সমর্থন করতে হবে।
UVC ডিভাইসের জন্য কার্নেল সাপোর্টও সক্রিয় করতে হবে। সংশ্লিষ্ট কার্নেল defconfig ফাইলগুলিতে নিম্নলিখিতটি যোগ করে আপনি এটি সক্রিয় করতে পারেন।
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_MEDIA_USB_SUPPORT=y
সংশ্লিষ্ট ডিভাইস বিল্ডে এক্সটার্নাল ক্যামেরা প্রোভাইডার সক্রিয় করতে, যা প্রয়োজনীয় SELinux পারমিশন, এক্সটার্নাল ক্যামেরা কনফিগারেশন এবং এক্সটার্নাল ক্যামেরা প্রোভাইডার ডিপেন্ডেন্সি যোগ করে, নিম্নলিখিত ধাপগুলি সম্পন্ন করুন:
device.mkতে এক্সটার্নাল ক্যামেরা কনফিগারেশন ফাইল এবং এক্সটার্নাল ক্যামেরা লাইব্রেরি যোগ করুন।+PRODUCT_PACKAGES += android.hardware.camera.provider-V1-external-service +PRODUCT_COPY_FILES += \ +device/manufacturerX/productY/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xmlডিভাইসের Treble HAL ম্যানিফেস্টে বাহ্যিক ক্যামেরা প্রদানকারীর নামটি যোগ করুন।
<hal format="aidl"> <name>android.hardware.camera.provider</name> <version>1</version> <interface> <name>ICameraProvider</name> <instance>internal/0</instance> + <instance>external/0</instance> </interface> </hal>(ঐচ্ছিক) যদি ডিভাইসটি ট্রেবল পাসথ্রু মোডে চলে, তাহলে
sepolicyআপডেট করুন যাতেcameraserverUVC ক্যামেরাটি অ্যাক্সেস করতে পারে।+# for external camera +allow cameraserver device:dir r_dir_perms; +allow cameraserver video_device:dir r_dir_perms; +allow cameraserver video_device:chr_file rw_file_perms;
এখানে external_camera_config.xml এর একটি উদাহরণ দেওয়া হলো (কপিরাইট লাইনগুলো বাদ দেওয়া হয়েছে)।
<ExternalCamera> <Provider> <ignore> <!-- Internal video devices to be ignored by external camera HAL --> <id>0</id> <!-- No leading/trailing spaces --> <id>1</id> </ignore> </Provider> <!-- See ExternalCameraUtils.cpp for default values of Device configurations below --> <Device> <!-- Max JPEG buffer size in bytes--> <MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) --> <!-- Size of v4l2 buffer queue when streaming >= 30fps --> <!-- Larger value: more request can be cached pipeline (less janky) --> <!-- Smaller value: use less memory --> <NumVideoBuffers count="4"/> <!-- Size of v4l2 buffer queue when streaming < 30fps --> <NumStillBuffers count="2"/> <!-- List of maximum fps for various output sizes --> <!-- Any image size smaller than the size listed in Limit row will report fps (as minimum frame duration) up to the fpsBound value. --> <FpsList> <!-- width/height must be increasing, fpsBound must be decreasing--> <Limit width="640" height="480" fpsBound="30.0"/> <Limit width="1280" height="720" fpsBound="15.0"/> <Limit width="1920" height="1080" fpsBound="10.0"/> <!-- image size larger than the last entry will not be supported--> </FpsList> </Device> </ExternalCamera>
কাস্টমাইজেশন
আপনি সাধারণ কাস্টমাইজেশন অপশন অথবা ডিভাইস-নির্দিষ্ট অপটিমাইজেশনের মাধ্যমে অ্যান্ড্রয়েড ক্যামেরার মান উন্নত করতে পারেন।
সাধারণ কাস্টমাইজেশন
আপনি external_camera_config.xml ফাইলটি পরিবর্তন করে এক্সটার্নাল ক্যামেরা প্রোভাইডারকে কাস্টমাইজ করতে পারেন। বিশেষত, ক্লায়েন্টরা নিম্নলিখিত প্যারামিটারগুলো কাস্টমাইজ করতে পারে:
- অভ্যন্তরীণ ক্যামেরার ভিডিও নোডগুলি বাদ দিয়ে
- সমর্থিত ছবির আকার এবং ফ্রেম রেটের সর্বোচ্চ সীমা
- ইনফ্লাইট বাফারের সংখ্যা (জ্যাঙ্ক বনাম মেমরি ট্রেডঅফ)
এই প্যারামিটারগুলো ছাড়াও, আপনি আপনার নিজস্ব প্যারামিটার যোগ করতে পারেন অথবা নিজের কনফিগারেশন তৈরি করতে পারেন।
ডিভাইস-নির্দিষ্ট অপ্টিমাইজেশন
এছাড়াও আপনি ডিভাইস-নির্দিষ্ট অপ্টিমাইজেশন যোগ করে পারফরম্যান্স উন্নত করতে পারেন।
বাফার কপি/স্কেলিং এবং JPEG ডিকোড/এনকোড
জেনেরিক ইমপ্লিমেন্টেশনগুলো সিপিইউ (libyuv/libjpeg) ব্যবহার করে, কিন্তু আপনি এটিকে ডিভাইস-নির্দিষ্ট অপটিমাইজেশন দিয়ে প্রতিস্থাপন করতে পারেন।
HAL আউটপুট ফরম্যাট
জেনেরিক বাস্তবায়নগুলো নিম্নলিখিত আউটপুট ফরম্যাটগুলো ব্যবহার করে:
- ভিডিও
IMPLEMENTATION_DEFINEDবাফারগুলির জন্যYUV_420_888 - অন্যান্য সকল
IMPLEMENTATION_DEFINEDবাফারের জন্যYUV12
পারফরম্যান্স উন্নত করতে, আপনি আউটপুট ফরম্যাটগুলোকে ডিভাইস-নির্দিষ্ট কার্যকর ফরম্যাট দিয়ে প্রতিস্থাপন করতে পারেন। এছাড়াও, একটি কাস্টমাইজড বাস্তবায়নের মাধ্যমে আপনি অতিরিক্ত ফরম্যাট সমর্থন করতে পারেন।
বৈধতা
যেসব ডিভাইসে এক্সটার্নাল ক্যামেরা সাপোর্ট আছে, সেগুলোকে অবশ্যই ক্যামেরা CTS পাস করতে হবে। সম্পূর্ণ টেস্ট রান চলাকালীন এক্সটার্নাল ইউএসবি ওয়েবক্যামটি নির্দিষ্ট ডিভাইসে প্লাগইন করা থাকতে হবে, অন্যথায় কিছু টেস্ট কেস ব্যর্থ হবে।