मल्टीमीडिया टनलिंग

मल्टीमीडिया टनलिंग संपीड़ित वीडियो डेटा को ऐप कोड या एंड्रॉइड फ्रेमवर्क कोड द्वारा संसाधित किए बिना, हार्डवेयर वीडियो डिकोडर के माध्यम से सीधे डिस्प्ले पर टनल करने में सक्षम बनाता है। एंड्रॉइड स्टैक के नीचे डिवाइस-विशिष्ट कोड यह निर्धारित करता है कि कौन से वीडियो फ्रेम को डिस्प्ले पर भेजना है और कब भेजना है, निम्न प्रकार की आंतरिक घड़ी में से एक के साथ वीडियो फ्रेम प्रस्तुति टाइमस्टैम्प की तुलना करके:

  • एंड्रॉइड 5 या उच्चतर में ऑन-डिमांड वीडियो प्लेबैक के लिए, ऐप द्वारा पारित ऑडियो प्रेजेंटेशन टाइमस्टैम्प के साथ सिंक्रनाइज़ एक AudioTrack घड़ी

  • एंड्रॉइड 11 या उच्चतर में लाइव प्रसारण प्लेबैक के लिए, एक ट्यूनर द्वारा संचालित एक प्रोग्राम रेफरेंस क्लॉक (पीसीआर) या सिस्टम टाइम क्लॉक (एसटीसी)

पृष्ठभूमि

एंड्रॉइड पर पारंपरिक वीडियो प्लेबैक एक संपीड़ित वीडियो फ्रेम को डिकोड किए जाने पर ऐप को सूचित करता है । ऐप फिर डिकोड किए गए वीडियो फ्रेम को संबंधित ऑडियो फ्रेम के समान सिस्टम क्लॉक समय पर प्रस्तुत करने के लिए डिस्प्ले पर जारी करता है , सही समय की गणना करने के लिए ऐतिहासिक AudioTimestamps उदाहरणों को पुनर्प्राप्त करता है

क्योंकि टनल वीडियो प्लेबैक ऐप कोड को बायपास करता है और वीडियो पर कार्य करने वाली प्रक्रियाओं की संख्या को कम करता है, यह OEM कार्यान्वयन के आधार पर अधिक कुशल वीडियो रेंडरिंग प्रदान कर सकता है। यह वीडियो प्रस्तुत करने के लिए एंड्रॉइड अनुरोधों के समय और वास्तविक हार्डवेयर vsyncs के समय के बीच संभावित विसंगति द्वारा उत्पन्न समय संबंधी समस्याओं से बचकर चुनी हुई घड़ी (पीआरसी, एसटीसी, या ऑडियो) को अधिक सटीक वीडियो ताल और सिंक्रनाइज़ेशन प्रदान कर सकता है। हालाँकि, टनलिंग पिक्चर-इन-पिक्चर (PiP) विंडो में धुंधला या गोल कोनों जैसे GPU प्रभावों के लिए समर्थन को भी कम कर सकता है, क्योंकि बफ़र्स एंड्रॉइड ग्राफिक्स स्टैक को बायपास करते हैं।

निम्नलिखित चित्र दिखाता है कि टनलिंग वीडियो प्लेबैक प्रक्रिया को कैसे सरल बनाती है।

परंपरा और सुरंग मोड की तुलना

चित्र 1. पारंपरिक और सुरंगयुक्त वीडियो प्लेबैक प्रक्रियाओं की तुलना

ऐप डेवलपर्स के लिए

क्योंकि अधिकांश ऐप डेवलपर प्लेबैक कार्यान्वयन के लिए लाइब्रेरी के साथ एकीकृत होते हैं, ज्यादातर मामलों में कार्यान्वयन के लिए केवल टनल प्लेबैक के लिए उस लाइब्रेरी को पुन: कॉन्फ़िगर करने की आवश्यकता होती है। टनल वीडियो प्लेयर के निम्न-स्तरीय कार्यान्वयन के लिए, निम्नलिखित निर्देशों का उपयोग करें।

एंड्रॉइड 5 या उच्चतर में ऑन-डिमांड वीडियो प्लेबैक के लिए:

  1. एक SurfaceView उदाहरण बनाएँ।

  2. एक audioSessionId उदाहरण बनाएं।

  3. चरण 2 में बनाए गए audioSessionId इंस्टेंस के साथ AudioTrack और MediaCodec इंस्टेंस बनाएं।

  4. ऑडियो डेटा में पहले ऑडियो फ़्रेम के लिए प्रेजेंटेशन टाइमस्टैम्प के साथ ऑडियो डेटा को AudioTrack में पंक्तिबद्ध करें।

एंड्रॉइड 11 या उच्चतर में लाइव प्रसारण प्लेबैक के लिए:

  1. एक SurfaceView उदाहरण बनाएँ।

  2. Tuner से avSyncHwId उदाहरण प्राप्त करें।

  3. चरण 2 में बनाए गए avSyncHwId इंस्टेंस के साथ AudioTrack और MediaCodec इंस्टेंस बनाएं।

एपीआई कॉल प्रवाह निम्नलिखित कोड स्निपेट में दिखाया गया है:

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 पर सेट करें। जब संपीड़ित वीडियो फ़्रेम को कतार में पुन: व्यवस्थित किया जाता है (जैसे कि जब बी-फ़्रेम मौजूद होते हैं), तो इसका मतलब है कि पहला प्रदर्शित वीडियो फ़्रेम हमेशा एक आई-फ़्रेम होना चाहिए।

    • यदि आप नहीं चाहते कि ऑडियो प्लेबैक शुरू होने तक पहला कतारबद्ध वीडियो फ्रेम प्रस्तुत किया जाए, तो इस पैरामीटर को 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 या Codec2 घटक में पारित की जाती है ताकि OEM कोड कोडेक को संबंधित ऑडियो आउटपुट स्ट्रीम या ट्यूनर स्ट्रीम के साथ जोड़ सके।

घटक कॉन्फ़िगरेशन के दौरान, OMX या Codec2 घटक को एक साइडबैंड हैंडल लौटाना चाहिए जिसका उपयोग कोडेक को हार्डवेयर कंपोज़र (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;
}

एचडब्ल्यूसी उचित समय पर कोडेक आउटपुट से नई छवि बफ़र्स प्राप्त करने के लिए जिम्मेदार है, या तो संबंधित ऑडियो आउटपुट स्ट्रीम या ट्यूनर प्रोग्राम संदर्भ घड़ी के साथ सिंक्रनाइज़ किया जाता है, बफ़र्स को अन्य परतों की वर्तमान सामग्री के साथ संयोजित करता है, और परिणामी छवि प्रदर्शित करता है। यह सामान्य तैयारी और सेट चक्र से स्वतंत्र रूप से होता है। तैयार और सेट कॉल केवल तभी होती है जब अन्य परतें बदलती हैं, या जब साइडबैंड परत के गुण (जैसे स्थिति या आकार) बदलते हैं।

ओएमएक्स

एक सुरंगयुक्त डिकोडर घटक को निम्नलिखित का समर्थन करना चाहिए:

  • 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 टनल प्लेबैक का समर्थन करता है। डिकोडर घटक को निम्नलिखित का समर्थन करना चाहिए:

  • C2PortTunneledModeTuning को कॉन्फ़िगर करना, जो टनल मोड को कॉन्फ़िगर करता है और ऑडियो आउटपुट डिवाइस या ट्यूनर कॉन्फ़िगरेशन से प्राप्त HW_AV_SYNC में गुजरता है।

  • HWC के लिए साइडबैंड हैंडल को आवंटित और पुनः प्राप्त करने के लिए C2_PARAMKEY_OUTPUT_TUNNEL_HANDLE को क्वेरी करना।

  • C2Work से जुड़े होने पर C2_PARAMKEY_TUNNEL_HOLD_RENDER को संभालना, जो कोडेक को डीकोड करने और काम पूरा होने का संकेत देने का निर्देश देता है, लेकिन आउटपुट बफर को तब तक रेंडर करने का निर्देश नहीं देता जब तक कि 1) कोडेक को बाद में इसे रेंडर करने का निर्देश न दिया जाए या 2) ऑडियो प्लेबैक शुरू न हो जाए।

  • C2_PARAMKEY_TUNNEL_START_RENDER को संभालना, जो कोडेक को C2_PARAMKEY_TUNNEL_HOLD_RENDER से चिह्नित फ्रेम को तुरंत प्रस्तुत करने का निर्देश देता है, भले ही ऑडियो प्लेबैक शुरू न हुआ हो।

  • debug.stagefright.ccodec_delayed_params को अकॉन्फ़िगर छोड़ दें (अनुशंसित)। यदि आप इसे कॉन्फ़िगर करते हैं, तो false पर सेट करें।

AOSP कार्यान्वयन C2PortTunnelModeTuning के माध्यम से CCodec में टनल मोड को कॉन्फ़िगर करता है, जैसा कि निम्नलिखित कोड स्निपेट में दिखाया गया है:

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, &params);
if (c2err == C2_OK && params.size() == 1u) {
    C2PortTunnelHandleTuning::output *videoTunnelSideband =
            C2PortTunnelHandleTuning::output::From(params[0].get());
    return OK;
}

यदि घटक इस कॉन्फ़िगरेशन का समर्थन करता है, तो उसे इस कोडेक के लिए एक साइडबैंड हैंडल आवंटित करना चाहिए और इसे C2PortTunnelHandlingTuning के माध्यम से वापस पास करना चाहिए ताकि HWC संबंधित कोडेक की पहचान कर सके।

ऑडियो एचएएल

ऑन-डिमांड वीडियो प्लेबैक के लिए, ऑडियो एचएएल को ऐप द्वारा लिखे गए ऑडियो डेटा के प्रत्येक ब्लॉक की शुरुआत में पाए जाने वाले हेडर के अंदर बड़े-एंडियन प्रारूप में ऑडियो डेटा के साथ ऑडियो प्रेजेंटेशन टाइमस्टैम्प इनलाइन प्राप्त होता है:

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;
}

एचडब्ल्यूसी के लिए वीडियो फ्रेम को संबंधित ऑडियो फ्रेम के साथ सिंक करने के लिए, ऑडियो एचएएल को सिंक हेडर को पार्स करना चाहिए और ऑडियो रेंडरिंग के साथ प्लेबैक घड़ी को फिर से सिंक्रोनाइज़ करने के लिए प्रेजेंटेशन टाइमस्टैम्प का उपयोग करना चाहिए। जब संपीड़ित ऑडियो चलाया जा रहा हो तो पुन: सिंक्रनाइज़ करने के लिए, ऑडियो एचएएल को इसकी प्लेबैक अवधि निर्धारित करने के लिए संपीड़ित ऑडियो डेटा के अंदर मेटाडेटा को पार्स करने की आवश्यकता हो सकती है।

समर्थन रोकें

एंड्रॉइड 5 या उससे पहले के संस्करण में पॉज़ समर्थन शामिल नहीं है। आप केवल ए/वी भुखमरी से टनल प्लेबैक को रोक सकते हैं, लेकिन यदि वीडियो के लिए आंतरिक बफर बड़ा है (उदाहरण के लिए, ओएमएक्स घटक में एक सेकंड का डेटा है), तो यह ठहराव को गैर-प्रतिक्रियाशील बना देता है।

एंड्रॉइड 5.1 या उच्चतर में, AudioFlinger सीधे (सुरंग वाले) ऑडियो आउटपुट के लिए पॉज़ और रिज्यूम का समर्थन करता है। यदि एचएएल पॉज और रिज्यूम लागू करता है, तो ट्रैक पॉज और रिज्यूम एचएएल को भेज दिया जाता है।

प्लेबैक थ्रेड में एचएएल कॉल निष्पादित करके पॉज़, फ्लश, रेज़्यूम कॉल अनुक्रम का सम्मान किया जाता है (ऑफलोड के समान)।

कार्यान्वयन सुझाव

ऑडियो एचएएल

एंड्रॉइड 11 के लिए, पीसीआर या एसटीसी से एचडब्ल्यू सिंक आईडी का उपयोग ए/वी सिंक के लिए किया जा सकता है, इसलिए केवल-वीडियो स्ट्रीम समर्थित है।

एंड्रॉइड 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>
    

यदि समान ओएमएक्स घटक का उपयोग टनल और नॉन टनल डिकोडिंग का समर्थन करने के लिए किया जाता है, तो इसे टनल प्लेबैक सुविधा को गैर-आवश्यक के रूप में छोड़ देना चाहिए। सुरंगनुमा और बिना सुरंग वाले डिकोडर दोनों की क्षमता सीमाएँ समान होती हैं। एक उदाहरण नीचे दिया गया है:

<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 आईडी के साथ) में सिंक्रनाइज़ करता है। जब एक नया वीडियो फ़्रेम चालू हो जाता है, तो HWC इसे अंतिम तैयारी या सेट कॉल के दौरान प्राप्त सभी परतों की वर्तमान सामग्री के साथ मिश्रित करता है, और परिणामी छवि प्रदर्शित करता है। तैयार या सेट कॉल केवल तभी होती है जब अन्य परतें बदलती हैं, या जब साइडबैंड परत के गुण (जैसे स्थिति या आकार) बदलते हैं।

निम्नलिखित चित्र HWC को ऑडियो (7c) के आधार पर सही समय पर प्रदर्शन के लिए नवीनतम कंपोज़िशन (7a) के साथ वीडियो फ़्रेम (7b) को संयोजित करने के लिए हार्डवेयर (या कर्नेल या ड्राइवर) सिंक्रोनाइज़र के साथ काम करने का प्रतिनिधित्व करता है।

एचडब्ल्यूसी ऑडियो के आधार पर वीडियो फ्रेम का संयोजन कर रहा है

चित्र 2. HWC हार्डवेयर (या कर्नेल या ड्राइवर) सिंक्रोनाइज़र