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

Commit d7583d9b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add a cpp DVR wrapper"

parents a9ff05f4 9e700fff
Loading
Loading
Loading
Loading
+20 −12
Original line number Diff line number Diff line
@@ -97,6 +97,14 @@ void DvrCallback::setDvr(const jobject dvr) {
    mDvr = env->NewWeakGlobalRef(dvr);
}

/////////////// Dvr ///////////////////////

Dvr::Dvr(sp<IDvr> sp, jweak obj) : mDvrSp(sp), mDvrObj(obj) {}

sp<IDvr> Dvr::getIDvr() {
    return mDvrSp;
}

/////////////// FilterCallback ///////////////////////
//TODO: implement filter callback
Return<void> FilterCallback::onFilterEvent(const DemuxFilterEvent& /*filterEvent*/) {
@@ -395,14 +403,14 @@ jobject JTuner::openDvr(DvrType type, int bufferSize) {
            return NULL;
        }
    }
    sp<IDvr> dvrSp;
    sp<IDvr> iDvrSp;
    sp<DvrCallback> callback = new DvrCallback();
    mDemux->openDvr(type, bufferSize, callback,
            [&](Result, const sp<IDvr>& dvr) {
                dvrSp = dvr;
                iDvrSp = dvr;
            });

    if (dvrSp == NULL) {
    if (iDvrSp == NULL) {
        return NULL;
    }

@@ -412,7 +420,7 @@ jobject JTuner::openDvr(DvrType type, int bufferSize) {
                    env->FindClass("android/media/tv/tuner/Tuner$Dvr"),
                    gFields.dvrInitID,
                    mObject);

    sp<Dvr> dvrSp = new Dvr(iDvrSp, dvrObj);
    dvrSp->incStrong(dvrObj);
    env->SetLongField(dvrObj, gFields.dvrContext, (jlong)dvrSp.get());

@@ -532,8 +540,8 @@ static DvrSettings getDvrSettings(JNIEnv *env, jobject settings) {
    return dvrSettings;
}

static sp<IDvr> getDvr(JNIEnv *env, jobject dvr) {
    return (IDvr *)env->GetLongField(dvr, gFields.dvrContext);
static sp<Dvr> getDvr(JNIEnv *env, jobject dvr) {
    return (Dvr *)env->GetLongField(dvr, gFields.dvrContext);
}

static void android_media_tv_Tuner_native_init(JNIEnv *env) {
@@ -777,7 +785,7 @@ static jobject android_media_tv_Tuner_open_dvr(JNIEnv *env, jobject thiz, jint t
}

static bool android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobject filter) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    sp<IFilter> filterSp = getFilter(env, filter)->getIFilter();
    if (dvrSp == NULL || filterSp == NULL) {
        return false;
@@ -787,7 +795,7 @@ static bool android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobje
}

static bool android_media_tv_Tuner_detach_filter(JNIEnv *env, jobject dvr, jobject filter) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    sp<IFilter> filterSp = getFilter(env, filter)->getIFilter();
    if (dvrSp == NULL || filterSp == NULL) {
        return false;
@@ -797,7 +805,7 @@ static bool android_media_tv_Tuner_detach_filter(JNIEnv *env, jobject dvr, jobje
}

static int android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobject settings) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    if (dvrSp == NULL) {
        ALOGD("Failed to configure dvr: dvr not found");
        return (int)Result::INVALID_STATE;
@@ -807,7 +815,7 @@ static int android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobjec
}

static bool android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    if (dvrSp == NULL) {
        ALOGD("Failed to start dvr: dvr not found");
        return false;
@@ -816,7 +824,7 @@ static bool android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
}

static bool android_media_tv_Tuner_stop_dvr(JNIEnv *env, jobject dvr) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    if (dvrSp == NULL) {
        ALOGD("Failed to stop dvr: dvr not found");
        return false;
@@ -825,7 +833,7 @@ static bool android_media_tv_Tuner_stop_dvr(JNIEnv *env, jobject dvr) {
}

static bool android_media_tv_Tuner_flush_dvr(JNIEnv *env, jobject dvr) {
    sp<IDvr> dvrSp = getDvr(env, dvr);
    sp<IDvr> dvrSp = getDvr(env, dvr)->getIDvr();
    if (dvrSp == NULL) {
        ALOGD("Failed to flush dvr: dvr not found");
        return false;
+7 −0
Original line number Diff line number Diff line
@@ -77,6 +77,13 @@ private:
    jweak mDvr;
};

struct Dvr : public RefBase {
    Dvr(sp<IDvr> sp, jweak obj);
    sp<IDvr> getIDvr();
    sp<IDvr> mDvrSp;
    jweak mDvrObj;
};

struct FilterCallback : public IFilterCallback {
    virtual Return<void> onFilterEvent(const DemuxFilterEvent& filterEvent);
    virtual Return<void> onFilterStatus(const DemuxFilterStatus status);