camera3_callback_ops স্ট্রাকট রেফারেন্স
#include < camera3.h >
ডেটা ক্ষেত্র | |
অকার্যকর(* | process_capture_result )(const struct camera3_callback_ops *, const camera3_capture_result_t *ফলাফল) |
অকার্যকর(* | বিজ্ঞপ্তি )(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
বিস্তারিত বিবরণ
ফিল্ড ডকুমেন্টেশন
void(* বিজ্ঞপ্তি)(const struct camera3_callback_ops *, const camera3_notify_msg_t *msg) |
অবহিত:
HAL থেকে অ্যাসিঙ্ক্রোনাস নোটিফিকেশন কলব্যাক, বিভিন্ন কারণে বহিস্কার করা হয়েছে। শুধুমাত্র ফ্রেম ক্যাপচার থেকে মুক্ত তথ্যের জন্য, অথবা যার জন্য নির্দিষ্ট সময় প্রয়োজন। মেসেজ স্ট্রাকচারের মালিকানা এইচএএল-এর কাছে থেকে যায়, এবং বার্তাটি শুধুমাত্র এই কলের সময়কালের জন্য বৈধ হতে হবে।
একাধিক থ্রেড একই সাথে notify() কে কল করতে পারে।
<= CAMERA_DEVICE_API_VERSION_3_1:
একটি প্রদত্ত অনুরোধের জন্য এক্সপোজার শুরুর বিজ্ঞপ্তি HAL দ্বারা প্রেরণ করা আবশ্যক সেই অনুরোধের জন্য process_capture_result() এ প্রথম কল করার আগে।
>= CAMERA_DEVICE_API_VERSION_3_2:
একটি SHUTTER notify() কলের মাধ্যমে এক্সপোজার টাইমস্ট্যাম্প (অথবা পুনঃপ্রক্রিয়ার অনুরোধের জন্য ইনপুট চিত্রের এক্সপোজার টাইমস্ট্যাম্পের শুরু) শুরু না হওয়া পর্যন্ত ফ্রেমওয়ার্কে বিতরণ করা বাফারগুলিকে অ্যাপ্লিকেশন স্তরে প্রেরণ করা হবে না৷ এই কলটি যত তাড়াতাড়ি সম্ভব পাঠানোর জন্য অত্যন্ত সুপারিশ করা হয়।
কর্মক্ষমতা প্রয়োজনীয়তা:
এটি একটি নন-ব্লকিং কল। ফ্রেমওয়ার্ক এই কলটি 5ms এ ফেরত দেবে।
void(* process_capture_result)(const struct camera3_callback_ops *, const camera3_capture_result_t *ফলাফল) |
প্রক্রিয়া_ক্যাপচার_ফলাফল:
একটি সম্পূর্ণ ক্যাপচার থেকে ফ্রেমওয়ার্কে ফলাফল পাঠান। process_capture_result() একটি একক ক্যাপচার অনুরোধের প্রতিক্রিয়া হিসাবে HAL দ্বারা একাধিকবার আহ্বান করা হতে পারে। এটি, উদাহরণস্বরূপ, মেটাডেটা এবং কম-রেজোলিউশন বাফারগুলিকে একটি কলে ফেরত দেওয়ার অনুমতি দেয় এবং এটি উপলব্ধ হলে পরবর্তী কলে পোস্ট-প্রসেসড JPEG বাফারগুলি। প্রতিটি কলে অবশ্যই সেই অনুরোধের ফ্রেম নম্বর অন্তর্ভুক্ত করতে হবে যার জন্য এটি মেটাডেটা বা বাফার ফেরত দিচ্ছে৷
সম্পূর্ণ ফলাফলের একটি উপাদান (বাফার বা মেটাডেটা) শুধুমাত্র একটি process_capture_result কলে অন্তর্ভুক্ত করা যেতে পারে। প্রতিটি স্ট্রীমের জন্য একটি বাফার, এবং ফলাফলের মেটাডেটা, প্রতিটি অনুরোধের জন্য HAL দ্বারা অবশ্যই প্রসেস_ক্যাপচার_রিসাল্ট কলগুলির একটিতে ফেরত দিতে হবে, এমনকি কিছু আউটপুট তৈরিতে ত্রুটির ক্ষেত্রেও। কোনো আউটপুট বাফার বা ফলাফল মেটাডেটা সহ process_capture_result()- এ একটি কল অনুমোদিত নয়।
একটি একক ফলাফলের জন্য মেটাডেটা এবং বাফার ফেরত দেওয়ার ক্রম কোন ব্যাপার নয়, তবে একটি প্রদত্ত স্ট্রিমের জন্য বাফারগুলি অবশ্যই FIFO ক্রমে ফেরত দিতে হবে৷ তাই স্ট্রীম A-এর জন্য অনুরোধ 5-এর বাফারটি অবশ্যই স্ট্রিম A-এর জন্য অনুরোধ 6-এর বাফারের আগে অবশ্যই ফেরত দিতে হবে। এটি ফলাফলের মেটাডেটার ক্ষেত্রেও প্রযোজ্য; অনুরোধ 5-এর মেটাডেটা অবশ্যই রিকোয়েস্ট 6-এর মেটাডেটার আগে ফেরত দিতে হবে।
যাইহোক, বিভিন্ন স্ট্রীম একে অপরের থেকে স্বতন্ত্র, তাই এটি গ্রহণযোগ্য এবং প্রত্যাশিত যে স্ট্রীম A-এর জন্য অনুরোধ 5-এর বাফারটি B স্ট্রীমের জন্য অনুরোধ 6-এর বাফারের পরে ফেরত দেওয়া হতে পারে। এবং এটি গ্রহণযোগ্য যে স্ট্রীম B-এর জন্য অনুরোধ 6-এর ফলাফলের মেটাডেটা স্ট্রীম A-এর জন্য অনুরোধ 5-এর বাফারের আগে ফেরত দেওয়া হয়।
HAL ফলাফল কাঠামোর মালিকানা ধরে রাখে, যা শুধুমাত্র এই কলের সময় অ্যাক্সেস করার জন্য বৈধ হতে হবে। এই কল রিটার্ন করার আগে ফ্রেমওয়ার্ক যা প্রয়োজন তা কপি করবে।
আউটপুট বাফারগুলি এখনও পূরণ করার প্রয়োজন নেই; ফ্রেমওয়ার্ক বাফার ডেটা পড়ার আগে স্ট্রীম বাফার রিলিজ সিঙ্ক বেড়াতে অপেক্ষা করবে। তাই, এই পদ্ধতিটি যত তাড়াতাড়ি সম্ভব HAL দ্বারা ডাকা উচিত, এমনকি যদি কিছু বা সমস্ত আউটপুট বাফার এখনও পূরণ করা হয়। প্রতিটি আউটপুট_বাফার স্ট্রিম বাফার এন্ট্রিতে HAL-কে অবশ্যই বৈধ রিলিজ সিঙ্ক বেড়া অন্তর্ভুক্ত করতে হবে, অথবা যদি সেই স্ট্রিম বাফারটি ইতিমধ্যেই পূর্ণ হয়ে থাকে তাহলে -1।
যদি অনুরোধের জন্য ফলাফলের বাফার তৈরি করা না যায়, তাহলে HAL-এর উচিত একটি খালি মেটাডেটা বাফার ফেরত দেওয়া, কিন্তু তারপরও আউটপুট বাফার এবং তাদের সিঙ্ক বেড়া প্রদান করা। উপরন্তু, notify() একটি ERROR_RESULT বার্তা সহ কল করতে হবে।
যদি একটি আউটপুট বাফার পূরণ করা না যায়, তবে এর স্থিতি ক্ষেত্রটি STATUS_ERROR এ সেট করা আবশ্যক৷ উপরন্তু, notify() একটি ERROR_BUFFER বার্তা সহ কল করতে হবে।
যদি সম্পূর্ণ ক্যাপচার ব্যর্থ হয়, তবে আউটপুট বাফারগুলিকে ফ্রেমওয়ার্কে ফিরিয়ে দেওয়ার জন্য এই পদ্ধতিটি এখনও কল করা দরকার। সমস্ত বাফার স্থিতি STATUS_ERROR হওয়া উচিত এবং ফলাফলের মেটাডেটা একটি খালি বাফার হওয়া উচিত৷ উপরন্তু, notify() কে একটি ERROR_REQUEST বার্তা সহ কল করতে হবে। এই ক্ষেত্রে, পৃথক ERROR_RESULT/ERROR_BUFFER বার্তা পাঠানো উচিত নয়৷
কর্মক্ষমতা প্রয়োজনীয়তা:
এটি একটি নন-ব্লকিং কল। ফ্রেমওয়ার্ক এই কলটি 5ms এ ফেরত দেবে।
পাইপলাইনের লেটেন্সি (সংজ্ঞার জন্য S7 দেখুন) 4 ফ্রেমের ব্যবধানের কম বা সমান হওয়া উচিত এবং অবশ্যই 8 ফ্রেমের ব্যবধানের কম বা সমান হতে হবে।
এই কাঠামোর জন্য ডকুমেন্টেশন নিম্নলিখিত ফাইল থেকে তৈরি করা হয়েছিল:
- hardware/libhardware/include/hardware/ camera3.h