Merge "Fix Tuner#shareFrontendFromTuner()"
This commit is contained in:
committed by
Android (Google) Code Review
commit
174c45f6cb
@@ -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();
|
||||
|
||||
@@ -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 },
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user