मल्टीमीडिया टनलिंग एक हार्डवेयर वीडियो डिकोडर के माध्यम से सीधे एक डिस्प्ले पर संकुचित वीडियो डेटा को सुरंग में सक्षम बनाता है, बिना ऐप कोड या एंड्रॉइड फ्रेमवर्क कोड द्वारा संसाधित किए। एंड्रॉइड स्टैक के नीचे डिवाइस-विशिष्ट कोड यह निर्धारित करता है कि कौन से वीडियो फ़्रेम को डिस्प्ले पर भेजना है और उन्हें निम्न प्रकार की आंतरिक घड़ी के साथ वीडियो फ्रेम प्रस्तुति टाइमस्टैम्प की तुलना करके कब भेजना है:
एंड्रॉइड 5 या उच्चतर में ऑन-डिमांड वीडियो प्लेबैक के लिए, ऐप द्वारा पारित ऑडियो प्रस्तुति टाइमस्टैम्प के साथ सिंक्रनाइज़ की गई एक
AudioTrack
घड़ीएंड्रॉइड 11 या उच्चतर में लाइव प्रसारण प्लेबैक के लिए, ट्यूनर द्वारा संचालित प्रोग्राम रेफरेंस क्लॉक (पीसीआर) या सिस्टम टाइम क्लॉक (एसटीसी)
पार्श्वभूमि
एंड्रॉइड पर पारंपरिक वीडियो प्लेबैक ऐप को तब सूचित करता है जब एक संपीड़ित वीडियो फ्रेम को डीकोड किया गया हो। ऐप तब डीकोडेड वीडियो फ्रेम को डिस्प्ले पर रिलीज करता है, जिसे उसी सिस्टम क्लॉक टाइम पर संबंधित ऑडियो फ्रेम के रूप में प्रस्तुत किया जाता है, सही समय की गणना करने के लिए ऐतिहासिक AudioTimestamps
इंस्टेंस को पुनः प्राप्त करता है।
चूंकि टनल वीडियो प्लेबैक ऐप कोड को बायपास करता है और वीडियो पर काम करने वाली प्रक्रियाओं की संख्या को कम करता है, यह ओईएम कार्यान्वयन के आधार पर अधिक कुशल वीडियो रेंडरिंग प्रदान कर सकता है। यह वीडियो को प्रस्तुत करने के लिए एंड्रॉइड अनुरोधों के समय और सच्चे हार्डवेयर बनाम सिंक के समय के बीच संभावित तिरछा द्वारा पेश किए गए समय के मुद्दों से बचकर चुनी हुई घड़ी (पीआरसी, एसटीसी, या ऑडियो) को अधिक सटीक वीडियो ताल और सिंक्रनाइज़ेशन प्रदान कर सकता है। हालाँकि, टनलिंग GPU प्रभावों के लिए समर्थन को भी कम कर सकती है जैसे पिक्चर-इन-पिक्चर (PiP) विंडो में धुंधला या गोल कोनों, क्योंकि बफ़र्स Android ग्राफ़िक्स स्टैक को बायपास करते हैं।
निम्न आरेख दिखाता है कि कैसे टनलिंग वीडियो प्लेबैक प्रक्रिया को सरल बनाती है।
चित्रा 1. पारंपरिक और सुरंग वीडियो प्लेबैक प्रक्रियाओं की तुलना
ऐप डेवलपर्स के लिए
चूंकि अधिकांश ऐप डेवलपर प्लेबैक कार्यान्वयन के लिए लाइब्रेरी के साथ एकीकृत होते हैं, इसलिए अधिकांश मामलों में कार्यान्वयन के लिए केवल उस लाइब्रेरी को टनल किए गए प्लेबैक के लिए पुन: कॉन्फ़िगर करने की आवश्यकता होती है। टनल वाले वीडियो प्लेयर के निम्न-स्तरीय कार्यान्वयन के लिए, निम्न निर्देशों का उपयोग करें।
Android 5 या उच्चतर में ऑन-डिमांड वीडियो प्लेबैक के लिए:
SurfaceView
इंस्टेंस बनाएं।एक
audioSessionId
उदाहरण बनाएं।चरण 2 में बनाए गए
MediaCodec
इंस्टेंस के साथ ऑडियोट्रैक औरAudioTrack
इंस्टेंसaudioSessionId
।ऑडियो डेटा में पहले ऑडियो फ्रेम के लिए प्रेजेंटेशन टाइमस्टैम्प के साथ ऑडियो डेटा को ऑडियो
AudioTrack
पर कतारबद्ध करें।
Android 11 या उच्चतर में लाइव प्रसारण प्लेबैक के लिए:
SurfaceView
इंस्टेंस बनाएं।Tuner
सेavSyncHwId
इंस्टेंस प्राप्त करें।चरण 2 में बनाए गए
MediaCodec
इंस्टेंस के साथ ऑडियोट्रैक औरAudioTrack
इंस्टेंसavSyncHwId
।
एपीआई कॉल प्रवाह निम्नलिखित कोड स्निपेट में दिखाया गया है:
aab.setContentType(AudioAttributes.CONTENT_TYPE_MOVIE);
// configure for audio clock sync
aab.setFlag(AudioAttributes.FLAG_HW_AV_SYNC);
// or, for tuner clock sync (Android 11 or higher)
new tunerConfig = TunerConfiguration(0, avSyncId);
aab.setTunerConfiguration(tunerConfig);
if (codecName == null) {
return FAILURE;
}
// configure for audio clock sync
mf.setInteger(MediaFormat.KEY_AUDIO_SESSION_ID, audioSessionId);
// or, for tuner clock sync (Android 11 or higher)
mf.setInteger(MediaFormat.KEY_HARDWARE_AV_SYNC_ID, avSyncId);
ऑन-डिमांड वीडियो प्लेबैक का व्यवहार
चूंकि टनल किए गए ऑन-डिमांड वीडियो प्लेबैक को AudioTrack
प्लेबैक के साथ परोक्ष रूप से जोड़ा जाता है, टनल किए गए वीडियो प्लेबैक का व्यवहार ऑडियो प्लेबैक के व्यवहार पर निर्भर हो सकता है।
अधिकांश उपकरणों पर, डिफ़ॉल्ट रूप से, ऑडियो प्लेबैक शुरू होने तक वीडियो फ़्रेम रेंडर नहीं किया जाता है। हालाँकि, ऑडियो प्लेबैक शुरू करने से पहले ऐप को वीडियो फ्रेम रेंडर करने की आवश्यकता हो सकती है, उदाहरण के लिए, उपयोगकर्ता को खोजते समय वर्तमान वीडियो स्थिति दिखाने के लिए।
यह संकेत देने के लिए कि पहले कतारबद्ध वीडियो फ़्रेम को डिकोड करते ही रेंडर किया जाना चाहिए,
PARAMETER_KEY_TUNNEL_PEEK
पैरामीटर को1
पर सेट करें। जब संकुचित वीडियो फ़्रेम को कतार में पुन: व्यवस्थित किया जाता है (जैसे कि जब B-फ़्रेम मौजूद हों), तो इसका अर्थ है कि पहला प्रदर्शित वीडियो फ़्रेम हमेशा एक I-फ़्रेम होना चाहिए।यदि आप नहीं चाहते कि ऑडियो प्लेबैक शुरू होने तक पहला कतारबद्ध वीडियो फ़्रेम रेंडर किया जाए, तो इस पैरामीटर को
0
पर सेट करें।यदि यह पैरामीटर सेट नहीं है, तो OEM डिवाइस के व्यवहार को निर्धारित करता है।
जब ऑडियो डेटा ऑडियोट्रैक को प्रदान नहीं किया जाता है और बफ़र्स खाली होते हैं (ऑडियो
AudioTrack
), वीडियो प्लेबैक तब तक रुक जाता है जब तक कि अधिक ऑडियो डेटा नहीं लिखा जाता है क्योंकि ऑडियो घड़ी अब आगे नहीं बढ़ रही है।प्लेबैक के दौरान, ऑडियो प्रेजेंटेशन टाइमस्टैम्प में दिखाई देने वाली रुकावटों के लिए ऐप सही नहीं हो सकता है। जब ऐसा होता है, तो ओईएम वर्तमान वीडियो फ्रेम को रोककर नकारात्मक अंतराल को ठीक करता है, और सकारात्मक अंतराल को या तो वीडियो फ्रेम को गिराकर या मूक ऑडियो फ्रेम (ओईएम कार्यान्वयन के आधार पर) सम्मिलित करके ठीक करता है। सम्मिलित किए गए मूक ऑडियो फ़्रेम के लिए
AudioTimestamp
फ़्रेम स्थिति में वृद्धि नहीं होती है।
डिवाइस निर्माताओं के लिए
विन्यास
ओईएम को टनल किए गए वीडियो प्लेबैक का समर्थन करने के लिए एक अलग वीडियो डिकोडर बनाना चाहिए। इस डिकोडर को यह विज्ञापन देना चाहिए कि यह media_codecs.xml
फ़ाइल में टनल प्लेबैक करने में सक्षम है:
<Feature name="tunneled-playback" required="true"/>
जब एक टनल किए गए MediaCodec
इंस्टेंस को ऑडियो सत्र आईडी के साथ कॉन्फ़िगर किया जाता है, तो यह इस HW_AV_SYNC
आईडी के लिए AudioFlinger
से पूछताछ करता है:
if (entry.getKey().equals(MediaFormat.KEY_AUDIO_SESSION_ID)) {
int sessionId = 0;
try {
sessionId = (Integer)entry.getValue();
}
catch (Exception e) {
throw new IllegalArgumentException("Wrong Session ID Parameter!");
}
keys[i] = "audio-hw-sync";
values[i] = AudioSystem.getAudioHwSyncForSession(sessionId);
}
इस क्वेरी के दौरान, AudioFlinger
प्राथमिक ऑडियो डिवाइस से HW_AV_SYNC
आईडी पुनर्प्राप्त करता है और आंतरिक रूप से इसे ऑडियो सत्र आईडी से जोड़ता है:
audio_hw_device_t *dev = mPrimaryHardwareDev->hwDevice();
char *reply = dev->get_parameters(dev, AUDIO_PARAMETER_HW_AV_SYNC);
AudioParameter param = AudioParameter(String8(reply));
int hwAVSyncId;
param.getInt(String8(AUDIO_PARAMETER_HW_AV_SYNC), hwAVSyncId);
यदि कोई AudioTrack
इंस्टेंस पहले ही बनाया जा चुका है, तो HW_AV_SYNC
आईडी को उसी ऑडियो सत्र आईडी के साथ आउटपुट स्ट्रीम में भेज दिया जाता है। यदि इसे अभी तक नहीं बनाया गया है, तो AudioTrack
HW_AV_SYNC
को आउटपुट स्ट्रीम में भेज दिया जाता है। यह प्लेबैक थ्रेड द्वारा किया जाता है:
mOutput->stream->common.set_parameters(&mOutput->stream->common, AUDIO_PARAMETER_STREAM_HW_AV_SYNC, hwAVSyncId);
HW_AV_SYNC
आईडी, चाहे वह ऑडियो आउटपुट स्ट्रीम या Tuner
कॉन्फ़िगरेशन से मेल खाती हो, OMX या कोडेक2 घटक में पास की जाती है ताकि OEM कोड कोडेक को संबंधित ऑडियो आउटपुट स्ट्रीम या ट्यूनर स्ट्रीम से जोड़ सके।
घटक विन्यास के दौरान, OMX या कोडेक2 घटक को एक साइडबैंड हैंडल लौटाना चाहिए जिसका उपयोग कोडेक को हार्डवेयर कम्पोज़र (HWC) परत के साथ संबद्ध करने के लिए किया जा सकता है। जब ऐप किसी सतह को MediaCodec
के साथ जोड़ता है, तो यह साइडबैंड हैंडल SurfaceFlinger
के माध्यम से HWC को पास कर दिया जाता है, जो परत को साइडबैंड परत के रूप में कॉन्फ़िगर करता है।
err = native_window_set_sideband_stream(nativeWindow.get(), sidebandHandle);
if (err != OK) {
ALOGE("native_window_set_sideband_stream(%p) failed! (err %d).", sidebandHandle, err);
return err;
}
HWC उचित समय पर कोडेक आउटपुट से नए इमेज बफ़र्स प्राप्त करने के लिए ज़िम्मेदार है, या तो संबंधित ऑडियो आउटपुट स्ट्रीम या ट्यूनर प्रोग्राम रेफरेंस क्लॉक के साथ सिंक्रोनाइज़ किया जाता है, बफ़र्स को अन्य लेयर्स की वर्तमान सामग्री के साथ कंपोज़िट करता है, और परिणामी इमेज प्रदर्शित करता है। यह सामान्य तैयारी और सेट चक्र से स्वतंत्र रूप से होता है। तैयार और सेट कॉल तभी होती है जब अन्य परतें बदलती हैं, या जब साइडबैंड परत (जैसे स्थिति या आकार) के गुण बदलते हैं।
ओएमएक्स
एक टनल वाले डिकोडर घटक को निम्नलिखित का समर्थन करना चाहिए:
OMX.google.android.index.configureVideoTunnelMode
विस्तारित पैरामीटर सेट करना, जो ऑडियो आउटपुट डिवाइस से संबद्धHW_AV_SYNC
आईडी में पास करने के लिएConfigureVideoTunnelModeParams
संरचना का उपयोग करता है।OMX_IndexConfigAndroidTunnelPeek
पैरामीटर को कॉन्फ़िगर करना जो कोडेक को पहले डिकोड किए गए वीडियो फ्रेम को रेंडर करने या न करने के लिए कहता है, भले ही ऑडियो प्लेबैक शुरू हो गया हो या नहीं।OMX_EventOnFirstTunnelFrameReady
ईवेंट भेजना जब पहले टनल किए गए वीडियो फ़्रेम को डिकोड किया गया हो और रेंडर करने के लिए तैयार हो।
AOSP कार्यान्वयन OMXNodeInstance
में ACodec
के माध्यम से सुरंग मोड को कॉन्फ़िगर करता है जैसा कि निम्नलिखित कोड स्निपेट में दिखाया गया है:
OMX_INDEXTYPE index;
OMX_STRING name = const_cast<OMX_STRING>(
"OMX.google.android.index.configureVideoTunnelMode");
OMX_ERRORTYPE err = OMX_GetExtensionIndex(mHandle, name, &index);
ConfigureVideoTunnelModeParams tunnelParams;
InitOMXParams(&tunnelParams);
tunnelParams.nPortIndex = portIndex;
tunnelParams.bTunneled = tunneled;
tunnelParams.nAudioHwSync = audioHwSync;
err = OMX_SetParameter(mHandle, index, &tunnelParams);
err = OMX_GetParameter(mHandle, index, &tunnelParams);
sidebandHandle = (native_handle_t*)tunnelParams.pSidebandWindow;
यदि घटक इस कॉन्फ़िगरेशन का समर्थन करता है, तो उसे इस कोडेक को एक साइडबैंड हैंडल आवंटित करना चाहिए और इसे pSidebandWindow
सदस्य के माध्यम से वापस पास करना चाहिए ताकि HWC संबंधित कोडेक की पहचान कर सके। यदि घटक इस कॉन्फ़िगरेशन का समर्थन नहीं करता है, तो उसे bTunneled
को OMX_FALSE
पर सेट करना चाहिए।
कोडेक2
एंड्रॉइड 11 या उच्चतर में, Codec2
2 टनल प्लेबैक का समर्थन करता है। डिकोडर घटक को निम्नलिखित का समर्थन करना चाहिए:
C2PortTunneledModeTuning
को कॉन्फ़िगर करना, जो टनल मोड को कॉन्फ़िगर करता है और ऑडियो आउटपुट डिवाइस या ट्यूनर कॉन्फ़िगरेशन से प्राप्तHW_AV_SYNC
में गुजरता है।C2_PARAMKEY_OUTPUT_TUNNEL_HANDLE
के लिए साइडबैंड हैंडल आवंटित करने और पुनर्प्राप्त करने के लिए C2_PARAMKEY_OUTPUT_TUNNEL_HANDLE को क्वेरी करना।C2_PARAMKEY_TUNNEL_HOLD_RENDER
से अटैच होने परC2Work
को हैंडल करना, जो कोडेक को डिकोड करने और काम पूरा होने का संकेत देने का निर्देश देता है, लेकिन आउटपुट बफर को 1 तक रेंडर करने के लिए नहीं) कोडेक को बाद में इसे रेंडर करने का निर्देश दिया जाता है या 2) ऑडियो प्लेबैक शुरू होता है।C2_PARAMKEY_TUNNEL_START_RENDER
को संभालना, जो कोडेक को निर्देश देता है कि वहC2_PARAMKEY_TUNNEL_HOLD_RENDER
से चिह्नित फ़्रेम को तुरंत रेंडर करे, भले ही ऑडियो प्लेबैक प्रारंभ न हुआ हो।debug.stagefright.ccodec_delayed_params
को अपुष्ट (अनुशंसित) छोड़ दें। यदि आप इसे कॉन्फ़िगर करते हैं, तोfalse
पर सेट करें।
AOSP कार्यान्वयन CCodec
के माध्यम से C2PortTunnelModeTuning
में टनल मोड को कॉन्फ़िगर करता है, जैसा कि निम्नलिखित कोड स्निपेट में दिखाया गया है:
if (msg->findInt32("audio-hw-sync", &tunneledPlayback->m.syncId[0])) {
tunneledPlayback->m.syncType =
C2PortTunneledModeTuning::Struct::sync_type_t::AUDIO_HW_SYNC;
} else if (msg->findInt32("hw-av-sync-id", &tunneledPlayback->m.syncId[0])) {
tunneledPlayback->m.syncType =
C2PortTunneledModeTuning::Struct::sync_type_t::HW_AV_SYNC;
} else {
tunneledPlayback->m.syncType =
C2PortTunneledModeTuning::Struct::sync_type_t::REALTIME;
tunneledPlayback->setFlexCount(0);
}
c2_status_t c2err = comp->config({ tunneledPlayback.get() }, C2_MAY_BLOCK,
failures);
std::vector<std::unique_ptr<C2Param>> params;
c2err = comp->query({}, {C2PortTunnelHandleTuning::output::PARAM_TYPE},
C2_DONT_BLOCK, ¶ms);
if (c2err == C2_OK && params.size() == 1u) {
C2PortTunnelHandleTuning::output *videoTunnelSideband =
C2PortTunnelHandleTuning::output::From(params[0].get());
return OK;
}
यदि घटक इस कॉन्फ़िगरेशन का समर्थन करता है, तो उसे इस कोडेक को एक साइडबैंड हैंडल आवंटित करना चाहिए और इसे C2PortTunnelHandlingTuning के माध्यम से वापस पास करना चाहिए ताकि C2PortTunnelHandlingTuning
संबंधित कोडेक की पहचान कर सके।
ऑडियो एचएएल
ऑन-डिमांड वीडियो प्लेबैक के लिए, ऑडियो एचएएल ऑडियो डेटा के प्रत्येक ब्लॉक की शुरुआत में पाए जाने वाले हेडर के अंदर बड़े-एंडियन प्रारूप में ऑडियो डेटा के साथ ऑडियो प्रस्तुति टाइमस्टैम्प इनलाइन प्राप्त करता है:
struct TunnelModeSyncHeader {
// The 32-bit data to identify the sync header (0x55550002)
int32 syncWord;
// The size of the audio data following the sync header before the next sync
// header might be found.
int32 sizeInBytes;
// The presentation timestamp of the first audio sample following the sync
// header.
int64 presentationTimestamp;
// The number of bytes to skip after the beginning of the sync header to find the
// first audio sample (20 bytes for compressed audio, or larger for PCM, aligned
// to the channel count and sample size).
int32 offset;
}
एचडब्ल्यूसी के लिए वीडियो फ्रेम को संबंधित ऑडियो फ्रेम के साथ सिंक में प्रस्तुत करने के लिए, ऑडियो एचएएल को सिंक हेडर को पार्स करना चाहिए और ऑडियो रेंडरिंग के साथ प्लेबैक घड़ी को फिर से सिंक्रनाइज़ करने के लिए प्रेजेंटेशन टाइमस्टैम्प का उपयोग करना चाहिए। संपीड़ित ऑडियो चलाए जाने पर पुन: सिंक्रनाइज़ करने के लिए, ऑडियो एचएएल को इसकी प्लेबैक अवधि निर्धारित करने के लिए संपीड़ित ऑडियो डेटा के अंदर मेटाडेटा को पार्स करने की आवश्यकता हो सकती है।
समर्थन रोकें
Android 5 या इससे पहले के वर्शन में पॉज़ सपोर्ट शामिल नहीं है। आप केवल ए/वी भुखमरी से टनल किए गए प्लेबैक को रोक सकते हैं, लेकिन अगर वीडियो के लिए आंतरिक बफर बड़ा है (उदाहरण के लिए, ओएमएक्स घटक में डेटा का एक सेकंड है), तो यह विराम को गैर-जिम्मेदार दिखता है।
एंड्रॉइड 5.1 या उच्चतर में, AudioFlinger
सीधे (सुरंग वाले) ऑडियो आउटपुट के लिए पॉज़ और रिज्यूमे का समर्थन करता है। यदि एचएएल विराम देता है और फिर से शुरू करता है, तो ट्रैक विराम और फिर से शुरू को एचएएल को भेज दिया जाता है।
प्लेबैक थ्रेड (ऑफलोड के समान) में एचएएल कॉल निष्पादित करके पॉज़, फ्लश, रिज्यूम कॉल अनुक्रम का सम्मान किया जाता है।
कार्यान्वयन सुझाव
ऑडियो एचएएल
Android 11 के लिए, PCR या STC से HW सिंक आईडी का उपयोग A/V सिंक के लिए किया जा सकता है, इसलिए केवल-वीडियो स्ट्रीम समर्थित है।
Android 10 या इससे पहले के संस्करण के लिए, टनल किए गए वीडियो प्लेबैक का समर्थन करने वाले उपकरणों में इसकी audio_policy.conf
फ़ाइल में FLAG_HW_AV_SYNC
और AUDIO_OUTPUT_FLAG_DIRECT
फ़्लैग के साथ कम से कम एक ऑडियो आउटपुट स्ट्रीम प्रोफ़ाइल होनी चाहिए। इन झंडों का उपयोग सिस्टम घड़ी को ऑडियो घड़ी से सेट करने के लिए किया जाता है।
ओएमएक्स
डिवाइस निर्माताओं के पास टनल किए गए वीडियो प्लेबैक के लिए एक अलग ओएमएक्स घटक होना चाहिए (निर्माता के पास अन्य प्रकार के ऑडियो और वीडियो प्लेबैक के लिए अतिरिक्त ओएमएक्स घटक हो सकते हैं, जैसे सुरक्षित प्लेबैक)। सुरंग घटक चाहिए:
इसके आउटपुट पोर्ट पर 0 बफ़र्स (
nBufferCountMin
,nBufferCountActual
) निर्दिष्ट करें।OMX.google.android.index.prepareForAdaptivePlayback setParameter
एक्सटेंशन लागू करें।media_codecs.xml
फ़ाइल में इसकी क्षमताओं को निर्दिष्ट करें और टनल प्लेबैक सुविधा घोषित करें। इसे फ्रेम आकार, संरेखण, या बिटरेट पर किन्हीं सीमाओं को भी स्पष्ट करना चाहिए। एक उदाहरण नीचे दिया गया है:<MediaCodec name="OMX.OEM_NAME.VIDEO.DECODER.AVC.tunneled" type="video/avc" > <Feature name="adaptive-playback" /> <Feature name="tunneled-playback" required=”true” /> <Limit name="size" min="32x32" max="3840x2160" /> <Limit name="alignment" value="2x2" /> <Limit name="bitrate" range="1-20000000" /> ... </MediaCodec>
यदि समान OMX घटक का उपयोग टनल और नॉनटनल डिकोडिंग का समर्थन करने के लिए किया जाता है, तो इसे टनल किए गए प्लेबैक सुविधा को गैर-आवश्यक के रूप में छोड़ देना चाहिए। टनल और नॉनटनलेड डिकोडर दोनों की क्षमता सीमाएँ समान होती हैं। एक उदाहरण नीचे दिया गया है:
<MediaCodec name="OMX._OEM\_NAME_.VIDEO.DECODER.AVC" type="video/avc" >
<Feature name="adaptive-playback" />
<Feature name="tunneled-playback" />
<Limit name="size" min="32x32" max="3840x2160" />
<Limit name="alignment" value="2x2" />
<Limit name="bitrate" range="1-20000000" />
...
</MediaCodec>
हार्डवेयर संगीतकार (HWC)
जब एक डिस्प्ले पर एक टनल वाली परत ( HWC_SIDEBAND
compositionType
टाइप के साथ एक परत) होती है, तो परत का sidebandStream
OMX वीडियो घटक द्वारा आवंटित साइडबैंड हैंडल होता है।
एचडब्ल्यूसी डिकोडेड वीडियो फ्रेम (सुरंग वाले ओएमएक्स घटक से) को संबंधित ऑडियो ट्रैक ( audio-hw-sync
आईडी के साथ) में सिंक्रनाइज़ करता है। जब एक नया वीडियो फ्रेम चालू हो जाता है, तो एचडब्ल्यूसी इसे अंतिम तैयारी या सेट कॉल के दौरान प्राप्त सभी परतों की वर्तमान सामग्री के साथ मिश्रित करता है, और परिणामी छवि प्रदर्शित करता है। तैयार या सेट कॉल तभी होती है जब अन्य परतें बदलती हैं, या जब साइडबैंड परत (जैसे स्थिति या आकार) के गुण बदलते हैं।
निम्नलिखित आंकड़ा ऑडियो (7c) के आधार पर सही समय पर प्रदर्शन के लिए नवीनतम संरचना (7a) के साथ वीडियो फ्रेम (7b) को संयोजित करने के लिए हार्डवेयर (या कर्नेल या ड्राइवर) सिंक्रोनाइज़र के साथ काम करने वाले HWC का प्रतिनिधित्व करता है।
चित्र 2. HWC हार्डवेयर (या कर्नेल या ड्राइवर) सिंक्रोनाइज़र