স্ট্রীম কনফিগারেশন

অ্যান্ড্রয়েড 10 ক্যামেরা ক্লায়েন্টদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে সর্বোত্তম ক্যামেরা স্ট্রীম বেছে নিতে এবং ক্যামেরা ডিভাইস দ্বারা নির্দিষ্ট স্ট্রিম সংমিশ্রণগুলি সমর্থিত তা নিশ্চিত করার জন্য বৈশিষ্ট্যগুলি প্রবর্তন করে। একটি স্ট্রিম কনফিগারেশন বলতে ক্যামেরা ডিভাইসে কনফিগার করা একটি একক ক্যামেরা স্ট্রীমকে বোঝায় এবং একটি স্ট্রিম সংমিশ্রণ বলতে ক্যামেরা ডিভাইসে কনফিগার করা এক বা একাধিক সেটকে বোঝায়। এই বৈশিষ্ট্যগুলি সম্পর্কে আরও জানতে, স্ট্রীম সংমিশ্রণগুলি অনুসন্ধান করার জন্য প্রস্তাবিত স্ট্রিম কনফিগারেশন এবং API দেখুন৷

রেফারেন্স বাস্তবায়ন

প্রস্তাবিত কনফিগারেশন স্ট্রীমগুলির একটি বিক্রেতা-সাইড রেফারেন্স বাস্তবায়ন রয়েছে এবং স্ট্রিম সমন্বয় বৈশিষ্ট্যগুলি অনুসন্ধান করার জন্য API রয়েছে৷ আপনি QCamera3HWI.cpp- এ এই বাস্তবায়ন খুঁজে পেতে পারেন

ক্যামেরা বিক্রেতারা ক্যামেরা ক্লায়েন্টদের কাছে নির্দিষ্ট ব্যবহারের ক্ষেত্রে প্রস্তাবিত স্ট্রিম কনফিগারেশনের বিজ্ঞাপন দিতে পারে। এই প্রস্তাবিত স্ট্রিম কনফিগারেশনগুলি, যা StreamConfigurationMap- এর উপসেট, ক্যামেরা ক্লায়েন্টদের সর্বোত্তম কনফিগারেশন বেছে নিতে সাহায্য করতে পারে।

যদিও StreamConfigurationMap ক্যামেরা ক্লায়েন্টদের সম্পূর্ণ স্ট্রীম কনফিগারেশন তথ্য প্রদান করে, এটি একটি স্ট্রীমের উপর অন্য একটি স্ট্রীম বেছে নেওয়ার দক্ষতা, শক্তি বা কর্মক্ষমতা প্রভাব সম্পর্কে কোনো তথ্য প্রদান করে না। ক্যামেরা ক্লায়েন্টরা অবাধে সমস্ত সম্ভাব্য স্ট্রিম কনফিগারেশন থেকে বেছে নিতে পারে কিন্তু অনেক ক্ষেত্রে, এটি ক্লায়েন্টদের সাব-অপ্টিমাল ক্যামেরা কনফিগারেশন এবং অ্যাপ্লিকেশন ব্যবহার করে সময় সাপেক্ষ সম্পূর্ণ অনুসন্ধানের দিকে নিয়ে যায়।

উদাহরণস্বরূপ, যদিও কিছু প্রক্রিয়াকৃত YUV ফরম্যাট প্রয়োজন এবং সমর্থিত হওয়া আবশ্যক, ক্যামেরা ডিভাইসে ফর্ম্যাটের জন্য স্থানীয় সমর্থন নাও থাকতে পারে। এর ফলে ফর্ম্যাট রূপান্তরের জন্য একটি অতিরিক্ত প্রক্রিয়াকরণ পাস হয় এবং দক্ষতা হ্রাস পায়। আকার এবং অনুপাতের অনুপাতও একই রকম প্রভাব ফেলতে পারে যা শক্তি এবং কর্মক্ষমতার ক্ষেত্রে বিশেষ মাত্রাকে অগ্রাধিকারযোগ্য করে তোলে।

আপনার প্রস্তাবিত স্ট্রীম কনফিগারেশন মানচিত্রগুলি StreamConfigurationMap- এর তুলনায় সম্পূর্ণ হওয়ার প্রয়োজন নেই৷ প্রস্তাবিত কনফিগারেশন মানচিত্রগুলি অবশ্যই বাস্তবায়ন বিভাগের প্রয়োজনীয়তাগুলি অনুসরণ করবে এবং স্ট্রিম কনফিগারেশনম্যাপে পাওয়া যে কোনও উপলব্ধ ফর্ম্যাট, আকার বা অন্যান্য মান অন্তর্ভুক্ত করতে পারে। স্ট্রিম কনফিগারেশনম্যাপে লুকানো ফরম্যাট, মাপ বা অন্যান্য মানগুলিকে প্রস্তাবিত স্ট্রিম কনফিগারেশন ম্যাপে অন্তর্ভুক্ত করা যাবে না।

সমস্ত পরীক্ষা অপরিবর্তিত থাকে এবং প্রস্তাবিত স্ট্রিম কনফিগারেশনের উপর নির্ভর করে শিথিল হয় না।

ক্যামেরা বাস্তবায়ন দ্বারা প্রদত্ত প্রস্তাবিত স্ট্রিম কনফিগারেশনগুলি ঐচ্ছিক এবং ক্যামেরা ক্লায়েন্ট সেগুলি উপেক্ষা করতে পারে৷

বাস্তবায়ন

এই বৈশিষ্ট্যটি বাস্তবায়ন করতে এই পদক্ষেপগুলি অনুসরণ করুন৷

মেটাডেটা এন্ট্রি

এই বৈশিষ্ট্যটি সক্ষম করতে ক্যামেরা HAL-কে অবশ্যই নিম্নলিখিত স্ট্যাটিক মেটাডেটা এন্ট্রিগুলি পূরণ করতে হবে:

  • android.scaler.availableRecommendedStreamConfigurations : নির্দিষ্ট ব্যবহারের ক্ষেত্রে স্ট্রিম কনফিগারেশনের প্রস্তাবিত উপসেট। ঘোষণাটি সাধারণ বিটম্যাপ ব্যবহার করে যা প্রস্তাবিত ব্যবহারের ক্ষেত্রে নির্দেশ করে [1 << PREVIEW | 1 << RECORD..] । ব্যবহারের ক্ষেত্রে একটি অতিরিক্ত এন্ট্রি সহ নিয়মিত (ফরম্যাট, প্রস্থ, উচ্চতা, ইনপুট) টিপল প্রসারিত হয়। অ-বিদ্যমান সর্বজনীন ব্যবহারের ক্ষেত্রে বা [PUBLIC_END, VENDOR_START] সীমার মধ্যে সেট করা অন্য কোনো বিট নিষিদ্ধ৷

    এই তথ্য availableRecommendedStreamConfigurations মেটাডেটা ট্যাগে সংরক্ষণ করা হয়.

    নিম্নলিখিত উদাহরণটি একটি ক্যামেরা ডিভাইসের জন্য একটি প্রস্তাবিত স্ট্রিম কনফিগারেশনের জন্য একটি অ্যারে দেখায় যা শুধুমাত্র 4K এবং 1080p সমর্থন করে, যেখানে ভিডিও রেকর্ডিংয়ের জন্য উভয় রেজোলিউশন পছন্দ করা হয় কিন্তু পূর্বরূপের জন্য শুধুমাত্র 1080p প্রস্তাবিত হয়৷

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (ডিভাইস দ্বারা সমর্থিত হলেই উপলভ্য): এই ক্যামেরা ডিভাইসের জন্য প্রস্তাবিত ডেপথ ডেটাস্পেস স্ট্রিম কনফিগারেশন প্রস্তাবিত। উপরের মেটাডেটা এন্ট্রির মতো, একটি অতিরিক্ত ব্যবহারের ক্ষেত্রে বিটম্যাপ প্রস্তাবিত ব্যবহারের ক্ষেত্রে নির্দেশ করে।

    এই তথ্য availableRecommendedInputOutputFormatsMap মেটাডেটা ট্যাগে সংরক্ষণ করা হয়।

  • android.scaler.availableRecommendedInputOutputFormatsMap (ডিভাইস দ্বারা সমর্থিত হলেই উপলব্ধ): প্রস্তাবিত ইমেজ ফরম্যাটগুলির ম্যাপিং যা এই ক্যামেরা ডিভাইসের জন্য ইনপুট স্ট্রিমগুলির জন্য প্রস্তাবিত হয়, তাদের সংশ্লিষ্ট আউটপুট ফর্ম্যাটে৷

    এই তথ্য availableRecommendedDepthStreamConfigurations মেটাডেটা ট্যাগে সংরক্ষণ করা হয়।

এই তথ্যটি ক্যামেরা ক্লায়েন্টদের কাছে RecommendedStreamConfigurationMap API এর মাধ্যমে উপলব্ধ।

প্রয়োজনীয় ব্যবহারের ক্ষেত্রে

নিম্নলিখিত ব্যবহারের ক্ষেত্রে প্রস্তাবিত স্ট্রিম কনফিগারেশন অবশ্যই প্রদান করতে হবে এবং সংশ্লিষ্ট প্রয়োজনীয়তাগুলি পূরণ করতে হবে:

ব্যবহারের ক্ষেত্রে প্রয়োজনীয়তা
PREVIEW একটি পূর্বরূপ শুধুমাত্র YUV_420_888 এবং IMPLEMENTATION_DEFINED এর মতো আউটপুট ফর্ম্যাট সহ অ-স্টল প্রক্রিয়াকৃত স্ট্রীম কনফিগারেশন অন্তর্ভুক্ত করতে হবে।
RECORD একটি ভিডিও রেকর্ডে অবশ্যই স্ট্রিম কনফিগারেশন অন্তর্ভুক্ত করতে হবে যা IMPLEMENTATION_DEFINED ফর্ম্যাটের সাথে বিজ্ঞাপন সমর্থিত মিডিয়া প্রোফাইলগুলির সাথে মেলে৷
VIDEO_SNAPSHOT একটি ভিডিও স্ন্যাপশটে অবশ্যই স্ট্রীম কনফিগারেশন অন্তর্ভুক্ত থাকতে হবে যা কমপক্ষে সর্বোচ্চ রেকর্ড রেজোলিউশনের মতো বড় এবং শুধুমাত্র BLOB + DATASPACE_JFIF ফর্ম্যাট/ডেটাস্পেস সংমিশ্রণ (JPEG) সহ। কনফিগারেশনগুলি প্রিভিউ গ্লিচের কারণ হওয়া উচিত নয় এবং 30 fps এ চলতে সক্ষম হওয়া উচিত।
SNAPSHOT স্ন্যাপশট স্ট্রীম কনফিগারেশনে অবশ্যই BLOB + DATASPACE_JFIF ফরম্যাট/ডেটাস্পেস কম্বিনেশন (JPEG) সহ android.sensor.info.activeArraySize এর কাছাকাছি সাইজ সহ অন্তত একটি অন্তর্ভুক্ত করতে হবে। আকৃতির অনুপাত, প্রান্তিককরণ, এবং অন্যান্য বিক্রেতা-নির্দিষ্ট বিধিনিষেধগুলিতে অ্যাকাউন্টে বিধিনিষেধ বিবেচনা করে, সর্বাধিক প্রস্তাবিত আকারের ক্ষেত্রটি সেন্সর অ্যারের আকারের ক্ষেত্রফলের 97% এর কম হওয়া উচিত নয়।
ZSL (যদি সমর্থিত হয়) ক্যামেরা ডিভাইস দ্বারা সমর্থিত হলে, প্রস্তাবিত ইনপুট স্ট্রীম কনফিগারেশনগুলি শুধুমাত্র অন্যান্য প্রক্রিয়াকৃত বা স্টল করা আউটপুট ফর্ম্যাটের সাথে একসাথে বিজ্ঞাপন দিতে হবে।
RAW (যদি সমর্থিত হয়) ক্যামেরা ডিভাইস দ্বারা সমর্থিত হলে, প্রস্তাবিত কাঁচা স্ট্রীম কনফিগারেশনে শুধুমাত্র RAW ভিত্তিক আউটপুট ফর্ম্যাট অন্তর্ভুক্ত করা আবশ্যক।

অন্যান্য ব্যবহারের ক্ষেত্রে

আপনি আপনার বাস্তবায়নের জন্য নির্দিষ্ট ব্যবহারের ক্ষেত্রে অতিরিক্ত প্রস্তাবিত কনফিগারেশন স্ট্রীম প্রদান করতে পারেন।

বৈধতা

প্রস্তাবিত কনফিগারেশন স্ট্রীমগুলির আপনার বাস্তবায়ন পরীক্ষা করতে, নিম্নলিখিত CTS এবং VTS পরীক্ষাগুলি চালান:

ক্যোয়ারী স্ট্রীম সমন্বয় API

অ্যান্ড্রয়েড প্ল্যাটফর্মটি স্ট্রিম সংমিশ্রণগুলি অনুসন্ধান করার জন্য একটি API সমর্থন করে৷ এই APIটি প্রয়োগ করা ক্যামেরা ক্লায়েন্টদের একটি বৈধ ক্যামেরাডিভাইস ইনস্ট্যান্স পাওয়ার পরে যেকোন সময়ে নিরাপদে স্ট্রীম কম্বিনেশনের অনুসন্ধান করতে দেয়, ক্যামেরা ক্যাপচার সেশন শুরু করার ওভারহেড অপসারণ করে এবং ক্যামেরা ব্রেকেজ সহ পরবর্তী ক্যামেরা ব্যতিক্রম হওয়ার সম্ভাবনা এবং দ্রুত প্রশ্নের জন্য অনুমতি দেয়।

এই বৈশিষ্ট্যটি ক্যামেরা ক্লায়েন্টদের ক্যামেরাডিভাইস এবং সমর্থিত HW স্তরের নির্দেশিকা অনুসারে সংকলিত স্ট্রিম সংমিশ্রণের একটি তালিকা পেতে দেয়। সবচেয়ে সাধারণ স্ট্রীম সংমিশ্রণগুলির একটি ছোট উপসেটকে কভার করে যতটা সম্ভব অনুসন্ধানের ফলাফলের সঠিকতা প্রয়োগ করতে CTS পরীক্ষাগুলি উপলব্ধ।

আপনি ক্যামেরা HAL-এ একটি অতিরিক্ত HIDL API কল প্রয়োগ করে এই বৈশিষ্ট্যটিকে সমর্থন করতে বেছে নিতে পারেন।

বাস্তবায়ন

স্ট্রিম কম্বিনেশনের জন্য একটি API-কে সমর্থন করতে, ক্যামেরা HAL-কে অবশ্যই isStreamCombinationSupported HIDL API ইন্টারফেসের জন্য একটি বাস্তবায়ন প্রদান করতে হবে। এই ইন্টারফেস ক্যামেরা ডিভাইসটি একটি নির্দিষ্ট ক্যামেরা স্ট্রিম সমন্বয় সমর্থন করে কিনা তা পরীক্ষা করে।

কল করা হলে, API-কে অবশ্যই নিম্নলিখিত স্থিতি কোডগুলির মধ্যে একটি ফেরত দিতে হবে:

  • OK : স্ট্রিম কম্বিনেশন ক্যোয়ারী সফল হয়েছে।
  • METHOD_NOT_SUPPORTED : ক্যামেরা ডিভাইসটি স্ট্রিম কম্বিনেশন কোয়েরি সমর্থন করে না।
  • INTERNAL_ERROR : একটি অভ্যন্তরীণ ত্রুটির কারণে স্ট্রিম সমন্বয় ক্যোয়ারীটি সম্পূর্ণ হতে পারে না৷

যদি স্ট্রীম সমন্বয় সমর্থিত হয় তাহলে API সত্য দেখায়। অন্যথায়, এটি মিথ্যা ফেরত দেয়।

ফ্রেমওয়ার্কটি ক্যামেরা ডিভাইস দ্বারা নির্দিষ্ট সেশন কনফিগারেশন সমর্থিত কিনা তা পরীক্ষা করতে পাবলিক API isSessionConfigurationSupported ব্যবহার করে।

এপিআই-তে কলের স্বাভাবিক ক্যামেরা অপারেশনে কোনো পার্শ্বপ্রতিক্রিয়া থাকতে হবে না। API কলগুলি অবশ্যই কোনও অভ্যন্তরীণ অবস্থাকে পরিবর্তন করবে না বা ক্যামেরার কার্যক্ষমতাকে ধীর করবে না৷ নিশ্চিত করুন যে ক্যামেরা HAL সফলভাবে একটি স্ট্রিম সংমিশ্রণ যাচাই করার পরে, ক্যামেরা ক্লায়েন্টরা সফলভাবে স্ট্রিম সংমিশ্রণটি কনফিগার করতে পারে৷ সমস্যাগুলি এড়াতে, নিশ্চিত করুন যে বাস্তবায়নটি স্ট্রিম কম্বিনেশন কোয়েরির সময় কোনও তথ্য সঞ্চয় করে না, এর অভ্যন্তরীণ অবস্থা পরিবর্তন করে, বা সময়-সাপেক্ষ ক্রিয়াকলাপগুলিতে নিযুক্ত না হয়।

বৈধতা

এই বৈশিষ্ট্যটি যাচাই করতে, নিম্নলিখিত ক্যামেরা CTS এবং VTS পরীক্ষার ক্ষেত্রে চালান:

ক্যামেরা CTS মডিউল:

ক্যামেরা VTS:

VtsHalCameraProviderV2_4TargetTest.cpp