Allow filter configurations to have NULL filterSettings
In Tuner java, we mark Settings in all the FilterConfiguration as nullable. It could even be set null for the filter subtypes that could have filter settings, for example, the clients could config TS AV filter with a null settings or a non-null AvSettings. In tuner JNI, we read settings by default, which could cause crash Changing the implementation to allow the filter configurations to have null settings Test: atest android.media.tv.tuner.cts Bug: 181152149 Change-Id: I7c1d8721aae6da8e557138537e65966628584a9a
This commit is contained in:
@@ -3571,26 +3571,28 @@ static DemuxFilterSettings getFilterConfiguration(
|
||||
.tpid = tpid,
|
||||
};
|
||||
|
||||
DemuxTsFilterType tsType = static_cast<DemuxTsFilterType>(subtype);
|
||||
switch (tsType) {
|
||||
case DemuxTsFilterType::SECTION:
|
||||
tsFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::AUDIO:
|
||||
case DemuxTsFilterType::VIDEO:
|
||||
tsFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::PES:
|
||||
tsFilterSettings.filterSettings.pesData(
|
||||
getFilterPesDataSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::RECORD:
|
||||
tsFilterSettings.filterSettings.record(
|
||||
getFilterRecordSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
if (settingsObj != NULL) {
|
||||
DemuxTsFilterType tsType = static_cast<DemuxTsFilterType>(subtype);
|
||||
switch (tsType) {
|
||||
case DemuxTsFilterType::SECTION:
|
||||
tsFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::AUDIO:
|
||||
case DemuxTsFilterType::VIDEO:
|
||||
tsFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::PES:
|
||||
tsFilterSettings.filterSettings.pesData(
|
||||
getFilterPesDataSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxTsFilterType::RECORD:
|
||||
tsFilterSettings.filterSettings.record(
|
||||
getFilterRecordSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
filterSettings.ts(tsFilterSettings);
|
||||
break;
|
||||
@@ -3602,60 +3604,55 @@ static DemuxFilterSettings getFilterConfiguration(
|
||||
DemuxMmtpFilterSettings mmtpFilterSettings {
|
||||
.mmtpPid = mmtpPid,
|
||||
};
|
||||
DemuxMmtpFilterType mmtpType = static_cast<DemuxMmtpFilterType>(subtype);
|
||||
switch (mmtpType) {
|
||||
case DemuxMmtpFilterType::SECTION:
|
||||
mmtpFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::AUDIO:
|
||||
case DemuxMmtpFilterType::VIDEO:
|
||||
mmtpFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::PES:
|
||||
mmtpFilterSettings.filterSettings.pesData(
|
||||
getFilterPesDataSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::RECORD:
|
||||
mmtpFilterSettings.filterSettings.record(
|
||||
getFilterRecordSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::DOWNLOAD:
|
||||
mmtpFilterSettings.filterSettings.download(
|
||||
getFilterDownloadSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
if (settingsObj != NULL) {
|
||||
DemuxMmtpFilterType mmtpType = static_cast<DemuxMmtpFilterType>(subtype);
|
||||
switch (mmtpType) {
|
||||
case DemuxMmtpFilterType::SECTION:
|
||||
mmtpFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::AUDIO:
|
||||
case DemuxMmtpFilterType::VIDEO:
|
||||
mmtpFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::PES:
|
||||
mmtpFilterSettings.filterSettings.pesData(
|
||||
getFilterPesDataSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::RECORD:
|
||||
mmtpFilterSettings.filterSettings.record(
|
||||
getFilterRecordSettings(env, settingsObj));
|
||||
break;
|
||||
case DemuxMmtpFilterType::DOWNLOAD:
|
||||
mmtpFilterSettings.filterSettings.download(
|
||||
getFilterDownloadSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
filterSettings.mmtp(mmtpFilterSettings);
|
||||
break;
|
||||
}
|
||||
case DemuxFilterMainType::IP: {
|
||||
DemuxIpAddress ipAddr = getDemuxIpAddress(env, filterConfigObj);
|
||||
|
||||
DemuxIpFilterSettings ipFilterSettings {
|
||||
.ipAddr = ipAddr,
|
||||
};
|
||||
|
||||
DemuxIpFilterType ipType = static_cast<DemuxIpFilterType>(subtype);
|
||||
switch (ipType) {
|
||||
case DemuxIpFilterType::SECTION: {
|
||||
ipFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
}
|
||||
case DemuxIpFilterType::IP: {
|
||||
jclass clazz = env->FindClass(
|
||||
"android/media/tv/tuner/filter/IpFilterConfiguration");
|
||||
bool bPassthrough = static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
filterConfigObj, env->GetFieldID(
|
||||
clazz, "mPassthrough", "Z")));
|
||||
ipFilterSettings.filterSettings.bPassthrough(bPassthrough);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
if (ipType == DemuxIpFilterType::SECTION && settingsObj != NULL) {
|
||||
ipFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
} else if (ipType == DemuxIpFilterType::IP) {
|
||||
jclass clazz = env->FindClass(
|
||||
"android/media/tv/tuner/filter/IpFilterConfiguration");
|
||||
bool bPassthrough = static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
filterConfigObj, env->GetFieldID(
|
||||
clazz, "mPassthrough", "Z")));
|
||||
ipFilterSettings.filterSettings.bPassthrough(bPassthrough);
|
||||
}
|
||||
filterSettings.ip(ipFilterSettings);
|
||||
break;
|
||||
@@ -3672,24 +3669,17 @@ static DemuxFilterSettings getFilterConfiguration(
|
||||
.packetType = packetType,
|
||||
.isCompressedIpPacket = isCompressedIpPacket,
|
||||
};
|
||||
|
||||
DemuxTlvFilterType tlvType = static_cast<DemuxTlvFilterType>(subtype);
|
||||
switch (tlvType) {
|
||||
case DemuxTlvFilterType::SECTION: {
|
||||
tlvFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
}
|
||||
case DemuxTlvFilterType::TLV: {
|
||||
bool bPassthrough = static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
filterConfigObj, env->GetFieldID(
|
||||
clazz, "mPassthrough", "Z")));
|
||||
tlvFilterSettings.filterSettings.bPassthrough(bPassthrough);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
if (tlvType == DemuxTlvFilterType::SECTION && settingsObj != NULL) {
|
||||
tlvFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
} else if (tlvType == DemuxTlvFilterType::TLV) {
|
||||
bool bPassthrough = static_cast<bool>(
|
||||
env->GetBooleanField(
|
||||
filterConfigObj, env->GetFieldID(
|
||||
clazz, "mPassthrough", "Z")));
|
||||
tlvFilterSettings.filterSettings.bPassthrough(bPassthrough);
|
||||
}
|
||||
filterSettings.tlv(tlvFilterSettings);
|
||||
break;
|
||||
@@ -3704,14 +3694,17 @@ static DemuxFilterSettings getFilterConfiguration(
|
||||
.packetType = packetType,
|
||||
.lengthType = lengthType,
|
||||
};
|
||||
DemuxAlpFilterType alpType = static_cast<DemuxAlpFilterType>(subtype);
|
||||
switch (alpType) {
|
||||
case DemuxAlpFilterType::SECTION:
|
||||
alpFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
if (settingsObj != NULL) {
|
||||
DemuxAlpFilterType alpType = static_cast<DemuxAlpFilterType>(subtype);
|
||||
switch (alpType) {
|
||||
case DemuxAlpFilterType::SECTION:
|
||||
alpFilterSettings.filterSettings.section(
|
||||
getFilterSectionSettings(env, settingsObj));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
filterSettings.alp(alpFilterSettings);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user