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

Commit 174c45f6 authored by Kensuke Miyagi's avatar Kensuke Miyagi Committed by Android (Google) Code Review
Browse files

Merge "Fix Tuner#shareFrontendFromTuner()"

parents 4c3c525e 7a45c0a3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -432,6 +432,7 @@ public class Tuner implements AutoCloseable {
            mFrontend = tuner.mFrontend;
            mIsSharedFrontend = true;
        }
        nativeShareFrontend(mFrontend.mId);
    }

    /**
@@ -551,6 +552,7 @@ public class Tuner implements AutoCloseable {
     * Native method to open frontend of the given ID.
     */
    private native Frontend nativeOpenFrontendByHandle(int handle);
    private native int nativeShareFrontend(int id);
    @Result
    private native int nativeTune(int type, FrontendSettings settings);
    private native int nativeStopTune();
+26 −1
Original line number Diff line number Diff line
@@ -1173,6 +1173,8 @@ JTuner::JTuner(JNIEnv *env, jobject thiz)
    if (mTunerClient == NULL) {
        mTunerClient = new TunerClient();
    }

    mSharedFeId = (int) Constant::INVALID_FRONTEND_ID;
}

JTuner::~JTuner() {
@@ -1253,6 +1255,17 @@ jobject JTuner::openFrontendByHandle(int feHandle) {
            (jint) mFeId);
}

int JTuner::shareFrontend(int feId) {
    if (mFeClient != NULL) {
        ALOGE("Cannot share frontend:%d because this session is already holding %d",
              feId, mFeClient->getId());
        return (int)Result::INVALID_STATE;
    }

    mSharedFeId = feId;
    return (int)Result::SUCCESS;
}

jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
    jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendCapabilities");
    jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
@@ -1605,7 +1618,9 @@ Result JTuner::openDemux(int handle) {
            return Result::UNKNOWN_ERROR;
        }
        if (mFeClient != NULL) {
            mDemuxClient->setFrontendDataSource(mFeClient);
            return mDemuxClient->setFrontendDataSource(mFeClient);
        } else if (mSharedFeId != (int) Constant::INVALID_FRONTEND_ID) {
            return mDemuxClient->setFrontendDataSourceById(mSharedFeId);
        }
    }

@@ -1629,6 +1644,8 @@ jint JTuner::close() {
        }
        mDemuxClient = NULL;
    }

    mSharedFeId = (int) Constant::INVALID_FRONTEND_ID;
    return (jint) res;
}

@@ -3229,6 +3246,12 @@ static jobject android_media_tv_Tuner_open_frontend_by_handle(
    return tuner->openFrontendByHandle(handle);
}

static int android_media_tv_Tuner_share_frontend(
        JNIEnv *env, jobject thiz, jint id) {
    sp<JTuner> tuner = getTuner(env, thiz);
    return tuner->shareFrontend(id);
}

static int android_media_tv_Tuner_tune(JNIEnv *env, jobject thiz, jint type, jobject settings) {
    sp<JTuner> tuner = getTuner(env, thiz);
    FrontendSettings setting = getFrontendSettings(env, type, settings);
@@ -4307,6 +4330,8 @@ static const JNINativeMethod gTunerMethods[] = {
            (void *)android_media_tv_Tuner_get_frontend_ids },
    { "nativeOpenFrontendByHandle", "(I)Landroid/media/tv/tuner/Tuner$Frontend;",
            (void *)android_media_tv_Tuner_open_frontend_by_handle },
    { "nativeShareFrontend", "(I)I",
            (void *)android_media_tv_Tuner_share_frontend },
    { "nativeTune", "(ILandroid/media/tv/tuner/frontend/FrontendSettings;)I",
            (void *)android_media_tv_Tuner_tune },
    { "nativeStopTune", "()I", (void *)android_media_tv_Tuner_stop_tune },
+2 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ struct JTuner : public RefBase {
    int unlinkCiCam(jint id);
    jobject getFrontendIds();
    jobject openFrontendByHandle(int feHandle);
    int shareFrontend(int feId);
    jint closeFrontendById(int id);
    jobject getFrontendInfo(int id);
    int tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
@@ -210,6 +211,7 @@ private:
    static sp<TunerClient> mTunerClient;
    sp<FrontendClient> mFeClient;
    int mFeId;
    int mSharedFeId;
    sp<LnbClient> mLnbClient;
    sp<DemuxClient> mDemuxClient;
    static jobject getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
+9 −0
Original line number Diff line number Diff line
@@ -60,6 +60,15 @@ Result DemuxClient::setFrontendDataSource(sp<FrontendClient> frontendClient) {
    return Result::INVALID_STATE;
}

Result DemuxClient::setFrontendDataSourceById(int frontendId) {
    if (mTunerDemux != NULL) {
        Status s = mTunerDemux->setFrontendDataSourceById(frontendId);
        return ClientHelper::getServiceSpecificErrorCode(s);
    }

    return Result::INVALID_STATE;
}

sp<FilterClient> DemuxClient::openFilter(DemuxFilterType type, int bufferSize,
        sp<FilterClientCallback> cb) {
    if (mTunerDemux != NULL) {
+5 −0
Original line number Diff line number Diff line
@@ -60,6 +60,11 @@ public:
     */
    Result setFrontendDataSource(sp<FrontendClient> frontendClient);

    /**
     * Set a frontend resource by handle as data input of the demux.
     */
    Result setFrontendDataSourceById(int frontendId);

    /**
     * Open a new filter client.
     */