মানানসই মিডিয়া ট্র্যান্সকোডিং

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

মানানসই মিডিয়া ট্রান্সকোডিং ফিচার ডিফল্ট হিসেবে বন্ধ থাকে। মিডিয়া ট্রান্সকোডিংয়ের অনুরোধ করতে, অ্যাপগুলিকে অবশ্যই তাদের মিডিয়া ক্ষমতা ঘোষণা করতে হবে। মিডিয়া ক্যাপাবিলিটি ঘোষণা করার ব্যাপারে আরও তথ্য পেতে, Android Developers সাইটে মানানসই মিডিয়া ট্রান্সকোডিং দেখুন।

এটি কীভাবে কাজ করে

মানানসই মিডিয়া ট্রান্সকোডিং ফিচারের দুটি প্রধান অংশ আছে:

  • মিডিয়া ফ্রেমওয়ার্কে ট্রান্সকোডিং পরিষেবা: এইসব পরিষেবা কম লেটেন্সি ও উচ্চ কোয়ালিটি কনভার্শনের জন্য হার্ডওয়্যার ব্যবহার করে একটি ফর্ম্যাট থেকে অন্য ফর্ম্যাটে ফাইল কনভার্ট করে। এর মধ্যে ট্রান্সকোডিং API, ট্রান্সকোডিং পরিষেবা, কাস্টম ফিল্টারের জন্য OEM প্লাগ-ইন এবং হার্ডওয়্যার অন্তর্ভুক্ত। আরও বিবরণের জন্য, আর্কিটেকচার ওভারভিউ দেখুন।
  • মিডিয়া প্রদানকারীর মধ্যে কম্প্যাটিবল মিডিয়া ট্রান্সকোডিং ফিচার: মিডিয়া প্রদানকারীর মধ্যে পাওয়া এই কম্পোনেন্ট, মিডিয়া ফাইল অ্যাক্সেস করা অ্যাপকে ইন্টারসেপ্ট করে এবং অ্যাপের ঘোষিত ক্ষমতা অনুযায়ী আসল ফাইল বা ট্রান্সকোড করা ফাইল পরিবেশন করে। কোনও অ্যাপ মিডিয়া ফাইলের ফর্ম্যাট সাপোর্ট করলে, বিশেষভাবে ম্যানেজ করার প্রয়োজন হয় না। কোনও অ্যাপে ফর্ম্যাট কাজ না করলে, অ্যাপটি ফাইল অ্যাক্সেস করার সময় ফ্রেমওয়ার্ক ফাইলটিকে AVC-এর মতো পুরনো ফর্ম্যাটে কনভার্ট করে।

ছবি ১-এ মিডিয়া ট্রান্সকোডিং প্রসেসের ওভারভিউ দেখানো হয়েছে।

মানানসই মিডিয়া ট্রান্সকোডিং প্রসেস

ছবি ১. মানানসই মিডিয়া ট্রান্সকোডিংয়ের ওভারভিউ।

কাজ করে এমন ফর্ম্যাট

মানানসই মিডিয়া ট্রান্সকোডিং ফিচারে নিম্নলিখিত ফর্ম্যাট কনভার্সন কাজ করে:

  • AVC-তে HEVC (৮-বিট): একটি মিডিয়াকোড ডিকোডার ও একটি মিডিয়াকোড এনকোডার কানেক্ট করার মাধ্যমে কোডেক কনভার্সন করা হয়।
  • HDR10+ (১০-বিট) থেকে AVC (SDR): মিডিয়াকোডেক ইনস্ট্যান্স এবং ডিকোডার ইনস্ট্যান্সে ভেন্ডর প্লাগ-ইন হুক ব্যবহার করে HDR থেকে SDR কনভার্সন করা হয়। আরও তথ্যের জন্য, HDR থেকে SDR এনকোডিং দেখুন।

কাজ করে এমন কন্টেন্টের সোর্স

মানানসই মিডিয়া ট্রান্সকোডিং ফিচার, ডিভাইসে তৈরি করা মিডিয়াতে কাজ করে। এটি নেটিভ OEM ক্যামেরা অ্যাপের মাধ্যমে তৈরি করা হয় এবং প্রাইমারি এক্সটার্নাল ভলিউমের DCIM/Camera/ ফোল্ডারে সেভ করা হয়। সেকেন্ডারি স্টোরেজে থাকা মিডিয়াতে এই ফিচার কাজ করে না। ইমেল বা এসডি কার্ডের মাধ্যমে ডিভাইসে পাঠানো কন্টেন্ট কাজ করে না।

বিভিন্ন ফাইলপাথ অনুযায়ী অ্যাপ ফাইল অ্যাক্সেস করে। নিম্নলিখিত বিবরণ থেকে জানা যাবে যে কোন ফাইলপাথে ট্রান্সকোডিং চালু করা বা বাইপাস করা হয়েছে:

  • ট্রান্সকোডিং চালু করা হয়েছে:

    • MediaStore API-এর মাধ্যমে অ্যাপ অ্যাক্সেস করা
    • Java ও নেটিভ কোড সহ সরাসরি ফাইলপাথ API-এর মাধ্যমে অ্যাপ অ্যাক্সেস করা
    • Storage Access Framework (SAF)-এর মাধ্যমে অ্যাপ অ্যাক্সেস করা
    • OS শেয়ার শিট ইনটেন্টের মাধ্যমে অ্যাপ অ্যাক্সেস। (শুধুমাত্র MediaStore URI)
    • ফোন থেকে পিসি (PC)-তে 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

আর্কিটেকচার ওভারভিউ

এই বিভাগে মিডিয়া ট্রান্সকোডিং ফিচারের আর্কিটেকচার বর্ণনা করা হয়েছে।

media-transcoding-architecture

ছবি ২. মিডিয়া ট্র্যান্সকোডিং আর্কিটেকচার।

মিডিয়া ট্রান্সকোডিং আর্কিটেকচারে নিম্নলিখিত কম্পোনেন্ট থাকে:

  • MediaTranscodingManager সিস্টেম API: ইন্টারফেস যা ক্লায়েন্টকে MediaTranscoding পরিষেবার সাথে যোগাযোগ করতে দেয়। এই API MediaProvider মডিউল ব্যবহার করে।
  • MediaTranscodingService: নেটিভ পরিষেবা যা ক্লায়েন্ট কানেকশন ম্যানেজ করে, ট্রান্সকোডিং অনুরোধ শিডিউল করে এবং TranscodingSessions-এর জন্য বুককিপিং ম্যানেজ করে।
  • MediaTranscoder: নেটিভ লাইব্রেরি যা ট্রান্সকোডিং পারফর্ম করে। এই লাইব্রেরিটি মডিউল-এর সাথে মানানসই হওয়ার জন্য মিডিয়া ফ্রেমওয়ার্ক NDK-এর উপরে তৈরি করা হয়েছে।

মানানসই মিডিয়া ট্র্যান্সকোডিং ফিচার, পরিষেবা ও মিডিয়া ট্র্যান্সকোডার, এই দু'টি জায়গাতেই ট্র্যান্সকোডিং মেট্রিক লগ করে। ক্লায়েন্ট সাইড ও সার্ভিস সাইড কোড MediaProvider মডিউলে থাকে যাতে সময়মতো সমস্যার সমাধান ও আপডেট করা যায়।

ফাইল অ্যাক্সেস

মানানসই মিডিয়া ট্রান্সকোডিং Filesystem in Userspace (FUSE) filesystem-এর উপরে তৈরি করা হয়েছে, যা স্কোপ করা স্টোরেজের জন্য ব্যবহার করা হয়। FUSE, MediaProvider মডিউলকে ব্যবহারকারীর স্পেসে ফাইল অপারেশন পরীক্ষা করতে এবং নীতি অনুযায়ী ফাইল অ্যাক্সেস করার অনুমতি দিতে, অস্বীকার করতে বা গোপন করতে সক্ষম করে।

কোনও অ্যাপ যখন কোনও ফাইল অ্যাক্সেস করার চেষ্টা করে, তখন FUSE ডেমোন অ্যাপ থেকে ফাইল রিড করার অ্যাক্সেস ইন্টারসেপ্ট করে। অ্যাপটি যদি নতুন ফর্ম্যাট (যেমন, HEVC) সাপোর্ট করে, তাহলে মূল ফাইলটি ফেরত দেওয়া হয়। অ্যাপটি ফর্ম্যাট সাপোর্ট না করলে, ফাইলটি পুরনো ফর্ম্যাটে (যেমন, AVC) ট্রান্সকোড করা হয় অথবা ট্রান্সকোড করা ভার্সন উপলভ্য থাকলে, সেটি ক্যাশে সেভ করা হয়।

ট্রান্সকোড করা ফাইলের জন্য অনুরোধ করা

মানানসই মিডিয়া ট্রান্সকোডিং ফিচার ডিফল্ট হিসেবে বন্ধ করা থাকে। অ্যাপ নিম্নলিখিত বিকল্প ব্যবহার করে ট্রান্সকোড করা অ্যাসেট অনুরোধ করতে পারে:

  • ম্যানিফেস্ট ফাইলে কাজ করে না এমন ফর্ম্যাট ঘোষণা করুন। আরও বিবরণের জন্য, কোনও রিসোর্সে ক্ষমতা ঘোষণা করুন এবং কোডে ক্ষমতা ঘোষণা করুন দেখুন।
  • রান টাইমে অ্যাপ কম্প্যাটিবিলিটি ফ্রেমওয়ার্কের মাধ্যমে কাজ করে এমন ফর্ম্যাট বন্ধ করুন (ব্যবহারকারীরা সেটিংস থেকে প্রতিটি অ্যাপের জন্য এটি বন্ধ করতে পারবেন)।
  • openTypedAssetFileDescriptor API-এর মাধ্যমে কাজ করে না এমন ফর্ম্যাট নির্দিষ্ট করে MediaStore দিয়ে ফাইল খুলুন।

USB ট্রান্সফারের (ডিভাইস থেকে পিসি) ক্ষেত্রে, ট্রান্সকোডিং ডিফল্ট হিসেবে বন্ধ করা থাকে, তবে ব্যবহারকারীরা USB পছন্দ সেটিং স্ক্রিনে ভিডিওকে AVC-তে কনভার্ট করুন টগল ব্যবহার করে ট্রান্সকোডিং চালু করার বিকল্প বেছে নিতে পারেন যেমনটি ৩ নম্বর ছবিতে দেখানো হয়েছে।

মিডিয়া ট্রান্সকোডিং চালু করতে টগল করুন

ছবি ৩. USB পছন্দসই স্ক্রিনে মিডিয়া ট্রান্সকোডিং চালু করতে টগল করুন।

ট্রান্সকোড করা ফাইলের জন্য অনুরোধ করার ক্ষেত্রে বিধিনিষেধ

ট্রান্সকোডিংয়ের অনুরোধ যাতে দীর্ঘ সময় ধরে সিস্টেম রিসোর্স লক করে রাখতে না পারে, তার জন্য ট্রান্সকোডিং সেশনের অনুরোধকারী অ্যাপের উপর নিম্নলিখিত বিধিনিষেধ আরোপ করা হয়:

  • পরপর ১০টি সেশন
  • মোট তিন মিনিট সময় লাগবে

কোনও অ্যাপ এইসব বিধিনিষেধের সবগুলি লঙ্ঘন করলে, ফ্রেমওয়ার্ক আসল ফাইল ডেসক্রিপ্টর রিটার্ন করে।

প্রয়োজনীয় ডিভাইস

মানানসই মিডিয়া ট্রান্সকোডিং ফিচারের জন্য, ডিভাইসকে অবশ্যই নিম্নলিখিত প্রয়োজনীয়তা পূরণ করতে হবে:

  • ডিভাইসের নেটিভ ক্যামেরা অ্যাপে ডিফল্ট হিসেবে HEVC এনকোডিং চালু আছে
  • (HDR থেকে SDR ট্রান্সকোডিং কাজ করে এমন ডিভাইস) ডিভাইস HDR ভিডিও ক্যাপচার করতে পারে

মিডিয়া ট্রান্সকোডিংয়ের জন্য ডিভাইসের পারফর্ম্যান্স নিশ্চিত করতে, ভিডিও হার্ডওয়্যার ও স্টোরেজ রিড/রাইট অ্যাক্সেস পারফর্ম্যান্স অপ্টিমাইজ করতে হবে। মিডিয়া কোডেককে 1-এর সমান অগ্রাধিকার দিয়ে কনফিগার করা হলে, কোডেককে অবশ্যই সর্বাধিক সম্ভাব্য থ্রুপুটে কাজ করতে হবে। আমরা সাজেস্ট করি যে ট্রান্সকোডিং পারফর্ম্যান্স যেন কমপক্ষে ২০০ 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 সোর্স কোড নিচে দেওয়া হল।

HDR থেকে SDR এনকোডিং

HDR থেকে SDR এনকোডিংয়ের সুবিধা দিতে, ডিভাইস প্রস্তুতকারকরা AOSP স্যাম্পেল Codec 2.0 ফিল্টার প্লাগ-ইন ব্যবহার করতে পারেন, যেটি /platform/frameworks/av/media/codec2/hidl/plugin/-এ আছে। এই বিভাগে ফিল্টার প্লাগ-ইন কীভাবে কাজ করে, কীভাবে প্লাগ-ইন প্রয়োগ করতে হয় এবং কীভাবে প্লাগ-ইন পরীক্ষা করতে হয় তা বর্ণনা করা হয়েছে।

কোনও ডিভাইসে HDR থেকে SDR এনকোডিং সাপোর্ট করে এমন কোনও প্লাগ-ইন না থাকলে, HDR ভিডিও অ্যাক্সেস করা অ্যাপটি ম্যানিফেস্টে ঘোষণা করা অ্যাপের মিডিয়া ক্ষমতা নির্বিশেষে আসল ফাইল ডেসক্রিপ্টর পায়।

এটি কীভাবে কাজ করে

এই বিভাগে Codec 2.0 ফিল্টার প্লাগ-ইনের সাধারণ আচরণ বর্ণনা করা হয়েছে।

ব্যাকগ্রাউন্ড

Android, Codec 2.0 ইন্টারফেস এবং 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 বিবরণ

এই বিভাগে FilterWrapper ক্লাসের বিবরণ দেওয়া আছে।

ক্রিয়েশন

র‍্যাপ করা কম্পোনেন্ট তৈরি করার সময় অন্তর্নিহিত ডিকোডার এবং সব সংজ্ঞায়িত ফিল্টার ইনস্ট্যানশিয়েট করে।

কোয়েরি ও কনফিগারেশন

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

কোয়েরি ও কনফিগারেশন

ছবি ৫. কোয়েরি ও কনফিগারেশন।

শুরু করুন

শুরুতে, র‍্যাপ করা কম্পোনেন্ট ডিকোডার এবং বাফার পরিবর্তন করে এমন সব ফিল্টার চালু করে। কোনও ফিল্টার চালু না থাকলে, র‍্যাপ করা কম্পোনেন্ট, ডিকোডার ও পাস-থ্রু বাফার চালু করে এবং ডিকোডারকে কমান্ড পাঠায়।

বাফার ম্যানেজ করা

বাফার ম্যানেজ করা

ছবি ৬. বাফার ম্যানেজ করা।

র‍্যাপ করা ডিকোডারে সারিবদ্ধ বাফারগুলি অন্তর্নিহিত ডিকোডারে যায়। র‍্যাপ করা কম্পোনেন্ট, ডিকোডার থেকে onWorkDone_nb() কলব্যাক ব্যবহার করে আউটপুট বাফার নেয় এবং তারপরে সেটি ফিল্টারে যোগ করে। শেষ ফিল্টার থেকে পাওয়া ফাইনাল আউটপুট বাফার ক্লায়েন্টকে জানানো হয়।

এই বাফার হ্যান্ডলিং কাজ করার জন্য, র‍্যাপ করা কম্পোনেন্টকে অবশ্যই C2PortBlockPoolsTuning শেষ ফিল্টারে কনফিগার করতে হবে যাতে ফ্রেমওয়ার্ক আউটপুট বাফার প্রত্যাশিত ব্লক পুল থেকে আসে।

বন্ধ করা, রিসেট করা ও রিলিজ করা

বন্ধ করার সময়, র‍্যাপ করা কম্পোনেন্ট ডিকোডার এবং চালু করা সব ফিল্টার বন্ধ করে দেয় যা চালু করা হয়েছিল। রিসেট ও রিলিজ করার সময়, সব কম্পোনেন্ট রিসেট বা রিলিজ হয়ে যায় সেগুলি চালু থাকুক বা না থাকুক।

স্যাম্পেল ফিল্টার প্লাগ-ইন প্রয়োগ করুন

প্লাগ-ইন চালু করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. লাইব্রেরিতে FilterPlugin ইন্টারফেস প্রয়োগ করুন এবং /vendor/lib[64]/libc2filterplugin.so.-এ এটি ড্রপ করুন
  2. প্রয়োজন হলে mediacodec.te-এ অতিরিক্ত অনুমতি যোগ করুন।
  3. অ্যাডাপ্টেশন লেয়ারকে Android 12-এ আপডেট করুন এবং media.c2 পরিষেবা আবার তৈরি করুন।

প্লাগ-ইন পরীক্ষা করা

স্যাম্পেল প্লাগ-ইন পরীক্ষা করতে, নিম্নলিখিত কাজগুলি করুন:

  1. ডিভাইসটি আবার তৈরি ও ফ্ল্যাশ করুন।
  2. নিম্নলিখিত কমান্ড ব্যবহার করে স্যাম্পেল প্লাগ-ইন তৈরি করুন:

    m sample-codec2-filter-plugin
    
  3. ডিভাইস আবার মাউন্ট করুন এবং ভেন্ডর প্লাগ-ইনের নাম পরিবর্তন করুন যাতে এটি কোডেক পরিষেবা দ্বারা শনাক্ত করা যায়।

    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