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

উন্নয়ন পাইপলাইনটি নিম্নলিখিত ধাপগুলোর মাধ্যমে বাস্তবায়িত হয়:
পর্যায় ১. উন্নয়ন সেশনটি সেট আপ করুন
১. ইনপুট সারফেস প্রদান করুন : আপনার অ্যাপ প্রসেসিংয়ের জন্য ফ্রেম অ্যাক্সেস করতে এনহ্যান্সমেন্ট ফ্রেমওয়ার্ককে একটি ইনপুট সারফেস হ্যান্ডেল প্রদান করে।
২. আউটপুট সারফেস সেট করুন : আপনার অ্যাপ সরাসরি ফ্রেমওয়ার্কের সাথে রেন্ডারিং টার্গেট (যেমন একটি SurfaceView বা TextureView ) সরবরাহ ও সংযুক্ত করে।
পর্যায় ২. একটি ইনপুট ফ্রেম তৈরি করুন।
৩. মূল মিডিয়া প্রস্তুত করুন : আপনার অ্যাপ মূল অসংকুচিত মিডিয়া সংগ্রহ করে। উদাহরণস্বরূপ, স্থানীয় ডিস্ক থেকে একটি ফাইল পড়ার মাধ্যমে।
৪. ফ্রেম ডেটা ইনজেক্ট করুন : আপনার অ্যাপ সরাসরি র ইমেজ পেলোডটি বাউন্ড ইনপুট সারফেস পাইপলাইনে লিখে দেয়।
পর্যায় ৩. প্রক্রিয়া ও উন্নতকরণ
৫. এআই প্রসেসিং সম্পাদন করা : ফ্রেমওয়ার্কটি ডিভাইসের জিপিইউ বা এনপিইউ-তে ফ্রেমটিকে প্রসেস করে এবং টোনম্যাপিং, ডিব্লারিং বা আপস্কেলিং-এর মতো মেশিন লার্নিং উন্নতকরণ প্রয়োগ করে।
৬. উন্নত ফ্রেম সরবরাহ করা : ইঞ্জিনটি উন্নত, পূর্ণ-রেজোলিউশনের ফ্রেমটি সরাসরি বাউন্ড আউটপুট সারফেসে প্রদান করে।
পর্যায় ৪. ফলাফল প্রদর্শন বা সংরক্ষণ করুন।
৭. আউটপুট চূড়ান্তকরণ : আপনার অ্যাপ প্রক্রিয়াজাত হার্ডওয়্যার স্ট্রিম বাফারটি গ্রহণ করে সেটিকে UI-তে রেন্ডার করতে বা স্টোরেজে পুনরায় সংরক্ষণ করতে।
EnhancementSession হলো একটি হেভিওয়েট কনটেক্সট অবজেক্ট যা একটি স্থায়ী GPU বা NPU মেমরি পাইপলাইন বজায় রাখে। এটি ডেডিকেটেড ভিডিও র্যাম (VRAM) এবং নেটিভ সিস্টেম হ্যান্ডেল বরাদ্দ করে। গুরুতর মেমরি লিক এবং সম্ভাব্য OutOfMemoryError ক্র্যাশ প্রতিরোধ করতে, নিম্নলিখিত লাইফসাইকেল নীতিগুলি মেনে চলুন:
- লেজি ইনস্ট্যানসিয়েশন : ব্যবহারকারী কোনো উন্নয়নমূলক কাজ শুরু না করা পর্যন্ত সেশন তৈরি করবেন না।
- কৌশলগত পুনঃব্যবহার : একই কনফিগারেশন (ডাইমেনশন এবং টগল করা অপশন) সহ স্ট্রিম বা ফ্রেম প্রসেস করার সময় একটিমাত্র সেশন ইনস্ট্যান্স বজায় রাখুন এবং পুনঃব্যবহার করুন।
- দ্রুত টিয়ারডাউন : ভিজ্যুয়াল টাস্কগুলো শেষ হওয়ার সাথে সাথে শেয়ার করা হার্ডওয়্যার রিসোর্স মুক্ত করতে
session.release()কল করুন।
উন্নয়ন ইঞ্জিন শুরু করুন
এই পদ্ধতিটি দুটি ধাপে যাচাই করে। এটি প্রথমে যাচাই করে যে ডিভাইসটির হার্ডওয়্যার অ্যাক্সিলারেশন সমর্থন করে কি না, এবং তারপর প্রয়োজনীয় মেশিন লার্নিং মডিউলগুলো উপস্থিত আছে কি না তা নিশ্চিত করে।
পূর্বশর্তমূলক পদক্ষেপ হিসেবে এটি চালালে, আপনার অ্যাপ মিডিয়া প্রসেস করার চেষ্টা করার আগেই সক্ষমতা যাচাই করার মাধ্যমে রানটাইম ইনিশিয়ালাইজেশন ব্যর্থতা প্রতিরোধ করা যায়।
class MediaSetupViewModel(application: Application) : AndroidViewModel(application) {
private val enhancementClient = Enhancement.getClient(application)
fun initializeEnhancementEngine() {
viewModelScope.launch {
try {
// 1. Verify hardware capability
val isSupported = enhancementClient.isDeviceSupportedAsync()
if (!isSupported) {
notifyUiDeviceIncompatible()
return@launch
}
// 2. Verify and download the Google Play services ML modules
val isInstalled = enhancementClient.isModuleInstalledAsync()
if (!isInstalled) {
notifyUiDownloadingModels()
enhancementClient.installModule().await()
}
notifyUiEngineReady()
} catch (e: Exception) {
// Handle potential errors during session creation or image
// processing.
handleInitializationError(e)
}
}
}
}
বাস্তবায়ন: সারফেস মোড (সারফেস ইন, সারফেস আউট)
সারফেস এক্সিকিউশন মোড ( EnhancementMode.SURFACE ) সিপিইউ এবং জিপিইউ মেমরি বাফারের মধ্যে ফ্রেম স্থানান্তরের অতিরিক্ত পারফরম্যান্স সমস্যা এড়িয়ে চলে। এর পরিবর্তে, এনহ্যান্সমেন্ট লাইব্রেরিটি সরাসরি র হার্ডওয়্যার বাফার ম্যাপ করে, একটি ইনপুট সারফেস থেকে ফ্রেম পড়ে, সেগুলোকে নিজস্বভাবে প্রসেস করে এবং সরাসরি একটি আউটপুট সারফেসে পাঠিয়ে দেয়।
একক-ফ্রেম পৃষ্ঠের স্ন্যাপশট
এই পদ্ধতিটি একটিমাত্র হার্ডওয়্যার-ডিকোড করা ইমেজ ফ্রেমে দক্ষতার সাথে ইফেক্ট প্রয়োগ করতে ব্যবহৃত হয়।
// Provisions input Surface (for example, ImageReader) and output Surface (for
// example, SurfaceView)
val inputSurface: Surface = imageReader.surface
val outputSurface: Surface = surfaceView.holder.surface
// 1. Configure parameters for SURFACE mode
val surfaceOptions = EnhancementOptions(
imageReader.width,
imageReader.height,
EnhancementMode.SURFACE,
enableTonemap = true,
enableDeblurDenoise = true,
enableFaceDetection = false
).also {
// 2. Bind hardware surfaces
it.setInputSurface(inputSurface)
it.setOutputSurface(outputSurface)
}
// 3. Create the session to process the hardware frame
val singleFrameSession = enhancementClient.createSessionAsync(surfaceOptions, executor)
// The API processes the single frame. Upon completion, release the session.
singleFrameSession.release()