আউটপুট স্ট্রিম
ক্যামেরা সাবসিস্টেমটি সমস্ত রেজোলিউশন এবং আউটপুট ফরম্যাটের জন্য শুধুমাত্র ANativeWindow-ভিত্তিক পাইপলাইনে কাজ করে। একটি একক ফ্রেমকে GPU, ভিডিও এনকোডার, RenderScript , বা অ্যাপে দৃশ্যমান বাফার (RAW Bayer, প্রসেস করা YUV বাফার, বা JPEG-এনকোডেড বাফার)-এর মতো বিভিন্ন টার্গেটে পাঠানোর জন্য একই সময়ে একাধিক স্ট্রিম কনফিগার করা যেতে পারে।
অপ্টিমাইজেশনের অংশ হিসেবে, এই আউটপুট স্ট্রিমগুলো আগে থেকেই কনফিগার করা আবশ্যক, এবং একবারে কেবল সীমিত সংখ্যকই চালু থাকতে পারে। এর ফলে মেমরি বাফার আগে থেকে বরাদ্দ করা এবং ক্যামেরা হার্ডওয়্যার কনফিগার করা সম্ভব হয়, যাতে একাধিক বা ভিন্ন ভিন্ন আউটপুট পাইপলাইন তালিকাভুক্ত করে অনুরোধ জমা দেওয়া হলে, সেই অনুরোধ পূরণে কোনো বিলম্ব বা ল্যাটেন্সি না হয়।
সমর্থিত হার্ডওয়্যার স্তরের উপর নির্ভরশীল নিশ্চিত স্ট্রিম আউটপুট সংমিশ্রণ সম্পর্কে আরও তথ্যের জন্য, createCaptureSession() দেখুন।
ফসল উৎপাদন
সম্পূর্ণ পিক্সেল অ্যারের ক্রপিং (ডিজিটাল জুম এবং অন্যান্য ব্যবহারের ক্ষেত্রে যেখানে একটি ছোট FOV প্রয়োজন) ANDROID_SCALER_CROP_REGION সেটিংয়ের মাধ্যমে জানানো হয়। এটি একটি রিকোয়েস্ট-ভিত্তিক সেটিং এবং প্রতিটি রিকোয়েস্টের জন্য এটি পরিবর্তিত হতে পারে, যা মসৃণ ডিজিটাল জুম বাস্তবায়নের জন্য অত্যন্ত গুরুত্বপূর্ণ।
অঞ্চলটিকে একটি আয়তক্ষেত্র (x, y, প্রস্থ, উচ্চতা) হিসাবে সংজ্ঞায়িত করা হয়, যেখানে (x, y) আয়তক্ষেত্রটির উপরের-বাম কোণকে নির্দেশ করে। আয়তক্ষেত্রটি সেন্সরের সক্রিয় পিক্সেল অ্যারের স্থানাঙ্ক ব্যবস্থায় সংজ্ঞায়িত করা হয়, যেখানে (0,0) হলো সক্রিয় পিক্সেল অ্যারের উপরের-বাম পিক্সেল। অতএব, প্রস্থ এবং উচ্চতা ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY স্ট্যাটিক ইনফো ফিল্ডে উল্লিখিত মাত্রার চেয়ে বড় হতে পারে না। সর্বনিম্ন অনুমোদিত প্রস্থ এবং উচ্চতা HAL দ্বারা ANDROID_SCALER_MAX_DIGITAL_ZOOM স্ট্যাটিক ইনফো ফিল্ডের মাধ্যমে জানানো হয়, যা সর্বোচ্চ সমর্থিত জুম ফ্যাক্টর বর্ণনা করে। অতএব, সর্বনিম্ন ক্রপ অঞ্চলের প্রস্থ এবং উচ্চতা হলো:
{width, height} =
{ floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
ANDROID_SCALER_MAX_DIGITAL_ZOOM),
floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
ANDROID_SCALER_MAX_DIGITAL_ZOOM) }
যদি ক্রপ রিজিয়নকে নির্দিষ্ট কিছু শর্ত পূরণ করতে হয় (উদাহরণস্বরূপ, এটিকে জোড় স্থানাঙ্ক থেকে শুরু হতে হবে এবং এর প্রস্থ/উচ্চতা জোড় হতে হবে), তবে HAL-কে অবশ্যই প্রয়োজনীয় রাউন্ডিং করতে হবে এবং আউটপুট ফলাফলের মেটাডেটাতে ব্যবহৃত চূড়ান্ত ক্রপ রিজিয়নটি লিখে দিতে হবে। একইভাবে, যদি HAL ভিডিও স্টেবিলাইজেশন প্রয়োগ করে, তবে ভিডিও স্টেবিলাইজেশন প্রয়োগের পর আউটপুটে প্রকৃতপক্ষে অন্তর্ভুক্ত অঞ্চলটি বর্ণনা করার জন্য এটিকে অবশ্যই ফলাফলের ক্রপ রিজিয়নটি সামঞ্জস্য করতে হবে। সাধারণভাবে, একটি ক্যামেরা-ব্যবহারকারী অ্যাপকে অবশ্যই ক্রপ রিজিয়ন, ইমেজ সেন্সরের মাত্রা এবং লেন্সের ফোকাল লেংথের উপর ভিত্তি করে এটি যে ফিল্ড অফ ভিউ পাচ্ছে তা নির্ধারণ করতে সক্ষম হতে হবে।
যেহেতু ক্রপ রিজিয়নটি সমস্ত স্ট্রিমের জন্য প্রযোজ্য, যেগুলোর অ্যাস্পেক্ট রেশিও ক্রপ রিজিয়নের থেকে ভিন্ন হতে পারে, তাই প্রতিটি স্ট্রিমের জন্য ব্যবহৃত সুনির্দিষ্ট সেন্সর রিজিয়নটি ক্রপ রিজিয়নের চেয়ে ছোট হতে পারে। বিশেষত, প্রতিটি স্ট্রিমের উচিত নির্ধারিত ক্রপ রিজিয়নকে ন্যূনতমভাবে আরও ক্রপ করার মাধ্যমে তার বর্গাকার পিক্সেল এবং অ্যাস্পেক্ট রেশিও বজায় রাখা। যদি স্ট্রিমটির অ্যাস্পেক্ট রেশিও ক্রপ রিজিয়নের চেয়ে চওড়া হয়, তবে স্ট্রিমটিকে উল্লম্বভাবে আরও ক্রপ করা উচিত, এবং যদি স্ট্রিমটির অ্যাস্পেক্ট রেশিও ক্রপ রিজিয়নের চেয়ে সরু হয়, তবে স্ট্রিমটিকে আনুভূমিকভাবে আরও ক্রপ করা উচিত।
সকল ক্ষেত্রে, জলধারার ফসল অবশ্যই সম্পূর্ণ ফসল অঞ্চলের কেন্দ্রে অবস্থিত হতে হবে, এবং প্রতিটি জলধারায় সম্পূর্ণ ফসল অঞ্চলের সাপেক্ষে কেবল আনুভূমিকভাবে বা উল্লম্বভাবে ফসল চাষ করা হবে, কখনোই উভয়ভাবে নয়।
উদাহরণস্বরূপ, যদি দুটি স্ট্রিম সংজ্ঞায়িত করা হয়—একটি 640x480 স্ট্রিম (4:3 অ্যাস্পেক্ট) এবং একটি 1280x720 স্ট্রিম (16:9 অ্যাস্পেক্ট), তাহলে নিচে একটি কাল্পনিক 3 MP (2000 x 1500 পিক্সেল অ্যারে) সেন্সরে কয়েকটি নমুনা ক্রপ অঞ্চলের জন্য প্রতিটি স্ট্রিমের প্রত্যাশিত আউটপুট অঞ্চলগুলি দেখানো হয়েছে।
শস্য অঞ্চল: (৫০০, ৩৭৫, ১০০০, ৭৫০) (৪:৩ আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (৫০০, ৩৭৫, ১০০০, ৭৫০) (ফসল অঞ্চলের সমান)
১২৮০x৭২০ স্ট্রিম ক্রপ: (৫০০, ৪৬৯, ১০০০, ৫৬২)

চিত্র ১. ৪:৩ আকৃতির অনুপাত
শস্য অঞ্চল: (৫০০, ৩৭৫, ১৩৩৩, ৭৫০) (১৬:৯ আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (৬৬৬, ৩৭৫, ১০০০, ৭৫০)
১২৮০x৭২০ স্ট্রিম ক্রপ: (৫০০, ৩৭৫, ১৩৩৩, ৭৫০) (ফসল অঞ্চলের সমান)

চিত্র ২. ১৬:৯ আকৃতির অনুপাত
শস্য অঞ্চল: (৫০০, ৩৭৫, ৭৫০, ৭৫০) (১:১ আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (৫০০, ৪৬৯, ৭৫০, ৫৬২)
১২৮০x৭২০ স্ট্রিম ক্রপ: (৫০০, ৫৪৩, ৭৫০, ৪১৪)

চিত্র ৩. ১:১ আকৃতির অনুপাত
এবং শেষ উদাহরণ হিসেবে, 480p স্ট্রিমের পরিবর্তে 1024x1024 বর্গাকার অ্যাসপেক্ট রেশিওর একটি স্ট্রিম:
শস্য অঞ্চল: (৫০০, ৩৭৫, ১০০০, ৭৫০) (৪:৩ আকৃতির অনুপাত)
১০২৪x১০২৪ স্ট্রিম ক্রপ: (৬২৫, ৩৭৫, ৭৫০, ৭৫০)
১২৮০x৭২০ স্ট্রিম ক্রপ: (৫০০, ৪৬৯, ১০০০, ৫৬২)

চিত্র ৪. ৪:৩ আকৃতি অনুপাত, বর্গক্ষেত্র
পুনঃপ্রক্রিয়াকরণ
RAW Bayer ডেটার জন্য রিপ্রসেসিং সাপোর্টের মাধ্যমে RAW ইমেজ ফাইলগুলির জন্য অতিরিক্ত সহায়তা প্রদান করা হয়। এই সাপোর্ট ক্যামেরা পাইপলাইনকে পূর্বে ধারণ করা একটি RAW বাফার এবং মেটাডেটা (আগে রেকর্ড করা একটি সম্পূর্ণ ফ্রেম) প্রসেস করে একটি নতুন রেন্ডার করা YUV বা JPEG আউটপুট তৈরি করতে সক্ষম করে।
জুম
অ্যান্ড্রয়েড ১১ বা তার পরবর্তী সংস্করণে চালিত ডিভাইসগুলোতে, কোনো অ্যাপ ANDROID_CONTROL_ZOOM_RATIO সেটিংয়ের মাধ্যমে ক্যামেরার জুম (ডিজিটাল এবং অপটিক্যাল) ব্যবহার করতে পারে।
জুম রেশিও একটি ফ্লোটিং পয়েন্ট ফ্যাক্টর হিসেবে সংজ্ঞায়িত করা হয়। ক্রপ এবং জুমের জন্য ANDROID_SCALER_CROP_REGION ব্যবহার করার পরিবর্তে, একটি অ্যাপ জুম লেভেল নিয়ন্ত্রণ করতে ANDROID_CONTROL_ZOOM_RATIO ব্যবহার করতে পারে এবং নেটিভ ক্যামেরা সেন্সরের থেকে ভিন্ন অ্যাস্পেক্ট রেশিও অর্জনের জন্য হরাইজন্টাল ও ভার্টিকাল ক্রপিংয়ের জন্য ANDROID_SCALER_CROP_REGION ব্যবহার করতে পারে।
একটি মাল্টি-ক্যামেরা সিস্টেমে বিভিন্ন ফোকাল দৈর্ঘ্যের একাধিক লেন্স থাকতে পারে এবং ব্যবহারকারী লেন্স পরিবর্তন করে অপটিক্যাল জুম ব্যবহার করতে পারেন। নিচের পরিস্থিতিগুলোতে ANDROID_CONTROL_ZOOM_RATIO ব্যবহারের সুবিধা রয়েছে:
- ওয়াইড লেন্স থেকে টেলিফটো লেন্সে জুম করার ক্ষেত্রে:
ANDROID_SCALER_CROP_REGIONএর পূর্ণসংখ্যার মানের তুলনায় ফ্লোটিং পয়েন্ট অনুপাত আরও ভালো নির্ভুলতা প্রদান করে। - ওয়াইড লেন্স থেকে আল্ট্রাওয়াইড লেন্সে জুম আউট করার ক্ষেত্রে:
ANDROID_CONTROL_ZOOM_RATIOজুম-আউট (<1.0f) সমর্থন করে, কিন্তুANDROID_SCALER_CROP_REGIONতা করে না।
জুম অনুপাত: ২.০; মূল দৃশ্যক্ষেত্রের ১/৪ অংশ
শস্য অঞ্চল: (0, 0, 2000, 1500) (4:3 আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (০, ০, ২০০০, ১৫০০) (ক্রপ অঞ্চলের সমান)
১২৮০x৭২০ স্ট্রিম ক্রপ: (০, ১৮৭, ২০০০, ১১২৫)

চিত্র ৫. ২.০ জুম, ৪:৩ অ্যাসপেক্ট রেশিও
জুম অনুপাত: ২.০; মূল দৃশ্যক্ষেত্রের ১/৪ অংশ
শস্য অঞ্চল: (0, 187, 2000, 1125) (16:9 আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (২৫০, ১৮৭, ১৫০০, ১১২৫) (পিলারবক্সড)
১২৮০x৭২০ স্ট্রিম ক্রপ: (০, ১৮৭, ২০০০, ১১২৫) (ক্রপ অঞ্চলের সমান)

চিত্র ৬. ২.০ জুম, ১৬:৯ অ্যাসপেক্ট রেশিও
জুম অনুপাত: ০.৫; মূল দৃশ্যক্ষেত্রের ৪ গুণ (ওয়াইড লেন্স থেকে আল্ট্রাওয়াইড লেন্সে পরিবর্তন করা হয়েছে)
শস্য অঞ্চল: (২৫০, ০, ১৫০০, ১৫০০) (১:১ আকৃতির অনুপাত)
৬৪০x৪৮০ স্ট্রিম ক্রপ: (২৫০, ১৮৭, ১৫০০, ১১২৫) (লেটারবক্সড)
১২৮০x৭২০ স্ট্রিম ক্রপ: (২৫০, ৩২৮, ১৫০০, ৮৪৪) (লেটারবক্সড)

চিত্র ৭. ০.৫ জুম, ১:১ অ্যাসপেক্ট রেশিও
উপরের গ্রাফগুলো থেকে যেমন দেখা যাচ্ছে, ক্রপ অঞ্চলের স্থানাঙ্ক ব্যবস্থা কার্যকর আফটার-জুম ফিল্ড অফ ভিউ-তে পরিবর্তিত হয় এবং এটি নিম্নলিখিত মাত্রা সহ একটি আয়তক্ষেত্র দ্বারা উপস্থাপিত হয়: ( 0 , 0 , activeArrayWith , activeArrayHeight )। একই নিয়ম AE/AWB/AF অঞ্চল এবং মুখমণ্ডলের ক্ষেত্রেও প্রযোজ্য। এই স্থানাঙ্ক ব্যবস্থার পরিবর্তন RAW ক্যাপচার এবং এর সম্পর্কিত মেটাডেটা যেমন intrinsicCalibration এবং lensShadingMap ক্ষেত্রে প্রযোজ্য নয়।
উপরের একই কাল্পনিক উদাহরণটি ব্যবহার করে, এবং আউটপুট স্ট্রিম #১ (৬৪০x৪৮০)-কে ভিউফাইন্ডার স্ট্রিম ধরে নিলে, ২.০x জুম দুটি উপায়ের একটিতে অর্জন করা যেতে পারে:
-
zoomRatio = 2.0,scaler.cropRegion = (0, 0, 2000, 1500) -
zoomRatio = 1.0(ডিফল্ট),scaler.cropRegion = (500, 375, 1000, 750)
কোনো অ্যাপের জন্য android.control.aeRegions ভিউফাইন্ডার ফিল্ড অফ ভিউ-এর উপরের-বাম চতুর্থাংশ হিসেবে সেট করতে, android.control.aeRegions 2.0 এর সাথে android.control.zoomRatio কে (0, 0, 1000, 750) -তে সেট করুন। বিকল্পভাবে, অ্যাপটি android.control.aeRegions 1.0 -এর জন্য android.control.zoomRatio কে এর সমতুল্য অঞ্চল (500, 375, 1000, 750) -তে সেট করতে পারে।