সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং, অ্যান্ড্রয়েড 12-এ প্রবর্তিত, একটি বৈশিষ্ট্য যা ডিভাইসগুলিকে অ্যাপগুলির সাথে সামঞ্জস্য বজায় রেখে ভিডিও ক্যাপচারের জন্য আরও আধুনিক, স্টোরেজ-দক্ষ মিডিয়া ফর্ম্যাটগুলি যেমন HEVC ব্যবহার করতে দেয়৷ এই বৈশিষ্ট্যটির সাহায্যে, ডিভাইস নির্মাতারা স্টোরেজ এবং ব্যান্ডউইথের প্রয়োজনীয়তা হ্রাস করার সময় ভিডিওর গুণমান উন্নত করতে ডিফল্টরূপে AVC এর পরিবর্তে HEVC ব্যবহার করতে পারে। সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং সক্ষম ডিভাইসগুলির জন্য, Android স্বয়ংক্রিয়ভাবে HEVC বা HDR-এর মতো ফরম্যাটে রেকর্ড করা ভিডিওগুলিকে রূপান্তর করতে পারে যখন ভিডিওগুলি ফর্ম্যাট সমর্থন করে না এমন একটি অ্যাপ দ্বারা খোলা হয়৷ এটি ডিভাইসে ভিডিওগুলিকে নতুন ফর্ম্যাটে ক্যাপচার করার সময়ও অ্যাপগুলিকে কাজ করার অনুমতি দেয়৷
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি ডিফল্টরূপে বন্ধ। মিডিয়া ট্রান্সকোডিংয়ের অনুরোধ করতে, অ্যাপগুলিকে অবশ্যই তাদের মিডিয়া ক্ষমতা ঘোষণা করতে হবে। মিডিয়া ক্ষমতা ঘোষণার বিষয়ে আরও তথ্যের জন্য, Android বিকাশকারী সাইটে সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং দেখুন।
এটা কিভাবে কাজ করে
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য দুটি প্রধান অংশ নিয়ে গঠিত:
- মিডিয়া ফ্রেমওয়ার্কে ট্রান্সকোডিং পরিষেবা: এই পরিষেবাগুলি কম বিলম্বিততা এবং উচ্চ মানের রূপান্তরের জন্য হার্ডওয়্যার ব্যবহার করে ফাইলগুলিকে এক ফর্ম্যাট থেকে অন্য ফর্ম্যাটে রূপান্তর করে৷ এর মধ্যে রয়েছে ট্রান্সকোডিং API, ট্রান্সকোডিং পরিষেবা, কাস্টম ফিল্টারের জন্য একটি OEM প্লাগইন এবং হার্ডওয়্যার। আরও বিস্তারিত জানার জন্য, আর্কিটেকচার ওভারভিউ দেখুন।
- মিডিয়া প্রদানকারীদের মধ্যে সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য: মিডিয়া প্রদানকারীদের মধ্যে পাওয়া এই উপাদানটি মিডিয়া ফাইলগুলিতে অ্যাক্সেস করা অ্যাপগুলিকে বাধা দেয় এবং অ্যাপের ঘোষিত ক্ষমতার উপর ভিত্তি করে আসল ফাইল বা একটি ট্রান্সকোড করা ফাইল পরিবেশন করে। যদি একটি অ্যাপ মিডিয়া ফাইলের বিন্যাস সমর্থন করে, কোন বিশেষ পরিচালনার প্রয়োজন নেই। যদি কোনো অ্যাপ ফরম্যাটটিকে সমর্থন না করে, ফ্রেমওয়ার্ক ফাইলটিকে একটি পুরানো ফরম্যাটে রূপান্তর করে, যেমন AVC, যখন অ্যাপটি ফাইলটি অ্যাক্সেস করে।
চিত্র 1 মিডিয়া ট্রান্সকোডিং প্রক্রিয়ার একটি ওভারভিউ দেখায়।
চিত্র 1. সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিংয়ের ওভারভিউ।
সমর্থিত ফরম্যাট
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য নিম্নলিখিত বিন্যাস রূপান্তর সমর্থন করে:
- HEVC (8-বিট) থেকে AVC: কোডেক রূপান্তরগুলি একটি মিডিয়াকোডেক ডিকোডার এবং একটি মিডিয়াকোড এনকোডার সংযোগের মাধ্যমে সঞ্চালিত হয়।
- HDR10+ (10-বিট) থেকে AVC (SDR): HDR থেকে SDR রূপান্তরগুলি মিডিয়াকোডেক উদাহরণ এবং ডিকোডার দৃষ্টান্তগুলিতে একটি বিক্রেতা প্লাগইন হুক ব্যবহার করে সঞ্চালিত হয়। আরও তথ্যের জন্য, HDR থেকে SDR এনকোডিং দেখুন।
সমর্থিত বিষয়বস্তু উত্স
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি নেটিভ OEM ক্যামেরা অ্যাপ দ্বারা উত্পন্ন অন-ডিভাইস মিডিয়াকে সমর্থন করে যা প্রাথমিক বাহ্যিক ভলিউমে DCIM/Camera/
ফোল্ডারে সংরক্ষণ করা হয়। বৈশিষ্ট্যটি সেকেন্ডারি স্টোরেজে মিডিয়া সমর্থন করে না। ইমেল বা SD কার্ডের মাধ্যমে ডিভাইসগুলিতে পাঠানো সামগ্রী সমর্থিত নয়৷
অ্যাপগুলি বিভিন্ন ফাইলপথের উপর ভিত্তি করে ফাইলগুলি অ্যাক্সেস করে। নিম্নলিখিত ফাইলপথগুলি বর্ণনা করে যেখানে ট্রান্সকোডিং সক্ষম বা বাইপাস করা হয়:
ট্রান্সকোডিং সক্ষম:
- MediaStore API-এর মাধ্যমে অ্যাপ অ্যাক্সেস
- জাভা এবং নেটিভ কোড সহ সরাসরি ফাইলপথ API-এর মাধ্যমে অ্যাপ অ্যাক্সেস
- স্টোরেজ অ্যাক্সেস ফ্রেমওয়ার্ক (SAF) এর মাধ্যমে অ্যাপ অ্যাক্সেস
- OS শেয়ার শীট ইন্টেন্টের মাধ্যমে অ্যাপ অ্যাক্সেস। (শুধুমাত্র মিডিয়াস্টোর ইউআরআই)
- ফোন থেকে পিসিতে MTP/PTP ফাইল স্থানান্তর
ট্রান্সকোডিং বাইপাস:
- SD কার্ড বের করে একটি ডিভাইস থেকে ফাইল স্থানান্তর করা হচ্ছে
- কাছাকাছি শেয়ার বা ব্লুটুথ স্থানান্তরের মতো বিকল্পগুলি ব্যবহার করে ডিভাইস থেকে ডিভাইসে ফাইল স্থানান্তর করা।
ট্রান্সকোডিংয়ের জন্য কাস্টমাইজড ফাইলপাথ যোগ করুন
ডিভাইস নির্মাতারা ঐচ্ছিকভাবে 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
স্থাপত্য ওভারভিউ
এই বিভাগটি মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যের আর্কিটেকচার বর্ণনা করে।
চিত্র 2. মিডিয়া ট্রান্সকোডিং আর্কিটেকচার।
মিডিয়া ট্রান্সকোডিং আর্কিটেকচার নিম্নলিখিত উপাদানগুলি নিয়ে গঠিত:
- MediaTranscodingManager system API: ইন্টারফেস যা ক্লায়েন্টকে MediaTranscoding পরিষেবার সাথে যোগাযোগ করতে দেয়। MediaProvider মডিউল এই API ব্যবহার করে।
- MediaTranscodingService: নেটিভ পরিষেবা যা ক্লায়েন্ট সংযোগগুলি পরিচালনা করে, ট্রান্সকোডিং অনুরোধের সময়সূচী নির্ধারণ করে এবং
TranscodingSessions
জন্য বুককিপিং পরিচালনা করে। - মিডিয়া ট্রান্সকোডার: নেটিভ লাইব্রেরি যা ট্রান্সকোডিং করে। এই লাইব্রেরিটি মিডিয়া ফ্রেমওয়ার্ক NDK-এর উপরে মডিউলগুলির সাথে সামঞ্জস্যপূর্ণ হতে তৈরি করা হয়েছে।
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য পরিষেবা এবং মিডিয়া ট্রান্সকোডার উভয় ক্ষেত্রেই ট্রান্সকোডিং মেট্রিক্স লগ করে। ক্লায়েন্ট সাইড এবং সার্ভিস সাইড কোড মিডিয়াপ্রোভাইডার মডিউলে রয়েছে যাতে সময়মত বাগ ফিক্স এবং আপডেট করা যায়।
ফাইল অ্যাক্সেস
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং ইউজারস্পেস (FUSE) ফাইল সিস্টেমের ফাইল সিস্টেমের উপরে তৈরি করা হয়েছে, যা স্কোপড স্টোরেজের জন্য ব্যবহৃত হয়। FUSE মিডিয়াপ্রোভাইডার মডিউলকে ইউজার স্পেসে ফাইল ক্রিয়াকলাপ পরীক্ষা করতে এবং অ্যাক্সেসের অনুমতি, অস্বীকার বা রিডাক্ট করার নীতির উপর ভিত্তি করে ফাইলগুলিতে গেট অ্যাক্সেস করতে সক্ষম করে।
যখন একটি অ্যাপ একটি ফাইল অ্যাক্সেস করার চেষ্টা করে, তখন FUSE ডেমন অ্যাপ থেকে ফাইল পড়ার অ্যাক্সেসকে বাধা দেয়। যদি অ্যাপটি একটি নতুন ফর্ম্যাট সমর্থন করে (যেমন HEVC), আসল ফাইলটি ফেরত দেওয়া হয়। যদি অ্যাপটি ফর্ম্যাটটিকে সমর্থন না করে, তাহলে ফাইলটিকে একটি পুরানো ফর্ম্যাটে (যেমন AVC) ট্রান্সকোড করা হয় বা ট্রান্সকোড করা সংস্করণ উপলব্ধ থাকলে ক্যাশে থেকে ফেরত দেওয়া হয়৷
ট্রান্সকোড করা ফাইলের জন্য অনুরোধ করুন
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্যটি ডিফল্টরূপে অক্ষম থাকে, যার অর্থ হল যদি ডিভাইসটি HEVC সমর্থন করে, তবে ম্যানিফেস্ট ফাইলে বা ফোর্স ট্রান্সকোড তালিকায় একটি অ্যাপ দ্বারা নির্দিষ্ট না করা পর্যন্ত Android ফাইলগুলিকে ট্রান্সকোড করে না৷
অ্যাপগুলি নিম্নলিখিত বিকল্পগুলি ব্যবহার করে ট্রান্সকোড করা সম্পদের জন্য অনুরোধ করতে পারে:
- ম্যানিফেস্ট ফাইলে অসমর্থিত বিন্যাস ঘোষণা করুন। বিস্তারিত জানার জন্য, একটি সম্পদে ক্ষমতা ঘোষণা করুন এবং কোডে ক্ষমতা ঘোষণা করুন দেখুন।
- মিডিয়াপ্রোভাইডার মডিউলে অন্তর্ভুক্ত ফোর্স ট্রান্সকোড তালিকায় অ্যাপ যোগ করুন। এটি এমন অ্যাপগুলির জন্য ট্রান্সকোডিং সক্ষম করে যেগুলি তাদের ম্যানিফেস্ট ফাইল আপডেট করেনি৷ একবার একটি অ্যাপ তার ম্যানিফেস্ট ফাইলটিকে অসমর্থিত ফর্ম্যাটগুলির সাথে আপডেট করলে, এটিকে ফোর্স ট্রান্সকোড তালিকা থেকে সরিয়ে দিতে হবে। ডিভাইস নির্মাতারা একটি প্যাচ জমা দিয়ে বা একটি বাগ রিপোর্ট করার মাধ্যমে ফোর্স ট্রান্সকোড তালিকা থেকে যোগ বা সরানোর জন্য তাদের অ্যাপগুলিকে মনোনীত করতে পারেন৷ অ্যান্ড্রয়েড দল পর্যায়ক্রমে তালিকাটি পর্যালোচনা করে এবং তালিকা থেকে অ্যাপগুলি সরিয়ে দিতে পারে।
- রান টাইমে অ্যাপের সামঞ্জস্যপূর্ণ কাঠামোর সাথে সমর্থিত ফরম্যাটগুলি অক্ষম করুন (ব্যবহারকারীরা সেটিংসে প্রতিটি অ্যাপের জন্য এটি অক্ষমও করতে পারেন)।
-
openTypedAssetFileDescriptor
API এর সাথে অসমর্থিত ফর্ম্যাটগুলি স্পষ্টভাবে উল্লেখ করার সময়MediaStore
এর সাথে একটি ফাইল খুলুন।
ইউএসবি ট্রান্সফারের জন্য (পিসি থেকে ডিভাইস), ট্রান্সকোডিং ডিফল্টরূপে অক্ষম থাকে কিন্তু ব্যবহারকারীরা চিত্র 3-তে দেখানো USB পছন্দ সেটিং স্ক্রিনে ভিডিওগুলিকে AVC-তে রূপান্তর করে ট্রান্সকোডিং সক্ষম করতে পারেন।
চিত্র 3. USB পছন্দ স্ক্রিনে মিডিয়া ট্রান্সকোডিং সক্ষম করতে টগল করুন।
ট্রান্সকোড করা ফাইলের অনুরোধে বিধিনিষেধ
ট্রান্সকোডিং অনুরোধগুলিকে বর্ধিত সময়ের জন্য সিস্টেম সংস্থানগুলি লক করা থেকে আটকাতে, ট্রান্সকোডিং সেশনের অনুরোধকারী অ্যাপগুলি এর মধ্যে সীমাবদ্ধ:
- টানা 10টি সেশন
- তিন মিনিটের মোট চলমান সময়
যদি একটি অ্যাপ এই সমস্ত বিধিনিষেধ অতিক্রম করে, ফ্রেমওয়ার্কটি আসল ফাইল বর্ণনাকারী প্রদান করে।
ডিভাইসের প্রয়োজনীয়তা
সামঞ্জস্যপূর্ণ মিডিয়া ট্রান্সকোডিং বৈশিষ্ট্য সমর্থন করার জন্য, ডিভাইসগুলিকে অবশ্যই নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করতে হবে:
- ডিভাইসটিতে স্থানীয় ক্যামেরা অ্যাপে ডিফল্টরূপে HEVC এনকোডিং সক্ষম করা আছে
- (এইচডিআর থেকে এসডিআর ট্রান্সকোডিং সমর্থনকারী ডিভাইস) ডিভাইস HDR ভিডিও ক্যাপচার সমর্থন করে
মিডিয়া ট্রান্সকোডিংয়ের জন্য ডিভাইসের কার্যকারিতা নিশ্চিত করতে, ভিডিও হার্ডওয়্যার এবং স্টোরেজ রিড/রাইট অ্যাক্সেস কর্মক্ষমতা অপ্টিমাইজ করা আবশ্যক। যখন মিডিয়া কোডেকগুলি 1
এর সমান অগ্রাধিকার দিয়ে কনফিগার করা হয়, কোডেকগুলিকে অবশ্যই সর্বোচ্চ সম্ভাব্য থ্রুপুটে কাজ করতে হবে। আমরা সুপারিশ করি যে ট্রান্সকোডিং কর্মক্ষমতা ন্যূনতম 200 fps অর্জন করে। আপনার হার্ডওয়্যার কর্মক্ষমতা পরীক্ষা করতে, 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 উত্স কোড।
ট্রান্সকোডিং সিস্টেম API (কেবল মিডিয়াপ্রোভাইডার দ্বারা ব্যবহৃত)
ApplicationMediaCapabilities API
frameworks/base/apex/media/framework/java/android/media/ApplicationMediaCapabilities.java
মিডিয়া ট্রান্সকোডিং পরিষেবা
-
frameworks/av/services/mediatranscoding/
-
frameworks/av/media/libmediatranscoding/
-
নেটিভ মিডিয়া ট্রান্সকোডার
-
frameworks/av/media/libmediatranscoding/transcoder
-
MediaTranscoder-এর জন্য HDR নমুনা প্লাগইন
মিডিয়াপ্রোভাইডার ফাইল ইন্টারসেপশন এবং ট্রান্সকোডিং কোড
মিডিয়া ট্রান্সকোডার বেঞ্চমার্ক
-
frameworks/av/media/libmediatranscoding/transcoder/benchmark
-
CTS পরীক্ষা
-
cts/tests/tests/mediatranscoding/
-
HDR থেকে SDR এনকোডিং
HDR থেকে SDR এনকোডিং সমর্থন করতে, ডিভাইস নির্মাতারা /platform/frameworks/av/media/codec2/hidl/plugin/
এ অবস্থিত AOSP নমুনা কোডেক 2.0 ফিল্টার প্লাগইন ব্যবহার করতে পারেন। এই বিভাগে ফিল্টার প্লাগইন কিভাবে কাজ করে, কিভাবে প্লাগইন বাস্তবায়ন করতে হয় এবং কিভাবে প্লাগইন পরীক্ষা করতে হয় তা বর্ণনা করে।
যদি কোনো ডিভাইসে HDR থেকে SDR এনকোডিং সমর্থন করে এমন একটি প্লাগইন অন্তর্ভুক্ত না করে, তাহলে ম্যানিফেস্টে ঘোষিত অ্যাপের মিডিয়া ক্ষমতা নির্বিশেষে একটি HDR ভিডিও অ্যাক্সেস করা একটি অ্যাপ আসল ফাইল বর্ণনাকারী পায়।
এটা কিভাবে কাজ করে
এই বিভাগটি কোডেক 2.0 ফিল্টার প্লাগইনের সাধারণ আচরণ বর্ণনা করে।
পটভূমি
অ্যান্ড্রয়েড android::hardware::media::c2
এ কোডেক 2.0 ইন্টারফেস এবং android.hardware.media.c2
HAL ইন্টারফেসের মধ্যে একটি অভিযোজন স্তর বাস্তবায়ন প্রদান করে। ফিল্টার প্লাগইনগুলির জন্য, AOSP একটি র্যাপার মেকানিজম অন্তর্ভুক্ত করে যা ডিকোডারগুলিকে ফিল্টার প্লাগইনগুলির সাথে একত্রে মোড়ানো হয়৷ MediaCodec
এই আবৃত উপাদানগুলিকে ফিল্টারিং বৈশিষ্ট্য সহ ডিকোডার হিসাবে স্বীকৃতি দেয়।
ওভারভিউ
FilterWrapper
ক্লাস ভেন্ডর কোডেক নেয় এবং মোড়ানো কোডেকগুলিকে media.c2
অ্যাডাপ্টেশন লেয়ারে ফিরিয়ে দেয়। FilterWrapper
ক্লাস libc2filterplugin.so
FilterWrapper::Plugin
API এর মাধ্যমে লোড করে এবং প্লাগইন থেকে উপলব্ধ ফিল্টার রেকর্ড করে। তৈরি করার সময়, FilterWrapper
সমস্ত উপলব্ধ ফিল্টারগুলিকে তাৎক্ষণিক করে। শুধুমাত্র বাফার পরিবর্তনকারী ফিল্টারগুলি শুরুতে শুরু হয়।
চিত্র 1. ফিল্টার প্লাগইন আর্কিটেকচার।
ফিল্টার প্লাগইন ইন্টারফেস
FilterPlugin.h
ইন্টারফেস ফিল্টারগুলি প্রকাশ করতে নিম্নলিখিত APIগুলিকে সংজ্ঞায়িত করে:
std::shared_ptr<C2ComponentStore>getComponentStore()
একটি
C2ComponentStore
অবজেক্ট প্রদান করে যাতে ফিল্টার থাকে। এটি বিক্রেতার কোডেক 2.0 বাস্তবায়নের থেকে আলাদা। সাধারণত, এই দোকানে শুধুমাত্র teFilterWrapper
ক্লাস দ্বারা ব্যবহৃত ফিল্টার থাকে।bool describe(C2String name, Descriptor *desc)
C2ComponentStore
থেকে যা পাওয়া যায় তা ছাড়াও ফিল্টারগুলি বর্ণনা করে। নিম্নলিখিত বর্ণনা সংজ্ঞায়িত করা হয়:-
controlParam
: প্যারামিটার যা ফিল্টারগুলির আচরণ নিয়ন্ত্রণ করে। উদাহরণস্বরূপ, HDR থেকে SDR টোন-ম্যাপারের জন্য, নিয়ন্ত্রণ পরামিতি হল লক্ষ্য স্থানান্তর ফাংশন। -
affectedParams
: প্যারামিটার যা ফিল্টারিং অপারেশন দ্বারা প্রভাবিত হয়। উদাহরণস্বরূপ, HDR থেকে SDR টোন-ম্যাপারের জন্য, প্রভাবিত পরামিতিগুলি হল রঙের দিক।
-
bool isFilteringEnabled(const std::shared_ptr<C2ComponentInterface> &intf)
ফিল্টার উপাদান বাফার পরিবর্তন করলে
true
প্রদান করে। উদাহরণ স্বরূপ, টার্গেট ট্রান্সফার ফাংশনটি SDR হলে এবং ইনপুট ট্রান্সফার ফাংশন HDR (HLG বা PQ) হলে টোন-ম্যাপিং ফিল্টারটিtrue
হয়৷
ফিল্টার র্যাপার বিশদ
বিভাগটি FilterWrapper
ক্লাসের বিশদ বর্ণনা করে।
সৃষ্টি
মোড়ানো উপাদান অন্তর্নিহিত ডিকোডার এবং সমস্ত সংজ্ঞায়িত ফিল্টার তৈরির সময় তাৎক্ষণিক করে।
ক্যোয়ারী এবং কনফিগারেশন
আবৃত উপাদান ফিল্টার বিবরণ অনুযায়ী প্রশ্ন বা কনফিগারেশন অনুরোধ থেকে ইনকামিং পরামিতি পৃথক করে। উদাহরণ স্বরূপ, ফিল্টার কন্ট্রোল প্যারামিটারের কনফিগারেশন সংশ্লিষ্ট ফিল্টারে রুট করা হয় এবং ফিল্টার থেকে প্রভাবিত প্যারামিটারগুলি কোয়েরিতে উপস্থিত থাকে (অপ্রভাবিত প্যারামিটার আছে এমন ডিকোডার থেকে পড়ার পরিবর্তে)।
চিত্র 2. ক্যোয়ারী এবং কনফিগারেশন।
শুরু করুন
শুরুতে, মোড়ানো উপাদানটি ডিকোডার এবং সমস্ত ফিল্টার শুরু করে যা বাফারগুলিকে পরিবর্তন করে। কোনো ফিল্টার সক্ষম না থাকলে, মোড়ানো উপাদানটি ডিকোডার এবং পাস-থ্রু বাফার শুরু করে এবং ডিকোডারেই কমান্ড পাঠায়।
বাফার হ্যান্ডলিং
চিত্র 3. বাফার হ্যান্ডলিং।
মোড়ানো ডিকোডারে সারিবদ্ধ বাফারগুলি অন্তর্নিহিত ডিকোডারে যায়। মোড়ানো উপাদানটি একটি onWorkDone_nb()
কলব্যাকের মাধ্যমে ডিকোডার থেকে আউটপুট বাফারটি দখল করে এবং তারপর এটিকে ফিল্টারে সারিবদ্ধ করে। শেষ ফিল্টার থেকে চূড়ান্ত আউটপুট বাফার ক্লায়েন্টকে রিপোর্ট করা হয়।
এই বাফার হ্যান্ডলিং কাজ করার জন্য, আবৃত উপাদানটিকে অবশ্যই শেষ ফিল্টারে C2PortBlockPoolsTuning
কনফিগার করতে হবে যাতে প্রত্যাশিত ব্লক পুল থেকে ফ্রেমওয়ার্ক আউটপুট বাফার হয়।
থামুন, রিসেট করুন এবং ছেড়ে দিন
স্টপে, মোড়ানো উপাদানটি ডিকোডার এবং সমস্ত সক্রিয় ফিল্টারগুলিকে থামিয়ে দেয় যা শুরু হয়েছিল। রিসেট এবং রিলিজ করার সময়, সমস্ত উপাদান রিসেট বা রিলিজ করা হয়, সেগুলি সক্ষম করা হোক বা না হোক।
নমুনা ফিল্টার প্লাগইন বাস্তবায়ন
প্লাগইন সক্ষম করতে, নিম্নলিখিতগুলি করুন:
- একটি লাইব্রেরিতে
FilterPlugin
ইন্টারফেস প্রয়োগ করুন এবং এটিকে/vendor/lib[64]/libc2filterplugin.so.
- প্রয়োজনে
mediacodec.te
এ অতিরিক্ত অনুমতি যোগ করুন। - Android 12-এ অভিযোজন স্তর আপডেট করুন এবং
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