Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 85ec26b4 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Cache event jclass in Tuner framework jni for performance" into udc-dev am: 907a3606

parents fccc7f23 907a3606
Loading
Loading
Loading
Loading
+100 −65
Original line number Diff line number Diff line
@@ -617,8 +617,6 @@ int64_t MediaEvent::getAudioHandle() {
void FilterClientCallbackImpl::getSectionEvent(jobjectArray &arr, const int size,
                                               const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/SectionEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIJ)V");

    const DemuxFilterSectionEvent &sectionEvent = event.get<DemuxFilterEvent::Tag::section>();
    jint tableId = sectionEvent.tableId;
@@ -626,23 +624,15 @@ void FilterClientCallbackImpl::getSectionEvent(jobjectArray &arr, const int size
    jint sectionNum = sectionEvent.sectionNum;
    jlong dataLength = sectionEvent.dataLength;

    jobject obj = env->NewObject(eventClazz, eventInit, tableId, version, sectionNum, dataLength);
    jobject obj = env->NewObject(mSectionEventClass, mSectionEventInitID, tableId, version,
                                 sectionNum, dataLength);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
                                             const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/MediaEvent");
    jmethodID eventInit = env->GetMethodID(
            eventClazz,
            "<init>",
            "(IZJZJJJLandroid/media/MediaCodec$LinearBlock;"
            "ZJIZILandroid/media/tv/tuner/filter/AudioDescriptor;"
            "Ljava/util/List;)V");
    jfieldID eventContext = env->GetFieldID(eventClazz, "mNativeContext", "J");

    const DemuxFilterMediaEvent &mediaEvent = event.get<DemuxFilterEvent::Tag::media>();
    jobject audioDescriptor = nullptr;
@@ -650,8 +640,6 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
    jobject presentationsJObj = JAudioPresentationInfo::asJobject(env, gAudioPresentationFields);
    switch (mediaEvent.extraMetaData.getTag()) {
        case DemuxFilterMediaEventExtraMetaData::Tag::audio: {
            jclass adClazz = env->FindClass("android/media/tv/tuner/filter/AudioDescriptor");
            jmethodID adInit = env->GetMethodID(adClazz, "<init>", "(BBCBBB)V");

            const AudioExtraMetaData &ad =
                    mediaEvent.extraMetaData.get<DemuxFilterMediaEventExtraMetaData::Tag::audio>();
@@ -662,9 +650,9 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
            jbyte adGainFront = ad.adGainFront;
            jbyte adGainSurround = ad.adGainSurround;

            audioDescriptor = env->NewObject(adClazz, adInit, adFade, adPan, versionTextTag,
                                             adGainCenter, adGainFront, adGainSurround);
            env->DeleteLocalRef(adClazz);
            audioDescriptor = env->NewObject(mAudioDescriptorClass, mAudioDescriptorInitID, adFade,
                                             adPan, versionTextTag, adGainCenter, adGainFront,
                                             adGainSurround);
            break;
        }
        case DemuxFilterMediaEventExtraMetaData::Tag::audioPresentations: {
@@ -705,10 +693,10 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
        sc = mediaEvent.scIndexMask.get<DemuxFilterScIndexMask::Tag::scVvc>();
    }

    jobject obj = env->NewObject(eventClazz, eventInit, streamId, isPtsPresent, pts, isDtsPresent,
                                 dts, dataLength, offset, nullptr, isSecureMemory, avDataId,
                                 mpuSequenceNumber, isPesPrivateData, sc, audioDescriptor,
                                 presentationsJObj);
    jobject obj = env->NewObject(mMediaEventClass, mMediaEventInitID, streamId, isPtsPresent, pts,
                                 isDtsPresent, dts, dataLength, offset, nullptr, isSecureMemory,
                                 avDataId, mpuSequenceNumber, isPesPrivateData, sc,
                                 audioDescriptor, presentationsJObj);

    uint64_t avSharedMemSize = mFilterClient->getAvSharedHandleInfo().size;
    if (mediaEvent.avMemory.fds.size() > 0 || mediaEvent.avDataId != 0 ||
@@ -717,7 +705,7 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
                new MediaEvent(mFilterClient, dupFromAidl(mediaEvent.avMemory),
                               mediaEvent.avDataId, dataLength + offset, obj);
        mediaEventSp->mAvHandleRefCnt++;
        env->SetLongField(obj, eventContext, (jlong)mediaEventSp.get());
        env->SetLongField(obj, mMediaEventFieldContextID, (jlong)mediaEventSp.get());
        mediaEventSp->incStrong(obj);
    }

@@ -726,32 +714,27 @@ void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
        env->DeleteLocalRef(audioDescriptor);
    }
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
    env->DeleteLocalRef(presentationsJObj);
}

void FilterClientCallbackImpl::getPesEvent(jobjectArray &arr, const int size,
                                           const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/PesEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(III)V");

    const DemuxFilterPesEvent &pesEvent = event.get<DemuxFilterEvent::Tag::pes>();
    jint streamId = pesEvent.streamId;
    jint dataLength = pesEvent.dataLength;
    jint mpuSequenceNumber = pesEvent.mpuSequenceNumber;

    jobject obj = env->NewObject(eventClazz, eventInit, streamId, dataLength, mpuSequenceNumber);
    jobject obj = env->NewObject(mPesEventClass, mPesEventInitID, streamId, dataLength,
                                 mpuSequenceNumber);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getTsRecordEvent(jobjectArray &arr, const int size,
                                                const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/TsRecordEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIJJI)V");

    const DemuxFilterTsRecordEvent &tsRecordEvent = event.get<DemuxFilterEvent::Tag::tsRecord>();
    DemuxPid pid = tsRecordEvent.pid;
@@ -781,18 +764,15 @@ void FilterClientCallbackImpl::getTsRecordEvent(jobjectArray &arr, const int siz
    jlong pts = tsRecordEvent.pts;
    jint firstMbInSlice = tsRecordEvent.firstMbInSlice;

    jobject obj =
            env->NewObject(eventClazz, eventInit, jpid, ts, sc, byteNumber, pts, firstMbInSlice);
    jobject obj = env->NewObject(mTsRecordEventClass, mTsRecordEventInitID, jpid, ts, sc,
                                 byteNumber, pts, firstMbInSlice);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getMmtpRecordEvent(jobjectArray &arr, const int size,
                                                  const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/MmtpRecordEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IJIJII)V");

    const DemuxFilterMmtpRecordEvent &mmtpRecordEvent =
            event.get<DemuxFilterEvent::Tag::mmtpRecord>();
@@ -803,18 +783,15 @@ void FilterClientCallbackImpl::getMmtpRecordEvent(jobjectArray &arr, const int s
    jint firstMbInSlice = mmtpRecordEvent.firstMbInSlice;
    jlong tsIndexMask = mmtpRecordEvent.tsIndexMask;

    jobject obj = env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber,
                                 mpuSequenceNumber, pts, firstMbInSlice, tsIndexMask);
    jobject obj = env->NewObject(mMmtpRecordEventClass, mMmtpRecordEventInitID, scHevcIndexMask,
                                 byteNumber, mpuSequenceNumber, pts, firstMbInSlice, tsIndexMask);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getDownloadEvent(jobjectArray &arr, const int size,
                                                const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/DownloadEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIIII)V");

    const DemuxFilterDownloadEvent &downloadEvent = event.get<DemuxFilterEvent::Tag::download>();
    jint itemId = downloadEvent.itemId;
@@ -824,32 +801,27 @@ void FilterClientCallbackImpl::getDownloadEvent(jobjectArray &arr, const int siz
    jint lastItemFragmentIndex = downloadEvent.lastItemFragmentIndex;
    jint dataLength = downloadEvent.dataLength;

    jobject obj = env->NewObject(eventClazz, eventInit, itemId, downloadId, mpuSequenceNumber,
                                 itemFragmentIndex, lastItemFragmentIndex, dataLength);
    jobject obj = env->NewObject(mDownloadEventClass, mDownloadEventInitID, itemId, downloadId,
                                 mpuSequenceNumber, itemFragmentIndex, lastItemFragmentIndex,
                                 dataLength);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getIpPayloadEvent(jobjectArray &arr, const int size,
                                                 const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/IpPayloadEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");

    const DemuxFilterIpPayloadEvent &ipPayloadEvent = event.get<DemuxFilterEvent::Tag::ipPayload>();
    jint dataLength = ipPayloadEvent.dataLength;
    jobject obj = env->NewObject(eventClazz, eventInit, dataLength);
    jobject obj = env->NewObject(mIpPayloadEventClass, mIpPayloadEventInitID, dataLength);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getTemiEvent(jobjectArray &arr, const int size,
                                            const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/TemiEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(JB[B)V");

    const DemuxFilterTemiEvent &temiEvent = event.get<DemuxFilterEvent::Tag::temi>();
    jlong pts = temiEvent.pts;
@@ -859,63 +831,53 @@ void FilterClientCallbackImpl::getTemiEvent(jobjectArray &arr, const int size,
    jbyteArray array = env->NewByteArray(descrData.size());
    env->SetByteArrayRegion(array, 0, descrData.size(), reinterpret_cast<jbyte *>(&descrData[0]));

    jobject obj = env->NewObject(eventClazz, eventInit, pts, descrTag, array);
    jobject obj = env->NewObject(mTemiEventClass, mTemiEventInitID, pts, descrTag, array);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(array);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getScramblingStatusEvent(jobjectArray &arr, const int size,
                                                        const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/ScramblingStatusEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");

    const DemuxFilterMonitorEvent &scramblingStatus =
            event.get<DemuxFilterEvent::Tag::monitorEvent>()
                    .get<DemuxFilterMonitorEvent::Tag::scramblingStatus>();
    jobject obj = env->NewObject(eventClazz, eventInit, scramblingStatus);
    jobject obj = env->NewObject(mScramblingStatusEventClass, mScramblingStatusEventInitID,
                                 scramblingStatus);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getIpCidChangeEvent(jobjectArray &arr, const int size,
                                                   const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/IpCidChangeEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");

    const DemuxFilterMonitorEvent &cid = event.get<DemuxFilterEvent::Tag::monitorEvent>()
                                                 .get<DemuxFilterMonitorEvent::Tag::cid>();
    jobject obj = env->NewObject(eventClazz, eventInit, cid);
    jobject obj = env->NewObject(mIpCidChangeEventClass, mIpCidChangeEventInitID, cid);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::getRestartEvent(jobjectArray &arr, const int size,
                                               const DemuxFilterEvent &event) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/RestartEvent");
    jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");

    const int32_t &startId = event.get<DemuxFilterEvent::Tag::startId>();
    jobject obj = env->NewObject(eventClazz, eventInit, startId);
    jobject obj = env->NewObject(mRestartEventClass, mRestartEventInitID, startId);
    env->SetObjectArrayElement(arr, size, obj);
    env->DeleteLocalRef(obj);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::onFilterEvent(const vector<DemuxFilterEvent> &events) {
    ALOGV("FilterClientCallbackImpl::onFilterEvent");
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/FilterEvent");
    jobjectArray array;

    if (!events.empty()) {
        array = env->NewObjectArray(events.size(), eventClazz, nullptr);
        array = env->NewObjectArray(events.size(), mEventClass, nullptr);
    }

    for (int i = 0, arraySize = 0; i < events.size(); i++) {
@@ -1004,7 +966,6 @@ void FilterClientCallbackImpl::onFilterEvent(const vector<DemuxFilterEvent> &eve
              "Filter object has been freed. Ignoring callback.");
    }
    env->DeleteLocalRef(array);
    env->DeleteLocalRef(eventClazz);
}

void FilterClientCallbackImpl::onFilterStatus(const DemuxFilterStatus status) {
@@ -1040,6 +1001,67 @@ void FilterClientCallbackImpl::setSharedFilter(jweak filterObj, sp<FilterClient>
    mSharedFilter = true;
}

FilterClientCallbackImpl::FilterClientCallbackImpl() {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    ScopedLocalRef eventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/FilterEvent"));
    ScopedLocalRef sectionEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/SectionEvent"));
    ScopedLocalRef mediaEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/MediaEvent"));
    ScopedLocalRef audioDescriptorClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/AudioDescriptor"));
    ScopedLocalRef pesEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/PesEvent"));
    ScopedLocalRef tsRecordEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/TsRecordEvent"));
    ScopedLocalRef mmtpRecordEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/MmtpRecordEvent"));
    ScopedLocalRef downloadEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/DownloadEvent"));
    ScopedLocalRef ipPayloadEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/IpPayloadEvent"));
    ScopedLocalRef temiEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/TemiEvent"));
    ScopedLocalRef scramblingStatusEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/ScramblingStatusEvent"));
    ScopedLocalRef ipCidChangeEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/IpCidChangeEvent"));
    ScopedLocalRef restartEventClass =
        ScopedLocalRef(env, env->FindClass("android/media/tv/tuner/filter/RestartEvent"));
    mEventClass = (jclass) env->NewGlobalRef(eventClass.get());
    mSectionEventClass = (jclass) env->NewGlobalRef(sectionEventClass.get());
    mMediaEventClass = (jclass) env->NewGlobalRef(mediaEventClass.get());
    mAudioDescriptorClass = (jclass) env->NewGlobalRef(audioDescriptorClass.get());
    mPesEventClass = (jclass) env->NewGlobalRef(pesEventClass.get());
    mTsRecordEventClass = (jclass) env->NewGlobalRef(tsRecordEventClass.get());
    mMmtpRecordEventClass = (jclass) env->NewGlobalRef(mmtpRecordEventClass.get());
    mDownloadEventClass = (jclass) env->NewGlobalRef(downloadEventClass.get());
    mIpPayloadEventClass = (jclass) env->NewGlobalRef(ipPayloadEventClass.get());
    mTemiEventClass = (jclass) env->NewGlobalRef(temiEventClass.get());
    mScramblingStatusEventClass = (jclass) env->NewGlobalRef(scramblingStatusEventClass.get());
    mIpCidChangeEventClass = (jclass) env->NewGlobalRef(ipCidChangeEventClass.get());
    mRestartEventClass = (jclass) env->NewGlobalRef(restartEventClass.get());
    mSectionEventInitID = env->GetMethodID(mSectionEventClass, "<init>", "(IIIJ)V");
    mMediaEventInitID = env->GetMethodID(
            mMediaEventClass,
            "<init>",
            "(IZJZJJJLandroid/media/MediaCodec$LinearBlock;"
            "ZJIZILandroid/media/tv/tuner/filter/AudioDescriptor;"
            "Ljava/util/List;)V");
    mAudioDescriptorInitID = env->GetMethodID(mAudioDescriptorClass, "<init>", "(BBCBBB)V");
    mPesEventInitID = env->GetMethodID(mPesEventClass, "<init>", "(III)V");
    mTsRecordEventInitID = env->GetMethodID(mTsRecordEventClass, "<init>", "(IIIJJI)V");
    mMmtpRecordEventInitID = env->GetMethodID(mMmtpRecordEventClass, "<init>", "(IJIJII)V");
    mDownloadEventInitID = env->GetMethodID(mDownloadEventClass, "<init>", "(IIIIII)V");
    mIpPayloadEventInitID = env->GetMethodID(mIpPayloadEventClass, "<init>", "(I)V");
    mTemiEventInitID = env->GetMethodID(mTemiEventClass, "<init>", "(JB[B)V");
    mScramblingStatusEventInitID = env->GetMethodID(mScramblingStatusEventClass, "<init>", "(I)V");
    mIpCidChangeEventInitID = env->GetMethodID(mIpCidChangeEventClass, "<init>", "(I)V");
    mRestartEventInitID = env->GetMethodID(mRestartEventClass, "<init>", "(I)V");
    mMediaEventFieldContextID = env->GetFieldID(mMediaEventClass, "mNativeContext", "J");
}

FilterClientCallbackImpl::~FilterClientCallbackImpl() {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    if (mFilterObj != nullptr) {
@@ -1047,6 +1069,19 @@ FilterClientCallbackImpl::~FilterClientCallbackImpl() {
        mFilterObj = nullptr;
    }
    mFilterClient = nullptr;
    env->DeleteGlobalRef(mEventClass);
    env->DeleteGlobalRef(mSectionEventClass);
    env->DeleteGlobalRef(mMediaEventClass);
    env->DeleteGlobalRef(mAudioDescriptorClass);
    env->DeleteGlobalRef(mPesEventClass);
    env->DeleteGlobalRef(mTsRecordEventClass);
    env->DeleteGlobalRef(mMmtpRecordEventClass);
    env->DeleteGlobalRef(mDownloadEventClass);
    env->DeleteGlobalRef(mIpPayloadEventClass);
    env->DeleteGlobalRef(mTemiEventClass);
    env->DeleteGlobalRef(mScramblingStatusEventClass);
    env->DeleteGlobalRef(mIpCidChangeEventClass);
    env->DeleteGlobalRef(mRestartEventClass);
}

/////////////// FrontendClientCallbackImpl ///////////////////////
+27 −0
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ struct MediaEvent : public RefBase {
};

struct FilterClientCallbackImpl : public FilterClientCallback {
    FilterClientCallbackImpl();
    ~FilterClientCallbackImpl();
    virtual void onFilterEvent(const vector<DemuxFilterEvent>& events);
    virtual void onFilterStatus(const DemuxFilterStatus status);
@@ -135,6 +136,32 @@ struct FilterClientCallbackImpl : public FilterClientCallback {
private:
    jweak mFilterObj;
    sp<FilterClient> mFilterClient;
    jclass mEventClass;
    jclass mSectionEventClass;
    jclass mMediaEventClass;
    jclass mAudioDescriptorClass;
    jclass mPesEventClass;
    jclass mTsRecordEventClass;
    jclass mMmtpRecordEventClass;
    jclass mDownloadEventClass;
    jclass mIpPayloadEventClass;
    jclass mTemiEventClass;
    jclass mScramblingStatusEventClass;
    jclass mIpCidChangeEventClass;
    jclass mRestartEventClass;
    jmethodID mSectionEventInitID;
    jmethodID mMediaEventInitID;
    jmethodID mAudioDescriptorInitID;
    jmethodID mPesEventInitID;
    jmethodID mTsRecordEventInitID;
    jmethodID mMmtpRecordEventInitID;
    jmethodID mDownloadEventInitID;
    jmethodID mIpPayloadEventInitID;
    jmethodID mTemiEventInitID;
    jmethodID mScramblingStatusEventInitID;
    jmethodID mIpCidChangeEventInitID;
    jmethodID mRestartEventInitID;
    jfieldID mMediaEventFieldContextID;
    bool mSharedFilter;
    void getSectionEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
    void getMediaEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);