Merge "Fix Tuner#shareFrontendFromTuner()"

This commit is contained in:
Kensuke Miyagi
2021-08-04 03:47:30 +00:00
committed by Android (Google) Code Review
5 changed files with 44 additions and 1 deletions

View File

@@ -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();

View File

@@ -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 },

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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.
*/