camera3_capture_result স্ট্রাকট রেফারেন্স
#include < camera3.h >
ডেটা ক্ষেত্র | |
uint32_t | ফ্রেম_সংখ্যা |
const camera_metadata_t * | ফলাফল |
uint32_t | সংখ্যা_আউটপুট_বাফার |
const camera3_stream_buffer_t * | আউটপুট_বাফার |
const camera3_stream_buffer_t * | ইনপুট_বাফার |
uint32_t | আংশিক_ফলাফল |
বিস্তারিত বিবরণ
camera3_capture_result_t:
ক্যামেরা HAL ডিভাইস দ্বারা একটি একক ক্যাপচার/পুনঃপ্রক্রিয়ার ফলাফল। এটি প্রক্রিয়া_ক্যাপচার_রেজাল্ট() এর সাথে অসিঙ্ক্রোনাসভাবে ফ্রেমওয়ার্কে পাঠানো হয়, প্রসেস_ক্যাপচার_রিকুয়েস্ট() সহ HAL-কে পাঠানো একটি একক ক্যাপচার অনুরোধের প্রতিক্রিয়া হিসাবে। প্রতিটি অনুরোধের জন্য HAL দ্বারা একাধিক প্রক্রিয়া_ক্যাপচার_রেজাল্ট() কল করা হতে পারে।
প্রতিটি কল, একই ফ্রেম নম্বর সহ, আউটপুট বাফারের কিছু উপসেট এবং/অথবা ফলাফল মেটাডেটা থাকতে পারে। একটি প্রদত্ত ফ্রেম নম্বরের জন্য মেটাডেটা শুধুমাত্র একবার প্রদান করা যেতে পারে; অন্য সব কলের ফলাফল মেটাডেটা NULL তে সেট করতে হবে।
ফলাফলের কাঠামোতে এই ক্যাপচার থেকে আউটপুট মেটাডেটা এবং এই ক্যাপচারের জন্য আউটপুট বাফারের সেট রয়েছে/ভরা হবে। প্রতিটি আউটপুট বাফার একটি রিলিজ সিঙ্ক বেড়া সহ আসতে পারে যা পড়ার আগে ফ্রেমওয়ার্কটি অপেক্ষা করবে, যদি বাফারটি এখনও HAL দ্বারা পূরণ করা না হয়।
>= CAMERA_DEVICE_API_VERSION_3_2:
একটি একক ফ্রেম নম্বরের জন্য মেটাডেটা একাধিকবার প্রদান করা হতে পারে। ফ্রেমওয়ার্ক প্রতিটি আংশিক ফলাফলকে মোট ফলাফল সেটে একত্রিত করে চূড়ান্ত ফলাফল সেটকে একত্রিত করবে।
যদি একটি ইনপুট বাফার একটি অনুরোধে দেওয়া হয়, HAL অবশ্যই এটিকে একটি process_capture_result কলে ফেরত দিতে হবে, এবং কলটি মেটাডেটা এবং আউটপুট বাফার ছাড়াই ইনপুট বাফার ফেরত দিতে হতে পারে; সিঙ্ক বেড়াগুলিকে আউটপুট বাফারগুলির জন্য যেভাবে করা হয় সেভাবে পরিচালনা করতে হবে।
কর্মক্ষমতা বিবেচনা:
অ্যাপ্লিকেশানগুলিও এই আংশিক ফলাফলগুলি অবিলম্বে পাবে, তাই পাইপলাইনে খুব প্রথম দিকে যা জানা যায় তার ফলাফলগুলি পাঠানোর আগে মোট পাইপলাইনের লেটেন্সি এড়াতে আংশিক ফলাফলগুলি প্রেরণ করা একটি অত্যন্ত প্রস্তাবিত কর্মক্ষমতা অপ্টিমাইজেশন৷
একটি সাধারণ ব্যবহারের ক্ষেত্রে পাইপলাইনের অর্ধেক পথ AF অবস্থা গণনা করা হতে পারে; রাষ্ট্রকে অবিলম্বে কাঠামোতে ফেরত পাঠানোর মাধ্যমে, আমরা একটি 50% কর্মক্ষমতা বৃদ্ধি এবং স্বয়ংক্রিয়-ফোকাসের অনুভূত প্রতিক্রিয়াশীলতা পাই।
ফিল্ড ডকুমেন্টেশন
uint32_t ফ্রেম_সংখ্যা |
ফ্রেম নম্বর হল একটি ক্রমবর্ধমান পূর্ণসংখ্যা যা এই ক্যাপচারটিকে অনন্যভাবে সনাক্ত করার জন্য জমা দেওয়া অনুরোধে ফ্রেমওয়ার্ক দ্বারা সেট করা হয়েছে। এটি camera3_callback_ops_t.notify() এ পাঠানো অ্যাসিঙ্ক্রোনাস বিজ্ঞপ্তিতে অনুরোধ সনাক্ত করতেও ব্যবহৃত হয়।
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
এই ক্যাপচারের জন্য ইনপুট স্ট্রিম বাফারের হ্যান্ডেল। HAL যখন process_capture_result(); বাফার পুনরায় ব্যবহার করার আগে ফ্রেমওয়ার্ক HAL দ্বারা প্রদত্ত রিলিজ সিঙ্ক বেড়ার জন্য অপেক্ষা করবে।
HAL-এর উচিত সিঙ্কের বেড়াগুলিকে একইভাবে পরিচালনা করা উচিত যেভাবে তারা output_buffers-এর জন্য করা হয়।
শুধুমাত্র একটি ইনপুট বাফার প্রতি অনুরোধ পাঠানোর অনুমতি দেওয়া হয়. একইভাবে আউটপুট বাফারের ক্ষেত্রে, রিটার্ন করা ইনপুট বাফারের ক্রম অবশ্যই এইচএএল দ্বারা বজায় রাখতে হবে।
কর্মক্ষমতা বিবেচনা:
যত তাড়াতাড়ি সম্ভব ইনপুট বাফার ফেরত দেওয়া উচিত। যদি HAL সিঙ্ক বেড়া সমর্থন করে, তবে এটি সঠিকভাবে সেট করা সিঙ্ক বেড়াগুলিকে ফিরিয়ে দেওয়ার জন্য process_capture_result কল করতে পারে। যদি সিঙ্ক বেড়াগুলি সমর্থিত না হয়, বাফারটি শুধুমাত্র তখনই ফেরত দেওয়া যেতে পারে যখন এটি গ্রাস করা হয়, যা দীর্ঘ সময় নিতে পারে; HAL এই ইনপুট বাফারটি অনুলিপি করতে বেছে নিতে পারে যাতে বাফারটি তাড়াতাড়ি ফিরে আসে।
uint32_t num_output_buffers |
এই ফলাফল কাঠামোতে আউটপুট বাফারের সংখ্যা ফিরে এসেছে। ম্যাচিং ক্যাপচার অনুরোধের সংখ্যার চেয়ে কম বা সমান হতে হবে। যদি এটি ক্যাপচার অনুরোধে বাফার সংখ্যার চেয়ে কম হয়, তবে বাকি আউটপুট বাফারগুলিকে ফ্রেমওয়ার্কে ফেরত দেওয়ার জন্য একই ফ্রেম_নম্বর সহ প্রক্রিয়া_ক্যাপচার_রিসাল্টে কমপক্ষে আরও একটি কল করতে হবে। এটি শুধুমাত্র শূন্য হতে পারে যদি কাঠামোতে বৈধ ফলাফলের মেটাডেটা অন্তর্ভুক্ত থাকে বা এই ফলাফলে একটি ইনপুট বাফার ফেরত দেওয়া হয়।
const camera3_stream_buffer_t * output_buffers |
এই ক্যাপচারের জন্য আউটপুট স্ট্রিম বাফারের জন্য হ্যান্ডেলগুলি। HAL যখন process_capture_result(); ফ্রেমওয়ার্ক বাফার পড়ার আগে HAL দ্বারা প্রদত্ত রিলিজ সিঙ্ক বেড়ার জন্য অপেক্ষা করবে।
HAL-কে অবশ্যই স্ট্রীম বাফারের রিলিজ সিঙ্ক বেড়াকে একটি বৈধ সিঙ্ক fd-এ সেট করতে হবে, অথবা যদি বাফারটি ইতিমধ্যেই পূরণ হয়ে থাকে তাহলে -1-এ।
বাফার প্রক্রিয়া করার সময় যদি HAL একটি ত্রুটির সম্মুখীন হয়, এবং বাফারটি পূরণ না হয়, বাফারের স্থিতি ক্ষেত্রটি CAMERA3_BUFFER_STATUS_ERROR এ সেট করতে হবে। যদি HAL ত্রুটির সম্মুখীন হওয়ার আগে অধিগ্রহণের বেড়ার উপর অপেক্ষা না করে, তবে বাফারটি পুনরায় ব্যবহার করার আগে ফ্রেমওয়ার্কটিকে বেড়ার উপর অপেক্ষা করার অনুমতি দেওয়ার জন্য, অধিগ্রহণের বেড়াটি মুক্তির বেড়াতে অনুলিপি করা উচিত।
সমস্ত আউটপুট বাফারের জন্য অধিগ্রহণের বেড়া অবশ্যই -1 সেট করতে হবে। যদি num_output_buffers শূন্য হয়, তাহলে এটি NULL হতে পারে। সেক্ষেত্রে, আউটপুট বাফারগুলি প্রদান করার জন্য HAL দ্বারা কমপক্ষে আরও একটি প্রসেস_ক্যাপচার_রিজাল্ট কল করা আবশ্যক।
যখন একটি ফ্রেমের জন্য একটি নতুন বাফারের সাথে process_capture_result কল করা হয়, সেই সংশ্লিষ্ট স্ট্রীমের জন্য সমস্ত পূর্ববর্তী ফ্রেমের বাফার অবশ্যই ইতিমধ্যেই বিতরণ করা হয়েছে (বেড়াগুলিকে এখনও সংকেত দেওয়ার প্রয়োজন নেই)।
>= CAMERA_DEVICE_API_VERSION_3_2:
একটি ফ্রেমের জন্য Gralloc বাফারগুলি সংশ্লিষ্ট SHUTTER-notify এর আগে ফ্রেমওয়ার্কে পাঠানো হতে পারে।
কর্মক্ষমতা বিবেচনা:
একটি SHUTTER notify() কলের মাধ্যমে এক্সপোজার টাইমস্ট্যাম্প শুরু না হওয়া পর্যন্ত ফ্রেমওয়ার্কে বিতরণ করা বাফারগুলিকে অ্যাপ্লিকেশন স্তরে প্রেরণ করা হবে না। যত তাড়াতাড়ি সম্ভব সেই কলটি প্রেরণ করার জন্য অত্যন্ত সুপারিশ করা হয়।
uint32_t আংশিক_ফলাফল |
>= CAMERA_DEVICE_API_VERSION_3_2:
আংশিক ফলাফলের সুবিধা নেওয়ার জন্য, HAL-কে অবশ্যই স্ট্যাটিক মেটাডেটা android.request.partialResultCount সেট করতে হবে প্রতিটি ফ্রেমের জন্য যে পরিমাণ আংশিক ফলাফল পাঠাবে।
একটি আংশিক ফলাফল সহ প্রতিটি নতুন ক্যাপচার ফলাফলকে অবশ্যই এই ক্ষেত্রটি (আংশিক_ফলাফল) 1 এবং android.request.partialResultCount এর মধ্যে একটি স্বতন্ত্র অন্তর্ভুক্ত মান সেট করতে হবে।
HAL যারা এই বৈশিষ্ট্যের সুবিধা নিতে চায় না তাদের অবশ্যই 1 ব্যতীত অন্য কোনো মান android.request.partialResultCount বা partial_result সেট করা উচিত নয়।
এই মানটি 0 তে সেট করা আবশ্যক যখন একটি ক্যাপচার ফলাফলে শুধুমাত্র বাফার থাকে এবং কোন মেটাডেটা থাকে না।
const camera_metadata_t * ফলাফল |
এই ক্যাপচারের জন্য ফলাফল মেটাডেটা। এটিতে চূড়ান্ত ক্যাপচার প্যারামিটার, ক্যাপচার এবং পোস্ট-প্রসেসিং হার্ডওয়্যারের অবস্থা, 3A অ্যালগরিদমের অবস্থা, যদি সক্রিয় থাকে, এবং যেকোনো সক্ষম পরিসংখ্যান ইউনিটের আউটপুট সম্পর্কে তথ্য রয়েছে।
প্রদত্ত ফ্রেম_নম্বর সহ process_capture_result() এ শুধুমাত্র একটি কল ফলাফলের মেটাডেটা অন্তর্ভুক্ত করতে পারে। একই ফ্রেম_ নম্বরের জন্য অন্য সব কলের জন্য এটি অবশ্যই NULL এ সেট করতে হবে।
যদি ফলাফলের মেটাডেটা তৈরিতে কোনো ত্রুটি থাকে, তাহলে ফলাফলটি একটি খালি মেটাডেটা বাফার হতে হবে এবং notify() কে ERROR_RESULT-এর সাথে কল করতে হবে।
>= CAMERA_DEVICE_API_VERSION_3_2:
একটি প্রদত্ত ফ্রেম_নম্বর সহ process_capture_result() এ একাধিক কল ফলাফলের মেটাডেটা অন্তর্ভুক্ত করতে পারে।
জমা দেওয়া আংশিক মেটাডেটাতে প্রদত্ত ফ্রেমের জন্য পূর্ববর্তী আংশিক ফলাফলে ফেরত দেওয়া কোনও মেটাডেটা কী অন্তর্ভুক্ত করা উচিত নয়। সেই ফ্রেমের জন্য প্রতিটি নতুন আংশিক ফলাফলকে অবশ্যই একটি স্বতন্ত্র আংশিক_ফলাফল মান সেট করতে হবে।
যদি ERROR_RESULT-এর সাথে বিজ্ঞপ্তি কল করা হয়, তাহলে সেই ফ্রেমের জন্য আরও সমস্ত আংশিক ফলাফল ফ্রেমওয়ার্ক দ্বারা উপেক্ষা করা হবে।
এই কাঠামোর জন্য ডকুমেন্টেশন নিম্নলিখিত ফাইল থেকে তৈরি করা হয়েছিল:
- hardware/libhardware/include/hardware/ camera3.h