Hardware decoding خصوصی GPU چپس، DSP یا SoC کے اندر ویڈیو پروسیسنگ بلاکس کا استعمال کرتے ہوئے میڈیا ڈیٹا کا ہارڈویئر ڈی کمپریشن ہے۔ سافٹ ویئر ڈی کوڈنگ کے برعکس، ہارڈویئر ڈی کوڈنگ جسمانی سرکٹس پر انجام دی جاتی ہے جو خصوصی طور پر ویڈیو ڈی کمپریشن کے لیے ڈیزائن کیے گئے ہیں۔ Apple VideoToolbox دستاویزات (2026) کے مطابق، A سیریز کے چپس پر ہارڈویئر ڈی کوڈنگ 60 FPS پر 4K H.264 کے لیے توانائی کی کارکردگی 0.3 واٹ حاصل کرتی ہے۔
اہم نکات
Hardware decoding میڈیا ڈیٹا کو ڈی کمپریس کرنے کا عمل ہے جو عام مقصد کے CPU پر نہیں، بلکہ سسٹم آن چپ (SoC) میں ضم شدہ خصوصی انٹیگریٹڈ سرکٹس پر انجام دیا جاتا ہے۔ ایسے بلاکس کو ویڈیو ڈی کوڈر یا VPU (Video Processing Unit) کہا جاتا ہے اور یہ ASIC ایکسلریٹر ہیں جو مخصوص کمپریشن الگورتھم کے لیے بہتر بنائے گئے ہیں۔
جدید موبائل SoCs میں ہر مقبول کوڈیک کے لیے علیحدہ ہارڈویئر بلاکس ہوتے ہیں۔ مثال کے طور پر، Apple A17 Pro چپ میں H.264, H.265, VP9, AV1 اور ProRes کے لیے ڈی کوڈرز شامل ہیں۔ ہر بلاک ایک مکمل پروسیسنگ پائپ لائن ہے جو ان پٹ پر کمپریسڈ بٹ اسٹریم قبول کرنے اور CPU کی شرکت کے بغیر آؤٹ پٹ پر YUV یا BGRA فارمیٹ میں تیار ڈی کوڈڈ فریم فراہم کرنے کی اہل ہے۔
ہارڈویئر ڈی کوڈنگ 2012–2013 میں موبائل انڈسٹری میں معیار بن گئی، جب Qualcomm Snapdragon 800 اور Apple A7 نے پہلی بار سرشار H.264 ڈی کوڈنگ بلاکس شامل کیے۔ اس کے بعد سے، ٹیکنالوجی ایک فارمیٹ کی حمایت سے آفاقی ملٹی فارمیٹ بلاکس تک ترقی کر گئی ہے جو ایک ساتھ متعدد اسٹریمز ڈی کوڈ کرنے کی اہل ہے — مثال کے طور پر، علیحدہ ویڈیو اسٹریم کے ساتھ PiP کے لیے۔
ہارڈویئر ڈی کوڈنگ کا عمل سافٹ ویئر ڈی کوڈنگ سے یکسر مختلف ہے۔ ترتیب وار CPU ہدایات پر عمل درآمد کے بجائے، ہارڈویئر بلاک ڈی کمپریشن کے ہر مرحلے کے لیے جسمانی سرکٹس لاگو کرتا ہے: اینٹروپی ڈی کوڈنگ، معکوس کوانٹائزیشن، معکوس DCT اور حرکت معاوضہ۔
ایک عام ہارڈویئر ڈی کوڈر کئی پائپ لائن مراحل پر مشتمل ہوتا ہے۔ پہلا مرحلہ اینٹروپی ڈی کوڈر ہے، جو CABAC یا CAVLC کے لیے محدود حالت مشین (FSM) کے طور پر لاگو کیا جاتا ہے۔ سافٹ ویئر کے نفاذ کے برعکس جہاں ہر بٹ مشروط برانچنگ کے ساتھ پروسیس کیا جاتا ہے، ہارڈویئر CABAC متوازی سیاق و سباق کی پیشن گوئی سرکٹس استعمال کرتا ہے، جو فی سائیکل ایک کے بجائے 2–3 بٹس پروسیس کرنے کی اجازت دیتا ہے۔
دوسرا مرحلہ معکوس DCT بلاک ہے۔ سافٹ ویئر DCT کو CPU پر ضرب جمع لوپس کی ضرورت ہوتی ہے۔ ہارڈویئر نفاذ ایک میٹرکس ضارب استعمال کرتا ہے جو ایک سائیکل میں 8x8 بلاک کے تمام 64 گتانکوں کا حساب لگاتا ہے۔ ہارڈویئر معکوس DCT 400–600 MHz پر کام کرتا ہے اور فی سیکنڈ 4 ملین میکرو بلاکس تک پروسیس کرتا ہے، جو ریئل ٹائم 8K ویڈیو ڈی کوڈنگ کے لیے کافی ہے۔
تیسرا مرحلہ حرکت معاوضہ (MC) ماڈیول ہے۔ معکوس DCT کے متوازی، ہارڈویئر بلاک بٹ اسٹریم سے حرکت ویکٹر وصول کرتا ہے اور ڈی کوڈڈ فریم بفر سے حوالہ والے علاقے نکالتا ہے۔ DPB بفر (Decoded Picture Buffer) 16 تک حوالہ فریم ذخیرہ کرتا ہے، جس تک ایک خصوصی کم تاخیر کیش میموری کے ذریعے رسائی حاصل کی جاتی ہے۔ جدید ڈی کوڈرز انکولی اسموتھنگ اور سب پکسل انٹرپولیشن کے ساتھ پیشن گوئی استعمال کرتے ہیں، جو H.265 اور AV1 کے لیے اہم ہے۔
ہارڈویئر ڈی کوڈر کا انتظام DMA کنٹرولر کے ذریعے ہوتا ہے۔ ایپلیکیشن ڈی کوڈر کو مشترکہ میموری میں کمپریسڈ ڈیٹا کا پوائنٹر بھیجتی ہے، اور ڈی کوڈر براہ راست میموری رسائی کے ذریعے بٹ اسٹریم پڑھتا ہے۔ فریم ڈی کوڈنگ مکمل ہونے کے بعد، ایک انٹرپٹ ڈرائیور کو مطلع کرتا ہے، اور تیار فریم آؤٹ پٹ بفر پول میں دستیاب ہو جاتا ہے۔ یہ طریقہ کار ڈیٹا پروسیسنگ کے دوران CPU بوجھ کو مکمل طور پر ختم کر دیتا ہے — پروسیسر صرف ڈی کوڈنگ شروع کرتا ہے اور حتمی نتیجہ وصول کرتا ہے۔
دونوں موبائل پلیٹ فارم ہارڈویئر ڈی کوڈنگ کے لیے مقامی APIs فراہم کرتے ہیں، لیکن بفر مینجمنٹ اور ڈی کوڈر لائف سائیکل کے مختلف طریقوں کے ساتھ۔ iOS پر VideoToolbox ڈسپلے آؤٹ پٹ کے لیے Metal کے ساتھ مضبوطی سے مربوط ہے، جبکہ Android پر MediaCodec براہ راست رینڈرنگ کے لیے Surface استعمال کرتا ہے۔
| پیرامیٹر | VideoToolbox (iOS) | MediaCodec (Android) |
|---|---|---|
| آؤٹ پٹ فارمیٹ | CVPixelBuffer (Metal/OpenGL) | Surface یا ByteBuffer |
| میموری مینجمنٹ | پول کے ذریعے خودکار | dequeue کے ذریعے دستی |
| تھریڈ سیفٹی | ہاں، غیر مطابقت پذیر کال بیک | ہاں، مطابقت پذیر API |
| HDR سپورٹ | ہاں (PQ, HLG) | ہاں (HDR10, HDR10+) |
| ملٹی ڈی کوڈنگ | 4 سیشنز تک (A17) | SoC پر منحصر |
VideoToolbox iOS اور macOS پر ہارڈویئر ڈی کوڈنگ کے لیے ایک فریم ورک ہے۔ یہ غیر مطابقت پذیر ڈی کوڈنگ ماڈل استعمال کرتا ہے: VTDecompressionSessionDecodeFrame فوری طور پر واپس آتا ہے، اور تیار فریم ایک علیحدہ قطار میں کال بیک کے ذریعے آتے ہیں۔ VideoToolbox خود بخود پکسل بفر پول (CVPixelBufferPool) کا انتظام کرتا ہے اور نئے فریموں کے لیے آزاد کردہ بفرز کو دوبارہ استعمال کر سکتا ہے۔ HDR ویڈیو کے لیے، VideoToolbox ITU-R BT.2020 رنگوں کی جگہوں اور PQ/HLG EOTF کو سپورٹ کرتا ہے۔
MediaCodec ان پٹ اور آؤٹ پٹ بفر قطاروں کے ساتھ ایک مطابقت پذیر ماڈل استعمال کرتا ہے۔ ایپلیکیشن چکراتی طور پر کمپریسڈ ڈیٹا بھیجنے کے لیے dequeueInputBuffer اور ڈی کوڈڈ نتیجہ حاصل کرنے کے لیے dequeueOutputBuffer کو کال کرتی ہے۔ یہ طریقہ ڈویلپر کو ڈی کوڈنگ کی رفتار پر مکمل کنٹرول دیتا ہے، جو آڈیو ویڈیو ہم آہنگی کے لیے اہم ہے۔ ڈسپلے آؤٹ پٹ کے لیے، MediaCodec ایک Surface قبول کرتا ہے، جو CPU کاپی کے بغیر براہ راست GPU ڈی کوڈنگ کی اجازت دیتا ہے۔
ہارڈویئر ڈی کوڈنگ سافٹ ویئر کے مقابلے میں تین اہم فوائد فراہم کرتی ہے: توانائی کی کارکردگی، کارکردگی اور استحکام۔ ہر ایک محدود بیٹری وسائل اور تھرمل رکاوٹوں والے موبائل آلات کے لیے اہم ہے۔
ہارڈویئر ڈی کوڈنگ کا بنیادی فائدہ بنیادی طور پر کم بجلی کی کھپت ہے۔ ایک عام H.264/H.265 ہارڈویئر ڈی کوڈر ریئل ٹائم میں 1080p ویڈیو ڈی کوڈ کرتے وقت 0.2–0.5 واٹ استعمال کرتا ہے۔ موازنہ کے طور پر، CPU پر اسی اسٹریم کی سافٹ ویئر ڈی کوڈنگ پروسیسر آرکیٹیکچر پر منحصر 1.5–4 واٹ استعمال کرتی ہے۔ 5–10 گنا فرق براہ راست بیٹری کی زندگی کو متاثر کرتا ہے: ہارڈویئر ڈی کوڈنگ کے ساتھ، ویڈیو پلے بیک CPU پر سافٹ ویئر ڈی کوڈنگ کے ساتھ 2–4 گھنٹے کے مقابلے میں 10–15 گھنٹے فلمیں دیکھنے کی اجازت دیتا ہے۔
توانائی کی کارکردگی تنگ تخصص کے ذریعے حاصل کی جاتی ہے۔ CPU کے برعکس، جو ہدایات کی ایک وسیع رینج پر عمل کرتا ہے اور پیچیدہ کنٹرول منطق رکھتا ہے، ہارڈویئر ڈی کوڈر میں صرف ایک مخصوص الگورتھم کے لیے ضروری سرکٹس ہوتے ہیں۔ ایسے بلاکس کی کلاک فریکوئنسی CPU کے 2–3 GHz کے مقابلے میں 200–600 MHz ہے، جو وولٹیج کے مربع کے تناسب سے متحرک بجلی کی کھپت کو کم کرتی ہے۔
ہارڈویئر ڈی کوڈنگ اعلی ریزولوشن کے لیے بھی ضمانت شدہ فریم ریٹ فراہم کرتی ہے۔ پائپ لائن آرکیٹیکچر کی بدولت، ہارڈویئر بلاک ایک ساتھ متعدد ڈی کمپریشن مراحل پر کارروائی کر سکتا ہے: جب ایک ماڈیول اگلے میکرو بلاک کے لیے اینٹروپی ڈی کوڈنگ کر رہا ہوتا ہے، دوسرا پہلے ہی موجودہ پر معکوس DCT لاگو کر رہا ہوتا ہے۔ ایسی ہم آہنگی CPU پر ناقابل حصول ہے، جہاں ہر مرحلہ ایک ترتیب وار عمل ہے۔
ہارڈویئر ڈی کوڈر کا حرارت کا اخراج نمایاں طور پر کم ہے: 4K ویڈیو ڈی کوڈنگ کے دوران ایک عام بلاک CPU کے 2–6 واٹ کے مقابلے میں 0.3–0.8 واٹ حرارت خارج کرتا ہے۔ اس کا مطلب ہے کہ آلہ طویل دیکھنے کے دوران بھی زیادہ گرم نہیں ہوتا، تھروٹلنگ نہیں ہوتی، اور صارف کو بغیر گراوٹ کے مستحکم 60 FPS ملتا ہے۔ ہارڈویئر ڈی کوڈنگ کے دوران کیس کا درجہ حرارت عام طور پر سافٹ ویئر ڈی کوڈنگ کے مقابلے میں 5–10 ڈگری کم ہوتا ہے، جو فعال کولنگ کے بغیر ٹیبلیٹس کے لیے خاص طور پر اہم ہے۔
آئیے VideoToolbox کے ذریعے iOS پر کال بیک ہینڈلنگ اور MediaCodec کے ذریعے Android پر مکمل پائپ لائن کے ساتھ ہارڈویئر ڈی کوڈنگ کے عملی نفاذ کو دیکھتے ہیں۔
import VideoToolbox
import CoreMedia
class HardwareDecoder {
var session: VTDecompressionSession?
func setup() {
let formatDesc = createFormatDescription()
var callback = VTDecompressionOutputCallbackRecord(
decompressionOutputCallback: decodingCallback,
decompressionOutputRefCon: nil
)
VTDecompressionSessionCreate(
allocator: nil,
videoFormatDescription: formatDesc,
videoDecoderSpecification: nil,
destinationImageBufferAttributes: nil,
outputCallback: &callback,
decompressionSessionOut: &session
)
}
func decode(sampleBuffer: CMSampleBuffer) {
VTDecompressionSessionDecodeFrame(
session!, sampleBuffer: sampleBuffer,
flags: ._EnableAsynchronousDecompression,
frameRefcon: nil, infoFlagsOut: nil
)
}
}
کوڈ ایک غیر مطابقت پذیر کال بیک کے ساتھ VideoToolbox ڈی کوڈنگ سیشن بناتا ہے۔ VTDecompressionSessionCreate فراہم کردہ CMVideoFormatDescription کی بنیاد پر دستیاب ہارڈویئر ڈی کوڈر کا خود بخود پتہ لگاتا ہے۔ پرچم kVTDecodeFrame_EnableAsynchronousDecompression غیر مطابقت پذیر موڈ کو فعال کرتا ہے — ایپلیکیشن ڈی کوڈنگ کے دوران بلاک نہیں ہوتی اور کال بیک کے ذریعے فریم وصول کرتی ہے۔ H.264 کے لیے، پہلے CMVideoFormatDescriptionCreateFromH264ParameterSets کے ذریعے SPS/PPS NAL یونٹس سے فارمیٹ تفصیل بنانا ضروری ہے۔
class HardwareDecoder(private val surface: Surface) {
private var mediaCodec: MediaCodec? = null
fun initDecoder(mimeType: String, width: Int, height: Int) {
mediaCodec = MediaCodec.createDecoderByType(mimeType)
val format = MediaFormat.createVideoFormat(mimeType, width, height)
mediaCodec?.configure(format, surface, null, 0)
mediaCodec?.start()
}
fun feedFrame(data: ByteArray, pts: Long) {
val inputIndex = mediaCodec!!.dequeueInputBuffer(TIMEOUT_US)
if (inputIndex >= 0) {
val buffer = mediaCodec!!.getInputBuffer(inputIndex)
buffer?.put(data)
mediaCodec!!.queueInputBuffer(inputIndex, 0, data.size, pts, 0)
}
}
}
Kotlin میں کوڈ ایک Surface سے منسلک MediaCodec بناتا ہے، جو CPU کے ذریعے ڈیٹا کاپی کیے بغیر براہ راست ڈسپلے آؤٹ پٹ کو یقینی بناتا ہے۔ mimeType پیرامیٹر MediaFormat مستقل استعمال کرتا ہے: H.264 کے لیے video/avc، H.265 کے لیے video/hevc، AV1 کے لیے video/av01۔ dequeueInputBuffer طریقہ ٹائم آؤٹ کے ساتھ دستیاب ان پٹ بفر کا انتظار کرتا ہے؛ اگر کوئی بفر دستیاب نہیں ہے تو، موجودہ فریم چھوڑ دیا جاتا ہے، جو غیر مساوی بٹ ریٹ کے دوران قطار کے اوور فلو کو روکتا ہے۔
ہارڈویئر ڈی کوڈنگ زیادہ تر پروڈکشن منظرناموں کے لیے بہترین انتخاب ہے، لیکن یہ ایک آفاقی حل نہیں ہے۔ قابل اطلاق کی حدود کو سمجھنا ان حالات سے بچنے میں مدد کرتا ہے جہاں ہارڈویئر کوڈیک سپورٹ کی کمی صارف کے تجربے کو خراب کرتی ہے۔
ہارڈویئر ڈی کوڈنگ تین صورتوں میں لازمی ہے: طویل ویڈیو پلے بیک (30 منٹ سے زیادہ)، 4K مواد کی ڈی کوڈنگ، اور زیادہ سے زیادہ بیٹری کی زندگی پر مرکوز کوئی بھی ایپلیکیشن۔ سٹریمنگ سروسز (Netflix, YouTube, Twitch) خصوصی طور پر ہارڈویئر ڈی کوڈنگ استعمال کرتی ہیں، کیونکہ سافٹ ویئر زیادہ بٹ ریٹ اور بڑی ریزولوشن پر مستحکم پلے بیک کی ضمانت نہیں دے سکتا۔ ان خدمات کے لیے DRM سپورٹ (FairPlay, Widevine) اہم ہے، جو صرف ہارڈویئر بلاک کے ذریعے دستیاب ہے جو ڈی کوڈر سے ڈسپلے آؤٹ پٹ تک محفوظ پائپ لائن فراہم کرتا ہے۔
مربوط ویڈیو (کٹ سینز، اشتہارات، ان گیم سین میٹکس) والے گیمز کے لیے بھی ہارڈویئر ڈی کوڈنگ تجویز کی جاتی ہے۔ جدید گیم انجن جیسے Unity اور Unreal Engine میں VideoToolbox اور MediaCodec کے لیے بلٹ ان سپورٹ ہے۔ گیمز میں ہارڈویئر ڈی کوڈنگ فزکس سمولیشن، دشمن AI اور ان پٹ پروسیسنگ کے لیے CPU کو آزاد کرتی ہے، جس سے مجموعی کارکردگی بہتر ہوتی ہے۔
ہارڈویئر ڈی کوڈنگ کی بنیادی حد ہارڈویئر فارمیٹ سپورٹ پر انحصار ہے۔ اگر SoC میں AV1 کے لیے ڈی کوڈر نہیں ہے (مثال کے طور پر، Snapdragon 8 Gen 1 پر آلات)، تو ایپلیکیشن کو FFmpeg اور dav1d کے ذریعے سافٹ ویئر فال بیک فراہم کرنا ہوگا۔ یہی صورت حال پرانے آلات پر H.265 اور ProRes پر لاگو ہوتی ہے، جو ڈی کوڈنگ کے لیے صرف Apple A13+ چپس پر سپورٹ ہے۔ پلے بیک شروع کرنے سے پہلے مطلوبہ فارمیٹ کے لیے ہارڈویئر ڈی کوڈر کی دستیابی چیک کرنے اور متحرک طور پر ڈی کوڈنگ حکمت عملی منتخب کرنے کی سفارش کی جاتی ہے۔
دوسری حد بیک وقت ڈی کوڈنگ سیشنز کی تعداد ہے۔ زیادہ تر SoCs 1–2 متوازی ہارڈویئر ڈی کوڈرز کو سپورٹ کرتے ہیں۔ تیسرا سیشن کھولنے کی کوشش کرنے پر، API ایک خرابی واپس کرے گا اور ایپلیکیشن کو سافٹ ویئر ڈی کوڈنگ پر سوئچ کرنا ہوگا۔ سیشنز کی تعداد SoC بنانے والے پر منحصر ہے: Apple چپس A17 Pro پر 4 H.264 ڈی کوڈنگ سیشنز تک کی اجازت دیتی ہیں، جبکہ Snapdragon 8 Gen 2 H.265 کے لیے 2 تک اور VP9 کے لیے کل 2 تک سپورٹ کرتا ہے۔
اکثر پوچھے گئے سوالات
iOS پر، VTDecompressionSessionCopySupportedPropertyDictionary استعمال کریں اور kVTDecompressionPropertyKey_UsingHardwareAcceleratedVideoDecoder چیک کریں۔ Android پر، ڈی کوڈر بنانے کے بعد MediaCodec.getCodecInfo().isHardwareAccelerated() کال کریں۔ اگر پرچم false ہے تو، سافٹ ویئر ڈی کوڈر استعمال ہو رہا ہے، عام طور پر OMX.google.*۔
ہاں، سٹریمنگ سروسز میں DRM مواد کے لیے ہارڈویئر ڈی کوڈنگ لازمی ہے۔ iOS پر FairPlay اور Android پر Widevine L1 کو ڈی کوڈر سے ڈسپلے آؤٹ پٹ تک محفوظ پائپ لائن کی ضرورت ہوتی ہے، جہاں ڈی کوڈڈ فریم ایپلیکیشن کے لیے ناقابل رسائی ہوتے ہیں۔ ایسی پائپ لائن صرف محفوظ سیشن سپورٹ کے ساتھ ہارڈویئر ڈی کوڈنگ سے ممکن ہے۔
VDADecoder (Video Decode Acceleration) iOS 6–8 کا ایک پرانا فریم ورک ہے، جسے VideoToolbox نے بدل دیا ہے۔ VideoToolbox H.265، HDR اور ملٹی تھریڈنگ کی سپورٹ کے ساتھ زیادہ جدید اور لچکدار API فراہم کرتا ہے۔ VDADecoder نئے پروجیکٹس کے لیے تجویز نہیں کیا جاتا — VideoToolbox سے VTDecompressionSession استعمال کریں۔
زیادہ تر معاملات میں، نہیں۔ iOS پر، ہارڈویئر ڈی کوڈر کو بجلی کی کھپت کی حدود کی وجہ سے ایک فعال پیش منظر ایپلیکیشن کی ضرورت ہوتی ہے۔ Android پر، ایک سروس میں MediaCodec کے ذریعے پس منظر ڈی کوڈنگ ممکن ہے، لیکن کارکردگی کم ہو سکتی ہے۔ استثنا PiP موڈ ہے، جہاں سسٹم فلوٹنگ ونڈو میں ہارڈویئر ڈی کوڈنگ کی اجازت دیتا ہے۔
مطلق رہنما H.264 ہے، جو 100% جدید موبائل آلات پر ہارڈویئر ڈی کوڈ کیا جاتا ہے۔ H.265 تقریباً 80% آلات (iOS 8+، مناسب SoC کے ساتھ Android 5+) پر سپورٹ ہے۔ AV1 سب سے محدود ہے: Snapdragon 8 Gen 2، Exynos 2200 اور Apple A17 Pro کے ساتھ صرف 2023+ آلات پر ہارڈویئر سپورٹ۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں