অ্যান্ড্রয়েড ১২-এ চালু হওয়া কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং এমন একটি ফিচার, যা ডিভাইসগুলোকে অ্যাপের সাথে সামঞ্জস্যতা বজায় রেখে ভিডিও ক্যাপচারের জন্য HEVC-এর মতো আরও আধুনিক ও স্টোরেজ-সাশ্রয়ী মিডিয়া ফরম্যাট ব্যবহার করার সুযোগ দেয়। এই ফিচারের মাধ্যমে, ডিভাইস নির্মাতারা ভিডিওর মান উন্নত করার পাশাপাশি স্টোরেজ ও ব্যান্ডউইথের প্রয়োজনীয়তা কমাতে ডিফল্টভাবে AVC-এর পরিবর্তে HEVC ব্যবহার করতে পারেন। যেসব ডিভাইসে কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং চালু করা আছে, সেগুলোতে HEVC বা HDR-এর মতো ফরম্যাটে রেকর্ড করা ভিডিও (এক মিনিট পর্যন্ত দৈর্ঘ্যের) যদি এমন কোনো অ্যাপ খোলে যা সেই ফরম্যাটটি সাপোর্ট করে না, তবে অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে সেটিকে রূপান্তর করে ফেলতে পারে। এর ফলে, ডিভাইসে নতুন ফরম্যাটে ভিডিও ক্যাপচার করা হলেও অ্যাপগুলো কাজ করতে পারে।
কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং ফিচারটি ডিফল্টরূপে বন্ধ থাকে। মিডিয়া ট্রান্সকোডিংয়ের অনুরোধ করতে হলে, অ্যাপগুলোকে তাদের মিডিয়া ক্যাপাবিলিটি ঘোষণা করতে হবে। মিডিয়া ক্যাপাবিলিটি ঘোষণা করার বিষয়ে আরও তথ্যের জন্য, অ্যান্ড্রয়েড ডেভেলপারস সাইটে ‘কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং’ দেখুন।
এটি কীভাবে কাজ করে
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি দুটি প্রধান অংশ নিয়ে গঠিত:
- মিডিয়া ফ্রেমওয়ার্কের ট্রান্সকোডিং পরিষেবা: এই পরিষেবাগুলি কম ল্যাটেন্সি এবং উচ্চ মানের রূপান্তরের জন্য হার্ডওয়্যার ব্যবহার করে ফাইলগুলিকে এক ফরম্যাট থেকে অন্য ফরম্যাটে রূপান্তর করে। এর মধ্যে রয়েছে ট্রান্সকোডিং এপিআই, ট্রান্সকোডিং পরিষেবা, কাস্টম ফিল্টারের জন্য একটি ওইএম প্লাগইন এবং হার্ডওয়্যার। আরও বিস্তারিত জানতে, আর্কিটেকচার ওভারভিউ দেখুন।
- মিডিয়া প্রোভাইডারগুলিতে সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য: মিডিয়া প্রোভাইডারগুলিতে থাকা এই কম্পোনেন্টটি মিডিয়া ফাইল অ্যাক্সেসকারী অ্যাপগুলিকে বাধা দেয় এবং অ্যাপটির ঘোষিত সক্ষমতার উপর ভিত্তি করে হয় মূল ফাইলটি অথবা একটি ট্রান্সকোড করা ফাইল পরিবেশন করে। যদি কোনো অ্যাপ মিডিয়া ফাইলের ফরম্যাটটি সমর্থন করে, তবে কোনো বিশেষ ব্যবস্থাপনার প্রয়োজন হয় না। যদি কোনো অ্যাপ ফরম্যাটটি সমর্থন না করে, তবে অ্যাপটি ফাইলটি অ্যাক্সেস করার সময় ফ্রেমওয়ার্কটি ফাইলটিকে AVC-এর মতো একটি পুরোনো ফরম্যাটে রূপান্তর করে নেয়।
চিত্র ১-এ মিডিয়া ট্রান্সকোডিং প্রক্রিয়ার একটি সার্বিক চিত্র দেখানো হয়েছে।

চিত্র ১. সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিংয়ের সংক্ষিপ্ত বিবরণ।
সমর্থিত ফরম্যাট
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি নিম্নলিখিত ফরম্যাট রূপান্তরগুলিকে সমর্থন করে:
- HEVC (৮-বিট) থেকে AVC: একটি মিডিয়াকোডেক ডিকোডার এবং একটি মিডিয়াকোড এনকোডার সংযোগের মাধ্যমে কোডেক রূপান্তর করা হয়।
- HDR10+ (10-বিট) থেকে AVC (SDR): মিডিয়াকোডেক ইনস্ট্যান্স এবং ডিকোডার ইনস্ট্যান্সে একটি ভেন্ডর প্লাগইন হুক ব্যবহার করে HDR থেকে SDR রূপান্তর করা হয়। আরও তথ্যের জন্য, HDR থেকে SDR এনকোডিং দেখুন।
সমর্থিত বিষয়বস্তুর উৎস
কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং ফিচারটি নেটিভ OEM ক্যামেরা অ্যাপ দ্বারা তৈরি অন-ডিভাইস মিডিয়া সমর্থন করে, যা প্রাইমারি এক্সটার্নাল ভলিউমের DCIM/Camera/ ফোল্ডারে সংরক্ষিত থাকে। এই ফিচারটি সেকেন্ডারি স্টোরেজের মিডিয়া সমর্থন করে না। ইমেল বা এসডি কার্ডের মাধ্যমে ডিভাইসে পাঠানো কন্টেন্ট সমর্থিত নয়।
অ্যাপগুলো বিভিন্ন ফাইলপাথের উপর ভিত্তি করে ফাইলগুলো অ্যাক্সেস করে। নিচে সেই ফাইলপাথগুলো বর্ণনা করা হলো যেখানে ট্রান্সকোডিং সক্রিয় বা বাইপাস করা হয়:
ট্রান্সকোডিং সক্রিয় করা হয়েছে:
- মিডিয়াস্টোর এপিআই-এর মাধ্যমে অ্যাপ অ্যাক্সেস
- জাভা এবং নেটিভ কোড সহ সরাসরি ফাইলপাথ এপিআই-এর মাধ্যমে অ্যাপ অ্যাক্সেস
- স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) এর মাধ্যমে অ্যাপ অ্যাক্সেস
- ওএস শেয়ার শীট ইন্টেন্টের মাধ্যমে অ্যাপ অ্যাক্সেস। (শুধুমাত্র মিডিয়াস্টোর ইউআরআই)
- ফোন থেকে পিসিতে MTP/PTP ফাইল স্থানান্তর
ট্রান্সকোডিং এড়ানো হয়েছে:
- এসডি কার্ড বের করে ডিভাইস থেকে ফাইল স্থানান্তর করা
- নিয়ারবাই শেয়ার বা ব্লুটুথ ট্রান্সফারের মতো অপশন ব্যবহার করে এক ডিভাইস থেকে অন্য ডিভাইসে ফাইল স্থানান্তর করা।
ট্রান্সকোডিংয়ের জন্য কাস্টমাইজড ফাইলপাথ যোগ করুন
ডিভাইস নির্মাতারা ঐচ্ছিকভাবে DCIM/ ডিরেক্টরির অধীনে মিডিয়া ট্রান্সকোডিংয়ের জন্য ফাইলপাথ যোগ করতে পারেন। DCIM/ ডিরেক্টরির বাইরের যেকোনো পাথ প্রত্যাখ্যাত হয়। ক্যারিয়ারের প্রয়োজনীয়তা বা স্থানীয় নিয়মকানুন পূরণের জন্য এই ধরনের ফাইলপাথ যোগ করার প্রয়োজন হতে পারে।
ফাইলপাথ যোগ করতে, ট্রান্সকোড পাথ রানটাইম রিসোর্স ওভারলে (RRO) এবং config_supported_transcoding_relative_paths ব্যবহার করুন। নিচে একটি ফাইলপাথ যোগ করার উদাহরণ দেওয়া হলো:
<string-array name="config_supported_transcoding_relative_paths" translatable="false">
<item>DCIM/JCF/</item>
</string-array>
কনফিগার করা ফাইলপথগুলো যাচাই করতে, ব্যবহার করুন:
adb shell dumpsys activity provider com.google.android.providers.media.module/com.android.providers.media.MediaProvider | head -n 20স্থাপত্যের সংক্ষিপ্ত বিবরণ
এই অংশে মিডিয়া ট্রান্সকোডিং ফিচারের স্থাপত্য বর্ণনা করা হয়েছে।
চিত্র ২. মিডিয়া ট্রান্সকোডিং স্থাপত্য।
মিডিয়া ট্রান্সকোডিং আর্কিটেকচারটি নিম্নলিখিত উপাদানগুলো নিয়ে গঠিত:
- MediaTranscodingManager সিস্টেম এপিআই: এমন একটি ইন্টারফেস যা ক্লায়েন্টকে MediaTranscoding সার্ভিসের সাথে যোগাযোগ করতে দেয়। MediaProvider মডিউল এই এপিআই ব্যবহার করে।
- MediaTranscodingService: একটি নেটিভ সার্ভিস যা ক্লায়েন্ট সংযোগ পরিচালনা করে, ট্রান্সকোডিং অনুরোধের সময়সূচী নির্ধারণ করে এবং
TranscodingSessionsএর হিসাবরক্ষণ করে। - MediaTranscoder: একটি নেটিভ লাইব্রেরি যা ট্রান্সকোডিং করে। এই লাইব্রেরিটি মডিউলগুলির সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য মিডিয়া ফ্রেমওয়ার্ক NDK-এর উপর ভিত্তি করে তৈরি করা হয়েছে।
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি সার্ভিস এবং মিডিয়া ট্রান্সকোডার উভয় ক্ষেত্রেই ট্রান্সকোডিং মেট্রিক্স লগ করে। সময়মতো বাগ সংশোধন এবং আপডেট করার জন্য ক্লায়েন্ট সাইড এবং সার্ভিস সাইডের কোড MediaProvider মডিউলে রাখা হয়েছে।
ফাইল অ্যাক্সেস
কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং ইউজারস্পেসে ফাইলসিস্টেম (FUSE) এর উপর ভিত্তি করে নির্মিত, যা স্কোপড স্টোরেজের জন্য ব্যবহৃত হয়। FUSE, মিডিয়াপ্রোভাইডার মডিউলকে ইউজার স্পেসে ফাইল অপারেশনগুলো পরীক্ষা করতে এবং পলিসির উপর ভিত্তি করে ফাইলগুলিতে অ্যাক্সেস অনুমোদন, প্রত্যাখ্যান বা গোপন করার জন্য নিয়ন্ত্রণ করতে সক্ষম করে।
যখন কোনো অ্যাপ একটি ফাইল অ্যাক্সেস করার চেষ্টা করে, তখন FUSE ডেমন অ্যাপটির ফাইল রিড অ্যাক্সেসকে বাধা দেয়। যদি অ্যাপটি কোনো নতুন ফরম্যাট (যেমন HEVC) সমর্থন করে, তবে মূল ফাইলটি ফেরত দেওয়া হয়। যদি অ্যাপটি ফরম্যাটটি সমর্থন না করে, তবে ফাইলটিকে একটি পুরোনো ফরম্যাটে (যেমন AVC) ট্রান্সকোড করা হয় অথবা ক্যাশে থেকে ফেরত দেওয়া হয়, যদি কোনো ট্রান্সকোড করা সংস্করণ উপলব্ধ থাকে।
ট্রান্সকোড করা ফাইলগুলির জন্য অনুরোধ করুন
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি ডিফল্টরূপে নিষ্ক্রিয় থাকে। অ্যাপগুলি নিম্নলিখিত বিকল্পগুলি ব্যবহার করে ট্রান্সকোড করা অ্যাসেটের জন্য অনুরোধ করতে পারে:
- ম্যানিফেস্ট ফাইলে অসমর্থিত ফরম্যাটগুলো ঘোষণা করুন। বিস্তারিত জানতে, ‘একটি রিসোর্সে ক্যাপাবিলিটি ঘোষণা করুন’ এবং ‘কোডে ক্যাপাবিলিটি ঘোষণা করুন’ দেখুন।
- রান টাইমে অ্যাপ কম্প্যাটিবিলিটি ফ্রেমওয়ার্ক ব্যবহার করে সমর্থিত ফরম্যাটগুলো নিষ্ক্রিয় করুন (ব্যবহারকারীরা সেটিংস-এ গিয়ে প্রতিটি অ্যাপের জন্যও এটি নিষ্ক্রিয় করতে পারেন)।
-
openTypedAssetFileDescriptorAPI ব্যবহার করে অসমর্থিত ফরম্যাটগুলো সুস্পষ্টভাবে উল্লেখ করার মাধ্যমেMediaStoreএ একটি ফাইল খুলুন।
ইউএসবি ট্রান্সফারের (ডিভাইস থেকে পিসি) ক্ষেত্রে, ট্রান্সকোডিং ডিফল্টরূপে নিষ্ক্রিয় থাকে, কিন্তু ব্যবহারকারীরা চিত্র ৩-এ দেখানো অনুযায়ী ইউএসবি প্রেফারেন্সেস সেটিং স্ক্রিনে থাকা ‘ কনভার্ট ভিডিওস টু এভিসি’ টগলটি ব্যবহার করে ট্রান্সকোডিং সক্রিয় করতে পারেন।

চিত্র ৩। ইউএসবি প্রেফারেন্সেস স্ক্রিনে মিডিয়া ট্রান্সকোডিং চালু করতে টগল করুন।
ট্রান্সকোড করা ফাইল অনুরোধ করার উপর বিধিনিষেধ
ট্রান্সকোডিং অনুরোধগুলি যাতে দীর্ঘ সময়ের জন্য সিস্টেম রিসোর্স আটকে না রাখে, সেজন্য ট্রান্সকোডিং সেশনের অনুরোধকারী অ্যাপগুলিকে নিম্নলিখিত বিষয়গুলিতে সীমাবদ্ধ করা হয়েছে:
- টানা ১০টি অধিবেশন
- মোট তিন মিনিটের চলমান সময়
যদি কোনো অ্যাপ এই সমস্ত বিধিনিষেধ লঙ্ঘন করে, তাহলে ফ্রেমওয়ার্কটি মূল ফাইল ডেসক্রিপ্টরটি ফেরত দেয়।
ডিভাইসের প্রয়োজনীয়তা
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি সমর্থন করার জন্য, ডিভাইসগুলিকে নিম্নলিখিত শর্তগুলি পূরণ করতে হবে:
- ডিভাইসের নেটিভ ক্যামেরা অ্যাপে ডিফল্টরূপে HEVC এনকোডিং সক্রিয় করা আছে।
- (এইচডিআর থেকে এসডিআর ট্রান্সকোডিং সমর্থনকারী ডিভাইস) ডিভাইসটি এইচডিআর ভিডিও ক্যাপচার সমর্থন করে
মিডিয়া ট্রান্সকোডিংয়ের জন্য ডিভাইসের পারফরম্যান্স নিশ্চিত করতে, ভিডিও হার্ডওয়্যার এবং স্টোরেজের রিড/রাইট অ্যাক্সেস পারফরম্যান্স অপ্টিমাইজ করতে হবে। যখন মিডিয়া কোডেকগুলোকে প্রায়োরিটি 1 দিয়ে কনফিগার করা হয়, তখন কোডেকগুলোকে অবশ্যই সর্বোচ্চ সম্ভাব্য থ্রুপুটে কাজ করতে হবে। আমরা সুপারিশ করি যে ট্রান্সকোডিং পারফরম্যান্স যেন ন্যূনতম ২০০ এফপিএস অর্জন করে। আপনার হার্ডওয়্যারের পারফরম্যান্স পরীক্ষা করতে, frameworks/av/media/libmediatranscoding/transcoder/benchmark এ থাকা মিডিয়া ট্রান্সকোডার বেঞ্চমার্কটি চালান।
বৈধতা
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি যাচাই করতে, নিম্নলিখিত CTS পরীক্ষাগুলি চালান:
-
android.media.mediatranscoding.cts -
android.mediaprovidertranscode.cts
বিশ্বব্যাপী মিডিয়া ট্রান্সকোডিং সক্ষম করুন
মিডিয়া ট্রান্সকোডিং ফ্রেমওয়ার্ক বা ট্রান্সকোডিং সহ অ্যাপের আচরণ পরীক্ষা করার জন্য, আপনি সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং ফিচারটি বিশ্বব্যাপী চালু বা বন্ধ করতে পারেন। সেটিংস > সিস্টেম > ডেভেলপার > মিডিয়া ট্রান্সকোডিং ডেভেলপার অপশন পেজে, ' ওভাররাইড ট্রান্সকোডিং ডিফল্টস' টগলটি অন করুন এবং তারপরে 'এনাবল ট্রান্সকোডিং' টগলটি অন বা অফ করুন। যদি এই সেটিংটি চালু থাকে, তাহলে আপনি যে অ্যাপটি তৈরি করছেন তা ছাড়া অন্য অ্যাপের জন্য ব্যাকগ্রাউন্ডে মিডিয়া ট্রান্সকোডিং হতে পারে।
ট্রান্সকোডিং স্ট্যাটাস চেক করুন
টেস্টিং চলাকালীন, আপনি বর্তমান এবং অতীতের ট্রান্সকোডিং সেশন সহ ট্রান্সকোডিং স্ট্যাটাস পরীক্ষা করতে নিম্নলিখিত ADB শেল কমান্ডটি ব্যবহার করতে পারেন:
adb shell dumpsys media.transcodingভিডিওর দৈর্ঘ্যের সীমাবদ্ধতা বাড়ান
পরীক্ষার উদ্দেশ্যে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করে ট্রান্সকোডিংয়ের জন্য এক মিনিটের ভিডিও দৈর্ঘ্যের সীমাবদ্ধতা বাড়াতে পারেন। এই কমান্ডটি চালানোর পর একটি রিবুটের প্রয়োজন হতে পারে।
adb shell device_config put storage_native_boot transcode_max_duration_ms <LARGE_NUMBER_IN_MS>AOSP উৎস এবং তথ্যসূত্র
নিম্নলিখিতগুলি সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং সম্পর্কিত AOSP সোর্স কোড।
ট্রান্সকোডিং সিস্টেম এপিআই (শুধুমাত্র মিডিয়াপ্রোভাইডার দ্বারা ব্যবহৃত)
অ্যাপ্লিকেশনমিডিয়াক্যাপাবিলিটিস এপিআই
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.javaমিডিয়া ট্রান্সকোডিং পরিষেবা
-
frameworks/av/services/mediatranscoding/ -
frameworks/av/media/libmediatranscoding/
-
নেটিভ মিডিয়া ট্রান্সকোডার
-
frameworks/av/media/libmediatranscoding/transcoder
-
মিডিয়াট্রান্সকোডারের জন্য HDR স্যাম্পল প্লাগইন
মিডিয়াপ্রোভাইডার ফাইল ইন্টারসেপশন এবং ট্রান্সকোডিং কোড
মিডিয়াট্রান্সকোডার বেঞ্চমার্ক
-
frameworks/av/media/libmediatranscoding/transcoder/benchmark
-
CTS পরীক্ষা
-
cts/tests/tests/mediatranscoding/
-
HDR থেকে SDR এনকোডিং
HDR থেকে SDR এনকোডিং সমর্থন করার জন্য, ডিভাইস নির্মাতারা /platform/frameworks/av/media/codec2/hidl/plugin/ অবস্থিত AOSP স্যাম্পল কোডেক ২.০ ফিল্টার প্লাগইনটি ব্যবহার করতে পারেন। এই বিভাগে বর্ণনা করা হয়েছে ফিল্টার প্লাগইনটি কীভাবে কাজ করে, কীভাবে প্লাগইনটি প্রয়োগ করতে হয় এবং কীভাবে প্লাগইনটি পরীক্ষা করতে হয়।
যদি কোনো ডিভাইসে HDR থেকে SDR এনকোডিং সমর্থনকারী কোনো প্লাগইন অন্তর্ভুক্ত না থাকে, তাহলে ম্যানিফেস্টে ঘোষিত অ্যাপটির মিডিয়া সক্ষমতা নির্বিশেষে, HDR ভিডিও অ্যাক্সেসকারী অ্যাপটি মূল ফাইল ডেসক্রিপ্টরটি পেয়ে থাকে।
এটি কীভাবে কাজ করে
এই অংশে কোডেক ২.০ ফিল্টার প্লাগইনের সাধারণ আচরণ বর্ণনা করা হয়েছে।
পটভূমি
অ্যান্ড্রয়েড, কোডেক ২.০ ইন্টারফেস এবং android.hardware.media.c2 HAL ইন্টারফেসের মধ্যে android::hardware::media::c2 তে একটি অ্যাডাপটেশন লেয়ার ইমপ্লিমেন্টেশন প্রদান করে। ফিল্টার প্লাগইনগুলির জন্য, AOSP-তে একটি র্যাপার মেকানিজম অন্তর্ভুক্ত রয়েছে যা ডিকোডারগুলিকে ফিল্টার প্লাগইনগুলির সাথে একত্রে র্যাপ করে। MediaCodec এই র্যাপ করা উপাদানগুলিকে ফিল্টারিং বৈশিষ্ট্যসহ ডিকোডার হিসাবে শনাক্ত করে।
সংক্ষিপ্ত বিবরণ
FilterWrapper ক্লাসটি ভেন্ডর কোডেক গ্রহণ করে এবং র্যাপ করা কোডেকগুলোকে media.c2 অ্যাডাপটেশন লেয়ারে ফেরত পাঠায়। FilterWrapper ক্লাসটি FilterWrapper::Plugin API-এর মাধ্যমে libc2filterplugin.so লোড করে এবং প্লাগইন থেকে উপলব্ধ ফিল্টারগুলো রেকর্ড করে। তৈরির সময়, FilterWrapper সমস্ত উপলব্ধ ফিল্টার ইনস্ট্যানশিয়েট করে। শুরুতে শুধুমাত্র সেই ফিল্টারগুলোই চালু হয় যেগুলো বাফার পরিবর্তন করে।

চিত্র ৪. ফিল্টার প্লাগইনের গঠন।
ফিল্টার প্লাগইন ইন্টারফেস
FilterPlugin.h ইন্টারফেসটি ফিল্টারগুলো প্রকাশ করার জন্য নিম্নলিখিত API-গুলো সংজ্ঞায়িত করে:
std::shared_ptr<C2ComponentStore>getComponentStore()একটি
C2ComponentStoreঅবজেক্ট রিটার্ন করে, যাতে ফিল্টারগুলো থাকে। এটি ভেন্ডরের Codec 2.0 ইমপ্লিমেন্টেশন যা প্রকাশ করে, তার থেকে আলাদা। সাধারণত, এই স্টোরে শুধুFilterWrapperক্লাস দ্বারা ব্যবহৃত ফিল্টারগুলোই থাকে।bool describe(C2String name, Descriptor *desc)C2ComponentStoreএ যা পাওয়া যায়, তার পাশাপাশি ফিল্টারগুলোর বর্ণনা দেওয়া হয়েছে। নিম্নলিখিত বর্ণনাগুলো সংজ্ঞায়িত করা হয়েছে:-
controlParam: যে প্যারামিটারগুলো ফিল্টারগুলোর আচরণ নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, HDR থেকে SDR টোন-ম্যাপারের জন্য, কন্ট্রোল প্যারামিটারটি হলো টার্গেট ট্রান্সফার ফাংশন। -
affectedParams: যে প্যারামিটারগুলো ফিল্টারিং অপারেশন দ্বারা প্রভাবিত হয়। উদাহরণস্বরূপ, HDR থেকে SDR টোন-ম্যাপারের ক্ষেত্রে, প্রভাবিত প্যারামিটারগুলো হলো রঙের দিকগুলো।
-
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)ফিল্টার কম্পোনেন্টটি বাফার পরিবর্তন করলে
trueরিটার্ন করে। উদাহরণস্বরূপ, টোন-ম্যাপিং ফিল্টারটিtrueরিটার্ন করে যদি টার্গেট ট্রান্সফার ফাংশনটি SDR এবং ইনপুট ট্রান্সফার ফাংশনটি HDR (HLG বা PQ) হয়।
ফিল্টার র্যাপারের বিবরণ
এই অংশে FilterWrapper ক্লাসের বিস্তারিত বর্ণনা করা হয়েছে।
সৃষ্টি
র্যাপ করা কম্পোনেন্টটি তৈরির সময় অন্তর্নিহিত ডিকোডার এবং সমস্ত সংজ্ঞায়িত ফিল্টার ইনস্ট্যানশিয়েট করে।
কোয়েরি এবং কনফিগারেশন
র্যাপড কম্পোনেন্টটি ফিল্টার বিবরণ অনুযায়ী আগত প্যারামিটারগুলোকে কোয়েরি বা কনফিগারেশন অনুরোধ থেকে আলাদা করে। উদাহরণস্বরূপ, ফিল্টার কন্ট্রোল প্যারামিটারের কনফিগারেশন সংশ্লিষ্ট ফিল্টারে পাঠানো হয়, এবং ফিল্টারগুলো থেকে প্রভাবিত প্যারামিটারগুলো কোয়েরিতে উপস্থিত থাকে (অপ্রভাবিত প্যারামিটার থাকা ডিকোডার থেকে পড়ার পরিবর্তে)।

চিত্র ৫. কোয়েরি ও কনফিগারেশন।
শুরু করুন
শুরুতে, র্যাপ করা কম্পোনেন্টটি ডিকোডার এবং বাফার পরিবর্তনকারী সমস্ত ফিল্টার চালু করে। যদি কোনো ফিল্টার সক্রিয় না থাকে, তাহলে র্যাপ করা কম্পোনেন্টটি ডিকোডার চালু করে, বাফারগুলো পাস-থ্রু করে এবং ডিকোডারটির নিজের কাছেই কমান্ড পাঠায়।
বাফার হ্যান্ডলিং

চিত্র ৬. বাফার পরিচালনা।
র্যাপড ডিকোডারে কিউ করা বাফারগুলো অন্তর্নিহিত ডিকোডারে চলে যায়। র্যাপড কম্পোনেন্টটি একটি onWorkDone_nb() কলব্যাকের মাধ্যমে ডিকোডার থেকে আউটপুট বাফারটি গ্রহণ করে এবং তারপর সেটিকে ফিল্টারগুলোতে কিউ করে রাখে। সর্বশেষ ফিল্টার থেকে প্রাপ্ত চূড়ান্ত আউটপুট বাফারটি ক্লায়েন্টকে জানানো হয়।
এই বাফার হ্যান্ডলিং কার্যকর হওয়ার জন্য, র্যাপ করা কম্পোনেন্টটিকে অবশ্যই C2PortBlockPoolsTuning সর্বশেষ ফিল্টারে কনফিগার করতে হবে, যাতে ফ্রেমওয়ার্কটি প্রত্যাশিত ব্লক পুল থেকে বাফার আউটপুট করে।
থামুন, রিসেট করুন এবং ছেড়ে দিন।
স্টপ-এর সময়, র্যাপ করা কম্পোনেন্টটি ডিকোডার এবং চালু থাকা সমস্ত সক্রিয় ফিল্টার বন্ধ করে দেয়। রিসেট এবং রিলিজ-এর সময়, সমস্ত কম্পোনেন্ট সক্রিয় আছে কি নেই তা নির্বিশেষে রিসেট বা রিলিজ হয়ে যায়।
নমুনা ফিল্টার প্লাগইনটি প্রয়োগ করুন
প্লাগইনটি সক্রিয় করতে, নিম্নলিখিতগুলি করুন:
- একটি লাইব্রেরিতে
FilterPluginইন্টারফেসটি প্রয়োগ করুন এবং এটি/vendor/lib[64]/libc2filterplugin.so. - প্রয়োজনে
mediacodec.teতে অতিরিক্ত অনুমতি যোগ করুন। - অ্যাডাপটেশন লেয়ারটি অ্যান্ড্রয়েড ১২-এ আপডেট করুন এবং
media.c2সার্ভিসটি রি-বিল্ড করুন।
প্লাগইনটি পরীক্ষা করুন
নমুনা প্লাগইনটি পরীক্ষা করতে, নিম্নলিখিতগুলি করুন:
- ডিভাইসটি পুনর্গঠন ও ফ্ল্যাশ করুন।
নিম্নলিখিত কমান্ড ব্যবহার করে নমুনা প্লাগইনটি তৈরি করুন:
m sample-codec2-filter-pluginডিভাইসটি পুনরায় মাউন্ট করুন এবং ভেন্ডর প্লাগইনটির নাম পরিবর্তন করুন, যাতে কোডেক পরিষেবাটি এটিকে শনাক্ত করতে পারে।
adb root adb remount adb reboot adb wait-for-device adb root adb remount adb push /out/target/<...>/lib64/sample-codec2-filter-plugin.so \ /vendor/lib64/libc2filterplugin.so adb push /out/target/<...>/lib/sample-codec2-filter-plugin.so \ /vendor/lib/libc2filterplugin.so adb reboot