Merge changes from topic "tuner_aidl_fw"
* changes:
Migrate native tuner to new AIDL HAL.
Put TunerFrontendInfo inside of TRM.
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index 716933a..2c2e811 100755
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -6020,6 +6020,7 @@
method public static int getTunerVersion();
field public static final int TUNER_VERSION_1_0 = 65536; // 0x10000
field public static final int TUNER_VERSION_1_1 = 65537; // 0x10001
+ field public static final int TUNER_VERSION_2_0 = 131072; // 0x20000
field public static final int TUNER_VERSION_UNKNOWN = 0; // 0x0
}
diff --git a/media/java/android/media/tv/tuner/TunerVersionChecker.java b/media/java/android/media/tv/tuner/TunerVersionChecker.java
index b40ba1e..3e13bed 100644
--- a/media/java/android/media/tv/tuner/TunerVersionChecker.java
+++ b/media/java/android/media/tv/tuner/TunerVersionChecker.java
@@ -38,8 +38,9 @@
private TunerVersionChecker() {}
/** @hide */
- @IntDef(prefix = "TUNER_VERSION_", value = {TUNER_VERSION_UNKNOWN, TUNER_VERSION_1_0,
- TUNER_VERSION_1_1})
+ @IntDef(prefix = "TUNER_VERSION_",
+ value = {TUNER_VERSION_UNKNOWN, TUNER_VERSION_1_0, TUNER_VERSION_1_1,
+ TUNER_VERSION_2_0})
@Retention(RetentionPolicy.SOURCE)
public @interface TunerVersion {}
/**
@@ -54,6 +55,10 @@
* Tuner version 1.1.
*/
public static final int TUNER_VERSION_1_1 = ((1 << 16) | 1);
+ /**
+ * Tuner version 2.0.
+ */
+ public static final int TUNER_VERSION_2_0 = (2 << 16);
/**
* Get the current running Tuner version.
diff --git a/media/java/android/media/tv/tunerresourcemanager/Android.bp b/media/java/android/media/tv/tunerresourcemanager/Android.bp
index c904ca2..65e7e10 100644
--- a/media/java/android/media/tv/tunerresourcemanager/Android.bp
+++ b/media/java/android/media/tv/tunerresourcemanager/Android.bp
@@ -24,7 +24,7 @@
enabled: true,
},
cpp: {
- enabled: true,
+ enabled: false,
},
ndk: {
enabled: true,
@@ -33,5 +33,4 @@
srcs: [
":framework-media-tv-tunerresourcemanager-sources-aidl",
],
- imports: ["tv_tuner_frontend_info_aidl_interface"],
}
diff --git a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
index e399fbd..6f7adbc 100644
--- a/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
+++ b/media/java/android/media/tv/tunerresourcemanager/TunerResourceManager.java
@@ -24,7 +24,6 @@
import android.annotation.SystemService;
import android.content.Context;
import android.content.pm.PackageManager;
-import android.media.tv.tuner.TunerFrontendInfo;
import android.os.Binder;
import android.os.RemoteException;
import android.util.Log;
diff --git a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl
index 483d972..a1f6687 100644
--- a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl
+++ b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.aidl
@@ -16,13 +16,13 @@
package android.media.tv.tunerresourcemanager;
-import android.media.tv.tuner.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.CasSessionRequest;
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
import android.media.tv.tunerresourcemanager.ResourceClientProfile;
import android.media.tv.tunerresourcemanager.TunerCiCamRequest;
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
diff --git a/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl
new file mode 100644
index 0000000..8981ce0
--- /dev/null
+++ b/media/java/android/media/tv/tunerresourcemanager/aidl/android/media/tv/tunerresourcemanager/TunerFrontendInfo.aidl
@@ -0,0 +1,41 @@
+/**
+ * Copyright 2021, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media.tv.tunerresourcemanager;
+
+/**
+ * FrontendInfo interface that carries tuner frontend information.
+ *
+ * This is used to update the TunerResourceManager fronted resources.
+ * @hide
+ */
+parcelable TunerFrontendInfo {
+ /**
+ * Frontend Handle
+ */
+ int handle;
+
+ /**
+ * Frontend Type
+ */
+ int type;
+
+ /**
+ * Frontends are assigned with the same exclusiveGroupId if they can't
+ * function at same time. For instance, they share same hardware module.
+ */
+ int exclusiveGroupId;
+}
diff --git a/media/jni/Android.bp b/media/jni/Android.bp
index c775b6f..e817f2d 100644
--- a/media/jni/Android.bp
+++ b/media/jni/Android.bp
@@ -172,8 +172,7 @@
shared_libs: [
"android.hardware.graphics.bufferqueue@2.0",
- "android.hardware.tv.tuner@1.0",
- "android.hardware.tv.tuner@1.1",
+ "android.hardware.tv.tuner-V1-ndk",
"libbinder_ndk",
"libandroid_runtime",
"libcutils",
@@ -184,7 +183,6 @@
"libnativehelper",
"libutils",
"tv_tuner_aidl_interface-ndk",
- "tv_tuner_resource_manager_aidl_interface-ndk",
],
static_libs: [
diff --git a/media/jni/android_media_tv_Tuner.cpp b/media/jni/android_media_tv_Tuner.cpp
index 698fb5a5..d1c4b34 100644
--- a/media/jni/android_media_tv_Tuner.cpp
+++ b/media/jni/android_media_tv_Tuner.cpp
@@ -14,154 +14,280 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
#define LOG_TAG "TvTuner-JNI"
-#include <utils/Log.h>
-#include "android_media_MediaCodecLinearBlock.h"
#include "android_media_tv_Tuner.h"
-#include "android_runtime/AndroidRuntime.h"
+#include <aidl/android/hardware/tv/tuner/AudioExtraMetaData.h>
+#include <aidl/android/hardware/tv/tuner/AudioStreamType.h>
+#include <aidl/android/hardware/tv/tuner/AvStreamType.h>
+#include <aidl/android/hardware/tv/tuner/Constant.h>
+#include <aidl/android/hardware/tv/tuner/Constant64Bit.h>
+#include <aidl/android/hardware/tv/tuner/DataFormat.h>
+#include <aidl/android/hardware/tv/tuner/DemuxAlpFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxAlpFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxAlpLengthType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxCapabilities.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterAvSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterDownloadEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterDownloadSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterIpPayloadEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterMainType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterMediaEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterPesDataSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterPesEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterRecordSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterScIndexMask.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSectionBits.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSectionEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSectionSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSectionSettingsCondition.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSubType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterTemiEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterTsRecordEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxIpAddress.h>
+#include <aidl/android/hardware/tv/tuner/DemuxIpFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxIpFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxMmtpFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxMmtpFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxQueueNotifyBits.h>
+#include <aidl/android/hardware/tv/tuner/DemuxRecordScIndexType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxScHevcIndex.h>
+#include <aidl/android/hardware/tv/tuner/DemuxScIndex.h>
+#include <aidl/android/hardware/tv/tuner/DemuxTlvFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxTlvFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxTsFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/DemuxTsFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxTsIndex.h>
+#include <aidl/android/hardware/tv/tuner/DvrSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAnalogAftFlag.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAnalogSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAnalogSifStandard.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAnalogType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3Bandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3CodeRate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3DemodOutputFormat.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3Fec.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3Modulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3PlpSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3Settings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtsc3TimeInterleaveMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtscModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendAtscSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendBandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendCableTimeInterleaveMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbBandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbCapabilities.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbCodeRate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbGuardInterval.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbTimeInterleaveMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDtmbTransmissionMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbcAnnex.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbcBandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbcModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbcOuterFec.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbcSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsCodeRate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsPilot.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsRolloff.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsScanType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsStandard.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbsVcmMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtBandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtCoderate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtConstellation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtGuardInterval.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtHierarchy.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtPlpMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtStandard.h>
+#include <aidl/android/hardware/tv/tuner/FrontendDvbtTransmissionMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendGuardInterval.h>
+#include <aidl/android/hardware/tv/tuner/FrontendInnerFec.h>
+#include <aidl/android/hardware/tv/tuner/FrontendInterleaveMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbs3Coderate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbs3Modulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbs3Rolloff.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbs3Settings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbsCoderate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbsModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbsRolloff.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbsSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbsStreamIdType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtBandwidth.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtCoderate.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtGuardInterval.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendIsdbtSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendModulation.h>
+#include <aidl/android/hardware/tv/tuner/FrontendModulationStatus.h>
+#include <aidl/android/hardware/tv/tuner/FrontendRollOff.h>
+#include <aidl/android/hardware/tv/tuner/FrontendScanAtsc3PlpInfo.h>
+#include <aidl/android/hardware/tv/tuner/FrontendScanMessageStandard.h>
+#include <aidl/android/hardware/tv/tuner/FrontendSpectralInversion.h>
+#include <aidl/android/hardware/tv/tuner/FrontendStatus.h>
+#include <aidl/android/hardware/tv/tuner/FrontendStatusAtsc3PlpInfo.h>
+#include <aidl/android/hardware/tv/tuner/FrontendStatusType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendTransmissionMode.h>
+#include <aidl/android/hardware/tv/tuner/FrontendType.h>
+#include <aidl/android/hardware/tv/tuner/LnbPosition.h>
+#include <aidl/android/hardware/tv/tuner/LnbTone.h>
+#include <aidl/android/hardware/tv/tuner/LnbVoltage.h>
+#include <aidl/android/hardware/tv/tuner/PlaybackSettings.h>
+#include <aidl/android/hardware/tv/tuner/RecordSettings.h>
+#include <aidl/android/hardware/tv/tuner/VideoStreamType.h>
+#include <aidlcommonsupport/NativeHandle.h>
#include <android-base/logging.h>
#include <media/stagefright/foundation/ADebug.h>
#include <nativehelper/JNIHelp.h>
#include <nativehelper/ScopedLocalRef.h>
-#include <utils/NativeHandle.h>
+#include <utils/Log.h>
+
+#include "android_media_MediaCodecLinearBlock.h"
+#include "android_runtime/AndroidRuntime.h"
#pragma GCC diagnostic ignored "-Wunused-function"
-using ::android::hardware::Void;
-using ::android::hardware::hidl_bitfield;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::tv::tuner::V1_0::AudioExtraMetaData;
-using ::android::hardware::tv::tuner::V1_0::DataFormat;
-using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxAlpLengthType;
-using ::android::hardware::tv::tuner::V1_0::DemuxCapabilities;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterAvSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterDownloadEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterDownloadSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterIpPayloadEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterMediaEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterMmtpRecordEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterPesDataSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterPesEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterRecordSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionBits;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterTemiEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterTsRecordEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxIpAddress;
-using ::android::hardware::tv::tuner::V1_0::DemuxIpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxIpFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxMmtpPid;
-using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits;
-using ::android::hardware::tv::tuner::V1_0::DemuxRecordScIndexType;
-using ::android::hardware::tv::tuner::V1_0::DemuxScHevcIndex;
-using ::android::hardware::tv::tuner::V1_0::DemuxScIndex;
-using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxTpid;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsIndex;
-using ::android::hardware::tv::tuner::V1_0::DvrSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3CodeRate;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3DemodOutputFormat;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Fec;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3PlpSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Settings;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtscSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcOuterFec;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsCodeRate;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsPilot;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsVcmMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtCoderate;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtConstellation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtPlpMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtTransmissionMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendInnerFec;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Coderate;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Settings;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsCoderate;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsStreamIdType;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtCoderate;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtGuardInterval;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendModulationStatus;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatus;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatusAtsc3PlpInfo;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatusType;
-using ::android::hardware::tv::tuner::V1_0::FrontendType;
-using ::android::hardware::tv::tuner::V1_0::LnbPosition;
-using ::android::hardware::tv::tuner::V1_0::LnbTone;
-using ::android::hardware::tv::tuner::V1_0::LnbVoltage;
-using ::android::hardware::tv::tuner::V1_0::PlaybackSettings;
-using ::android::hardware::tv::tuner::V1_0::RecordSettings;
-using ::android::hardware::tv::tuner::V1_1::AudioStreamType;
-using ::android::hardware::tv::tuner::V1_1::AvStreamType;
-using ::android::hardware::tv::tuner::V1_1::Constant;
-using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
-using ::android::hardware::tv::tuner::V1_1::FrontendAnalogAftFlag;
-using ::android::hardware::tv::tuner::V1_1::FrontendAnalogSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbcBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbsScanType;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbcSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbsSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbtSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbCapabilities;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbCodeRate;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbGuardInterval;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbSettings;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendGuardInterval;
-using ::android::hardware::tv::tuner::V1_1::FrontendInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendModulation;
-using ::android::hardware::tv::tuner::V1_1::FrontendRollOff;
-using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
-using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendTransmissionMode;
-using ::android::hardware::tv::tuner::V1_1::VideoStreamType;
+using ::aidl::android::hardware::tv::tuner::AudioExtraMetaData;
+using ::aidl::android::hardware::tv::tuner::AudioStreamType;
+using ::aidl::android::hardware::tv::tuner::AvStreamType;
+using ::aidl::android::hardware::tv::tuner::Constant;
+using ::aidl::android::hardware::tv::tuner::Constant64Bit;
+using ::aidl::android::hardware::tv::tuner::DataFormat;
+using ::aidl::android::hardware::tv::tuner::DemuxAlpFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxAlpFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxAlpFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxAlpLengthType;
+using ::aidl::android::hardware::tv::tuner::DemuxCapabilities;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterAvSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterDownloadEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterDownloadSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterIpPayloadEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMainType;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMediaEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMediaEventExtraMetaData;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMmtpRecordEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterPesDataSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterPesEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterRecordSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterScIndexMask;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSectionBits;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSectionEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSectionSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSectionSettingsCondition;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSectionSettingsConditionTableInfo;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSubType;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterTemiEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterTsRecordEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxIpAddress;
+using ::aidl::android::hardware::tv::tuner::DemuxIpAddressIpAddress;
+using ::aidl::android::hardware::tv::tuner::DemuxIpFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxIpFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxIpFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxMmtpFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxMmtpFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxMmtpFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxQueueNotifyBits;
+using ::aidl::android::hardware::tv::tuner::DemuxRecordScIndexType;
+using ::aidl::android::hardware::tv::tuner::DemuxScHevcIndex;
+using ::aidl::android::hardware::tv::tuner::DemuxScIndex;
+using ::aidl::android::hardware::tv::tuner::DemuxTlvFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxTlvFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxTlvFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxTsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxTsFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxTsFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxTsIndex;
+using ::aidl::android::hardware::tv::tuner::DvrSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendAnalogAftFlag;
+using ::aidl::android::hardware::tv::tuner::FrontendAnalogSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendAnalogSifStandard;
+using ::aidl::android::hardware::tv::tuner::FrontendAnalogType;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Bandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3CodeRate;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3DemodOutputFormat;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Fec;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Modulation;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3PlpSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3Settings;
+using ::aidl::android::hardware::tv::tuner::FrontendAtsc3TimeInterleaveMode;
+using ::aidl::android::hardware::tv::tuner::FrontendAtscModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendAtscSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendBandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendCableTimeInterleaveMode;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbBandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbCapabilities;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbCodeRate;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbGuardInterval;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbTimeInterleaveMode;
+using ::aidl::android::hardware::tv::tuner::FrontendDtmbTransmissionMode;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbcAnnex;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbcBandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbcModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbcOuterFec;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbcSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsCodeRate;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsPilot;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsRolloff;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsScanType;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsStandard;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbsVcmMode;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtBandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtCoderate;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtConstellation;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtGuardInterval;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtHierarchy;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtPlpMode;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtStandard;
+using ::aidl::android::hardware::tv::tuner::FrontendDvbtTransmissionMode;
+using ::aidl::android::hardware::tv::tuner::FrontendGuardInterval;
+using ::aidl::android::hardware::tv::tuner::FrontendInnerFec;
+using ::aidl::android::hardware::tv::tuner::FrontendInterleaveMode;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Coderate;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Modulation;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Rolloff;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbs3Settings;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbsCoderate;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbsModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbsRolloff;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbsSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbsStreamIdType;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtBandwidth;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtCoderate;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtGuardInterval;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtMode;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendIsdbtSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendModulation;
+using ::aidl::android::hardware::tv::tuner::FrontendModulationStatus;
+using ::aidl::android::hardware::tv::tuner::FrontendRollOff;
+using ::aidl::android::hardware::tv::tuner::FrontendScanAtsc3PlpInfo;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessageStandard;
+using ::aidl::android::hardware::tv::tuner::FrontendSpectralInversion;
+using ::aidl::android::hardware::tv::tuner::FrontendStatus;
+using ::aidl::android::hardware::tv::tuner::FrontendStatusAtsc3PlpInfo;
+using ::aidl::android::hardware::tv::tuner::FrontendStatusType;
+using ::aidl::android::hardware::tv::tuner::FrontendTransmissionMode;
+using ::aidl::android::hardware::tv::tuner::FrontendType;
+using ::aidl::android::hardware::tv::tuner::LnbPosition;
+using ::aidl::android::hardware::tv::tuner::LnbTone;
+using ::aidl::android::hardware::tv::tuner::LnbVoltage;
+using ::aidl::android::hardware::tv::tuner::PlaybackSettings;
+using ::aidl::android::hardware::tv::tuner::RecordSettings;
+using ::aidl::android::hardware::tv::tuner::VideoStreamType;
struct fields_t {
jfieldID tunerContext;
@@ -192,17 +318,16 @@
static fields_t gFields;
-
static int IP_V4_LENGTH = 4;
static int IP_V6_LENGTH = 16;
void DestroyCallback(const C2Buffer * buf, void *arg) {
android::sp<android::MediaEvent> event = (android::MediaEvent *)arg;
android::Mutex::Autolock autoLock(event->mLock);
- if (event->mLinearBlockObj != NULL) {
+ if (event->mLinearBlockObj != nullptr) {
JNIEnv *env = android::AndroidRuntime::getJNIEnv();
env->DeleteWeakGlobalRef(event->mLinearBlockObj);
- event->mLinearBlockObj = NULL;
+ event->mLinearBlockObj = nullptr;
}
event->mAvHandleRefCnt--;
@@ -211,11 +336,9 @@
}
namespace android {
-
/////////////// LnbClientCallbackImpl ///////////////////////
-
void LnbClientCallbackImpl::onEvent(const LnbEventType lnbEventType) {
- ALOGD("LnbClientCallbackImpl::onEvent, type=%d", lnbEventType);
+ ALOGV("LnbClientCallbackImpl::onEvent, type=%d", lnbEventType);
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject lnb(env->NewLocalRef(mLnbObj));
if (!env->IsSameObject(lnb, nullptr)) {
@@ -229,14 +352,14 @@
}
}
-void LnbClientCallbackImpl::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) {
- ALOGD("LnbClientCallbackImpl::onDiseqcMessage");
+void LnbClientCallbackImpl::onDiseqcMessage(const vector<uint8_t> &diseqcMessage) {
+ ALOGV("LnbClientCallbackImpl::onDiseqcMessage");
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject lnb(env->NewLocalRef(mLnbObj));
if (!env->IsSameObject(lnb, nullptr)) {
jbyteArray array = env->NewByteArray(diseqcMessage.size());
- env->SetByteArrayRegion(
- array, 0, diseqcMessage.size(), reinterpret_cast<jbyte*>(diseqcMessage[0]));
+ env->SetByteArrayRegion(array, 0, diseqcMessage.size(),
+ reinterpret_cast<const jbyte *>(&diseqcMessage[0]));
env->CallVoidMethod(
lnb,
gFields.onLnbDiseqcMessageID,
@@ -248,22 +371,21 @@
}
void LnbClientCallbackImpl::setLnb(jweak lnbObj) {
- ALOGD("LnbClientCallbackImpl::setLnb");
+ ALOGV("LnbClientCallbackImpl::setLnb");
mLnbObj = lnbObj;
}
LnbClientCallbackImpl::~LnbClientCallbackImpl() {
JNIEnv *env = AndroidRuntime::getJNIEnv();
- if (mLnbObj != NULL) {
+ if (mLnbObj != nullptr) {
env->DeleteWeakGlobalRef(mLnbObj);
- mLnbObj = NULL;
+ mLnbObj = nullptr;
}
}
/////////////// DvrClientCallbackImpl ///////////////////////
-
void DvrClientCallbackImpl::onRecordStatus(RecordStatus status) {
- ALOGD("DvrClientCallbackImpl::onRecordStatus");
+ ALOGV("DvrClientCallbackImpl::onRecordStatus");
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject dvr(env->NewLocalRef(mDvrObj));
if (!env->IsSameObject(dvr, nullptr)) {
@@ -278,7 +400,7 @@
}
void DvrClientCallbackImpl::onPlaybackStatus(PlaybackStatus status) {
- ALOGD("DvrClientCallbackImpl::onPlaybackStatus");
+ ALOGV("DvrClientCallbackImpl::onPlaybackStatus");
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject dvr(env->NewLocalRef(mDvrObj));
if (!env->IsSameObject(dvr, nullptr)) {
@@ -293,20 +415,19 @@
}
void DvrClientCallbackImpl::setDvr(jweak dvrObj) {
- ALOGD("DvrClientCallbackImpl::setDvr");
+ ALOGV("DvrClientCallbackImpl::setDvr");
mDvrObj = dvrObj;
}
DvrClientCallbackImpl::~DvrClientCallbackImpl() {
JNIEnv *env = AndroidRuntime::getJNIEnv();
- if (mDvrObj != NULL) {
+ if (mDvrObj != nullptr) {
env->DeleteWeakGlobalRef(mDvrObj);
- mDvrObj = NULL;
+ mDvrObj = nullptr;
}
}
/////////////// C2DataIdInfo ///////////////////////
-
C2DataIdInfo::C2DataIdInfo(uint32_t index, uint64_t value) : C2Param(kParamSize, index) {
CHECK(isGlobal());
CHECK_EQ(C2Param::INFO, kind());
@@ -316,40 +437,44 @@
}
/////////////// MediaEvent ///////////////////////
-
-MediaEvent::MediaEvent(sp<FilterClient> filterClient, hidl_handle avHandle,
- uint64_t dataId, uint64_t dataSize, jobject obj) : mFilterClient(filterClient),
- mDataId(dataId), mDataSize(dataSize), mBuffer(nullptr),
- mDataIdRefCnt(0), mAvHandleRefCnt(0), mIonHandle(nullptr) {
+MediaEvent::MediaEvent(sp<FilterClient> filterClient, native_handle_t *avHandle, uint64_t dataId,
+ uint64_t dataSize, jobject obj)
+ : mFilterClient(filterClient),
+ mDataId(dataId),
+ mDataSize(dataSize),
+ mBuffer(nullptr),
+ mDataIdRefCnt(0),
+ mAvHandleRefCnt(0),
+ mIonHandle(nullptr) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
mMediaEventObj = env->NewWeakGlobalRef(obj);
- mAvHandle = native_handle_clone(avHandle.getNativeHandle());
- mLinearBlockObj = NULL;
+ mAvHandle = avHandle;
+ mLinearBlockObj = nullptr;
}
MediaEvent::~MediaEvent() {
JNIEnv *env = AndroidRuntime::getJNIEnv();
env->DeleteWeakGlobalRef(mMediaEventObj);
- mMediaEventObj = NULL;
+ mMediaEventObj = nullptr;
native_handle_delete(mAvHandle);
- if (mIonHandle != NULL) {
+ if (mIonHandle != nullptr) {
delete mIonHandle;
}
std::shared_ptr<C2Buffer> pC2Buffer = mC2Buffer.lock();
- if (pC2Buffer != NULL) {
+ if (pC2Buffer != nullptr) {
pC2Buffer->unregisterOnDestroyNotify(&DestroyCallback, this);
}
- if (mLinearBlockObj != NULL) {
+ if (mLinearBlockObj != nullptr) {
env->DeleteWeakGlobalRef(mLinearBlockObj);
- mLinearBlockObj = NULL;
+ mLinearBlockObj = nullptr;
}
- mFilterClient = NULL;
+ mFilterClient = nullptr;
}
void MediaEvent::finalize() {
- if (mAvHandleRefCnt == 0 && mFilterClient != NULL) {
+ if (mAvHandleRefCnt == 0 && mFilterClient != nullptr) {
mFilterClient->releaseAvHandle(
mAvHandle, mDataIdRefCnt == 0 ? mDataId : 0);
native_handle_close(mAvHandle);
@@ -357,11 +482,11 @@
}
jobject MediaEvent::getLinearBlock() {
- ALOGD("MediaEvent::getLinearBlock");
- if (mAvHandle == NULL) {
- return NULL;
+ ALOGV("MediaEvent::getLinearBlock");
+ if (mAvHandle == nullptr) {
+ return nullptr;
}
- if (mLinearBlockObj != NULL) {
+ if (mLinearBlockObj != nullptr) {
return mLinearBlockObj;
}
@@ -374,13 +499,13 @@
uint64_t avSharedMemSize = info.size;
if (mAvHandle->numFds == 0) {
- if (avSharedHandle == NULL) {
+ if (avSharedHandle == nullptr) {
ALOGE("Shared AV memory handle is not initialized.");
- return NULL;
+ return nullptr;
}
if (avSharedHandle->numFds == 0) {
ALOGE("Shared AV memory handle is empty.");
- return NULL;
+ return nullptr;
}
fd = avSharedHandle->data[0];
dataSize = avSharedMemSize;
@@ -398,7 +523,7 @@
// event has value, use it as the index
memIndex = mAvHandle->data[mAvHandle->numFds];
} else {
- if (avSharedHandle != NULL) {
+ if (avSharedHandle != nullptr) {
numInts = avSharedHandle->numInts;
if (numInts > 0) {
// If the first int in the shared native handle has value, use it as the index
@@ -413,7 +538,7 @@
if (block != nullptr) {
// CreateLinearBlock delete mIonHandle after it create block successfully.
// ToDo: coordinate who is response to delete mIonHandle
- mIonHandle = NULL;
+ mIonHandle = nullptr;
JNIEnv *env = AndroidRuntime::getJNIEnv();
std::unique_ptr<JMediaCodecLinearBlock> context{new JMediaCodecLinearBlock};
context->mBlock = block;
@@ -444,8 +569,8 @@
reinterpret_cast<const native_handle_t*>(mIonHandle)));
native_handle_delete(const_cast<native_handle_t*>(
reinterpret_cast<const native_handle_t*>(mIonHandle)));
- mIonHandle = NULL;
- return NULL;
+ mIonHandle = nullptr;
+ return nullptr;
}
}
@@ -455,31 +580,24 @@
}
/////////////// FilterClientCallbackImpl ///////////////////////
-
-jobjectArray FilterClientCallbackImpl::getSectionEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getSectionEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/SectionEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIII)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterSectionEvent sectionEvent = event.section();
+ const DemuxFilterSectionEvent §ionEvent = event.get<DemuxFilterEvent::Tag::section>();
+ jint tableId = static_cast<jint>(sectionEvent.tableId);
+ jint version = static_cast<jint>(sectionEvent.version);
+ jint sectionNum = static_cast<jint>(sectionEvent.sectionNum);
+ jint dataLength = static_cast<jint>(sectionEvent.dataLength);
- jint tableId = static_cast<jint>(sectionEvent.tableId);
- jint version = static_cast<jint>(sectionEvent.version);
- jint sectionNum = static_cast<jint>(sectionEvent.sectionNum);
- jint dataLength = static_cast<jint>(sectionEvent.dataLength);
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, tableId, version, sectionNum, dataLength);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ jobject obj = env->NewObject(eventClazz, eventInit, tableId, version, sectionNum, dataLength);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getMediaEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getMediaEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/MediaEvent");
jmethodID eventInit = env->GetMethodID(eventClazz,
@@ -488,353 +606,284 @@
"ZJIZLandroid/media/tv/tuner/filter/AudioDescriptor;)V");
jfieldID eventContext = env->GetFieldID(eventClazz, "mNativeContext", "J");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterMediaEvent mediaEvent = event.media();
+ const DemuxFilterMediaEvent &mediaEvent = event.get<DemuxFilterEvent::Tag::media>();
+ jobject audioDescriptor = nullptr;
+ if (mediaEvent.extraMetaData.getTag() == DemuxFilterMediaEventExtraMetaData::Tag::audio) {
+ jclass adClazz = env->FindClass("android/media/tv/tuner/filter/AudioDescriptor");
+ jmethodID adInit = env->GetMethodID(adClazz, "<init>", "(BBCBBB)V");
- jobject audioDescriptor = NULL;
- if (mediaEvent.extraMetaData.getDiscriminator()
- == DemuxFilterMediaEvent::ExtraMetaData::hidl_discriminator::audio) {
- jclass adClazz = env->FindClass("android/media/tv/tuner/filter/AudioDescriptor");
- jmethodID adInit = env->GetMethodID(adClazz, "<init>", "(BBCBBB)V");
+ const AudioExtraMetaData &ad =
+ mediaEvent.extraMetaData.get<DemuxFilterMediaEventExtraMetaData::Tag::audio>();
+ jbyte adFade = static_cast<jbyte>(ad.adFade);
+ jbyte adPan = static_cast<jbyte>(ad.adPan);
+ jchar versionTextTag = static_cast<jchar>(ad.versionTextTag);
+ jbyte adGainCenter = static_cast<jbyte>(ad.adGainCenter);
+ jbyte adGainFront = static_cast<jbyte>(ad.adGainFront);
+ jbyte adGainSurround = static_cast<jbyte>(ad.adGainSurround);
- AudioExtraMetaData ad = mediaEvent.extraMetaData.audio();
- jbyte adFade = static_cast<jbyte>(ad.adFade);
- jbyte adPan = static_cast<jbyte>(ad.adPan);
- jchar versionTextTag = static_cast<jchar>(ad.versionTextTag);
- jbyte adGainCenter = static_cast<jbyte>(ad.adGainCenter);
- jbyte adGainFront = static_cast<jbyte>(ad.adGainFront);
- jbyte adGainSurround = static_cast<jbyte>(ad.adGainSurround);
-
- audioDescriptor =
- env->NewObject(adClazz, adInit, adFade, adPan, versionTextTag, adGainCenter,
- adGainFront, adGainSurround);
- }
-
- jlong dataLength = static_cast<jlong>(mediaEvent.dataLength);
-
- jint streamId = static_cast<jint>(mediaEvent.streamId);
- jboolean isPtsPresent = static_cast<jboolean>(mediaEvent.isPtsPresent);
- jlong pts = static_cast<jlong>(mediaEvent.pts);
- jlong offset = static_cast<jlong>(mediaEvent.offset);
- jboolean isSecureMemory = static_cast<jboolean>(mediaEvent.isSecureMemory);
- jlong avDataId = static_cast<jlong>(mediaEvent.avDataId);
- jint mpuSequenceNumber = static_cast<jint>(mediaEvent.mpuSequenceNumber);
- jboolean isPesPrivateData = static_cast<jboolean>(mediaEvent.isPesPrivateData);
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, streamId, isPtsPresent, pts, dataLength,
- offset, NULL, isSecureMemory, avDataId, mpuSequenceNumber, isPesPrivateData,
- audioDescriptor);
-
- if (mediaEvent.avMemory.getNativeHandle() != NULL || mediaEvent.avDataId != 0) {
- sp<MediaEvent> mediaEventSp =
- new MediaEvent(mFilterClient, mediaEvent.avMemory,
- mediaEvent.avDataId, dataLength + offset, obj);
- mediaEventSp->mAvHandleRefCnt++;
- env->SetLongField(obj, eventContext, (jlong) mediaEventSp.get());
- mediaEventSp->incStrong(obj);
- }
-
- env->SetObjectArrayElement(arr, i, obj);
+ audioDescriptor = env->NewObject(adClazz, adInit, adFade, adPan, versionTextTag,
+ adGainCenter, adGainFront, adGainSurround);
}
- return arr;
+
+ jlong dataLength = static_cast<jlong>(mediaEvent.dataLength);
+ jint streamId = static_cast<jint>(mediaEvent.streamId);
+ jboolean isPtsPresent = static_cast<jboolean>(mediaEvent.isPtsPresent);
+ jlong pts = static_cast<jlong>(mediaEvent.pts);
+ jlong offset = static_cast<jlong>(mediaEvent.offset);
+ jboolean isSecureMemory = static_cast<jboolean>(mediaEvent.isSecureMemory);
+ jlong avDataId = static_cast<jlong>(mediaEvent.avDataId);
+ jint mpuSequenceNumber = static_cast<jint>(mediaEvent.mpuSequenceNumber);
+ jboolean isPesPrivateData = static_cast<jboolean>(mediaEvent.isPesPrivateData);
+
+ jobject obj = env->NewObject(eventClazz, eventInit, streamId, isPtsPresent, pts, dataLength,
+ offset, nullptr, isSecureMemory, avDataId, mpuSequenceNumber,
+ isPesPrivateData, audioDescriptor);
+
+ if (mediaEvent.avMemory.fds.size() > 0 || mediaEvent.avDataId != 0) {
+ sp<MediaEvent> mediaEventSp =
+ new MediaEvent(mFilterClient, makeFromAidl(mediaEvent.avMemory),
+ mediaEvent.avDataId, dataLength + offset, obj);
+ mediaEventSp->mAvHandleRefCnt++;
+ env->SetLongField(obj, eventContext, (jlong)mediaEventSp.get());
+ mediaEventSp->incStrong(obj);
+ }
+
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getPesEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getPesEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/PesEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(III)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterPesEvent pesEvent = event.pes();
+ const DemuxFilterPesEvent &pesEvent = event.get<DemuxFilterEvent::Tag::pes>();
+ jint streamId = static_cast<jint>(pesEvent.streamId);
+ jint dataLength = static_cast<jint>(pesEvent.dataLength);
+ jint mpuSequenceNumber = static_cast<jint>(pesEvent.mpuSequenceNumber);
- jint streamId = static_cast<jint>(pesEvent.streamId);
- jint dataLength = static_cast<jint>(pesEvent.dataLength);
- jint mpuSequenceNumber = static_cast<jint>(pesEvent.mpuSequenceNumber);
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, streamId, dataLength, mpuSequenceNumber);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ jobject obj = env->NewObject(eventClazz, eventInit, streamId, dataLength, mpuSequenceNumber);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getTsRecordEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events,
- const std::vector<DemuxFilterEventExt::Event>& eventsExt) {
+void FilterClientCallbackImpl::getTsRecordEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/TsRecordEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIJJI)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterTsRecordEvent tsRecordEvent = event.tsRecord();
- DemuxPid pid = tsRecordEvent.pid;
+ const DemuxFilterTsRecordEvent &tsRecordEvent = event.get<DemuxFilterEvent::Tag::tsRecord>();
+ DemuxPid pid = tsRecordEvent.pid;
- jint jpid = static_cast<jint>(Constant::INVALID_TS_PID);
-
- if (pid.getDiscriminator() == DemuxPid::hidl_discriminator::tPid) {
- jpid = static_cast<jint>(pid.tPid());
- } else if (pid.getDiscriminator() == DemuxPid::hidl_discriminator::mmtpPid) {
- jpid = static_cast<jint>(pid.mmtpPid());
- }
-
- jint sc = 0;
-
- if (tsRecordEvent.scIndexMask.getDiscriminator()
- == DemuxFilterTsRecordEvent::ScIndexMask::hidl_discriminator::sc) {
- sc = static_cast<jint>(tsRecordEvent.scIndexMask.sc());
- } else if (tsRecordEvent.scIndexMask.getDiscriminator()
- == DemuxFilterTsRecordEvent::ScIndexMask::hidl_discriminator::scHevc) {
- sc = static_cast<jint>(tsRecordEvent.scIndexMask.scHevc());
- }
-
- jint ts = static_cast<jint>(tsRecordEvent.tsIndexMask);
-
- jlong byteNumber = static_cast<jlong>(tsRecordEvent.byteNumber);
-
- jlong pts;
- jlong firstMbInSlice;
- if (eventsExt.size() > i && eventsExt[i].getDiscriminator() ==
- DemuxFilterEventExt::Event::hidl_discriminator::tsRecord) {
- pts = static_cast<jlong>(eventsExt[i].tsRecord().pts);
- firstMbInSlice = static_cast<jint>(eventsExt[i].tsRecord().firstMbInSlice);
- } else {
- pts = static_cast<jlong>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
- firstMbInSlice = static_cast<jint>(Constant::INVALID_FIRST_MACROBLOCK_IN_SLICE);
- }
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, jpid, ts, sc, byteNumber,
- pts, firstMbInSlice);
- env->SetObjectArrayElement(arr, i, obj);
+ jint jpid = static_cast<jint>(Constant::INVALID_TS_PID);
+ if (pid.getTag() == DemuxPid::Tag::tPid) {
+ jpid = static_cast<jint>(pid.get<DemuxPid::Tag::tPid>());
+ } else if (pid.getTag() == DemuxPid::Tag::mmtpPid) {
+ jpid = static_cast<jint>(pid.get<DemuxPid::Tag::mmtpPid>());
}
- return arr;
+
+ jint sc = 0;
+ if (tsRecordEvent.scIndexMask.getTag() == DemuxFilterScIndexMask::Tag::scIndex) {
+ sc = static_cast<jint>(
+ tsRecordEvent.scIndexMask.get<DemuxFilterScIndexMask::Tag::scIndex>());
+ } else if (tsRecordEvent.scIndexMask.getTag() == DemuxFilterScIndexMask::Tag::scHevc) {
+ sc = static_cast<jint>(
+ tsRecordEvent.scIndexMask.get<DemuxFilterScIndexMask::Tag::scHevc>());
+ }
+
+ jint ts = static_cast<jint>(tsRecordEvent.tsIndexMask);
+ jlong byteNumber = static_cast<jlong>(tsRecordEvent.byteNumber);
+ jlong pts = static_cast<jlong>(tsRecordEvent.pts);
+ jint firstMbInSlice = static_cast<jint>(tsRecordEvent.firstMbInSlice);
+
+ jobject obj =
+ env->NewObject(eventClazz, eventInit, jpid, ts, sc, byteNumber, pts, firstMbInSlice);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getMmtpRecordEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events,
- const std::vector<DemuxFilterEventExt::Event>& eventsExt) {
+void FilterClientCallbackImpl::getMmtpRecordEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/MmtpRecordEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IJIJII)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
+ const DemuxFilterMmtpRecordEvent &mmtpRecordEvent =
+ event.get<DemuxFilterEvent::Tag::mmtpRecord>();
+ jint scHevcIndexMask = static_cast<jint>(mmtpRecordEvent.scHevcIndexMask);
+ jlong byteNumber = static_cast<jlong>(mmtpRecordEvent.byteNumber);
+ jint mpuSequenceNumber = static_cast<jint>(mmtpRecordEvent.mpuSequenceNumber);
+ jlong pts = static_cast<jlong>(mmtpRecordEvent.pts);
+ jint firstMbInSlice = static_cast<jint>(mmtpRecordEvent.firstMbInSlice);
+ jlong tsIndexMask = static_cast<jlong>(mmtpRecordEvent.tsIndexMask);
- DemuxFilterMmtpRecordEvent mmtpRecordEvent = event.mmtpRecord();
-
- jint scHevcIndexMask = static_cast<jint>(mmtpRecordEvent.scHevcIndexMask);
- jlong byteNumber = static_cast<jlong>(mmtpRecordEvent.byteNumber);
-
- jint mpuSequenceNumber;
- jlong pts;
- jlong firstMbInSlice;
- jlong tsIndexMask;
-
- if (eventsExt.size() > i && eventsExt[i].getDiscriminator() ==
- DemuxFilterEventExt::Event::hidl_discriminator::mmtpRecord) {
- mpuSequenceNumber = static_cast<jint>(eventsExt[i].mmtpRecord().mpuSequenceNumber);
- pts = static_cast<jlong>(eventsExt[i].mmtpRecord().pts);
- firstMbInSlice = static_cast<jint>(eventsExt[i].mmtpRecord().firstMbInSlice);
- tsIndexMask = static_cast<jint>(eventsExt[i].mmtpRecord().tsIndexMask);
- } else {
- mpuSequenceNumber =
- static_cast<jint>(Constant::INVALID_MMTP_RECORD_EVENT_MPT_SEQUENCE_NUM);
- pts = static_cast<jlong>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
- firstMbInSlice = static_cast<jint>(Constant::INVALID_FIRST_MACROBLOCK_IN_SLICE);
- tsIndexMask = 0;
- }
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber,
- mpuSequenceNumber, pts, firstMbInSlice, tsIndexMask);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ jobject obj = env->NewObject(eventClazz, eventInit, scHevcIndexMask, byteNumber,
+ mpuSequenceNumber, pts, firstMbInSlice, tsIndexMask);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getDownloadEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getDownloadEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/DownloadEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(IIIII)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterDownloadEvent downloadEvent = event.download();
+ const DemuxFilterDownloadEvent &downloadEvent = event.get<DemuxFilterEvent::Tag::download>();
+ jint itemId = static_cast<jint>(downloadEvent.itemId);
+ jint mpuSequenceNumber = static_cast<jint>(downloadEvent.mpuSequenceNumber);
+ jint itemFragmentIndex = static_cast<jint>(downloadEvent.itemFragmentIndex);
+ jint lastItemFragmentIndex = static_cast<jint>(downloadEvent.lastItemFragmentIndex);
+ jint dataLength = static_cast<jint>(downloadEvent.dataLength);
- jint itemId = static_cast<jint>(downloadEvent.itemId);
- jint mpuSequenceNumber = static_cast<jint>(downloadEvent.mpuSequenceNumber);
- jint itemFragmentIndex = static_cast<jint>(downloadEvent.itemFragmentIndex);
- jint lastItemFragmentIndex = static_cast<jint>(downloadEvent.lastItemFragmentIndex);
- jint dataLength = static_cast<jint>(downloadEvent.dataLength);
-
- jobject obj =
- env->NewObject(eventClazz, eventInit, itemId, mpuSequenceNumber, itemFragmentIndex,
- lastItemFragmentIndex, dataLength);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ jobject obj = env->NewObject(eventClazz, eventInit, itemId, mpuSequenceNumber,
+ itemFragmentIndex, lastItemFragmentIndex, dataLength);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getIpPayloadEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getIpPayloadEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/IpPayloadEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterIpPayloadEvent ipPayloadEvent = event.ipPayload();
- jint dataLength = static_cast<jint>(ipPayloadEvent.dataLength);
- jobject obj = env->NewObject(eventClazz, eventInit, dataLength);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ const DemuxFilterIpPayloadEvent &ipPayloadEvent = event.get<DemuxFilterEvent::Tag::ipPayload>();
+ jint dataLength = static_cast<jint>(ipPayloadEvent.dataLength);
+ jobject obj = env->NewObject(eventClazz, eventInit, dataLength);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getTemiEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events) {
+void FilterClientCallbackImpl::getTemiEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/TemiEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(JB[B)V");
- for (int i = 0; i < events.size(); i++) {
- auto event = events[i];
- DemuxFilterTemiEvent temiEvent = event.temi();
- jlong pts = static_cast<jlong>(temiEvent.pts);
- jbyte descrTag = static_cast<jbyte>(temiEvent.descrTag);
- std::vector<uint8_t> descrData = temiEvent.descrData;
+ const DemuxFilterTemiEvent &temiEvent = event.get<DemuxFilterEvent::Tag::temi>();
+ jlong pts = static_cast<jlong>(temiEvent.pts);
+ jbyte descrTag = static_cast<jbyte>(temiEvent.descrTag);
+ std::vector<uint8_t> descrData = temiEvent.descrData;
- jbyteArray array = env->NewByteArray(descrData.size());
- env->SetByteArrayRegion(
- array, 0, descrData.size(), reinterpret_cast<jbyte*>(&descrData[0]));
+ jbyteArray array = env->NewByteArray(descrData.size());
+ env->SetByteArrayRegion(array, 0, descrData.size(), reinterpret_cast<jbyte *>(&descrData[0]));
- jobject obj = env->NewObject(eventClazz, eventInit, pts, descrTag, array);
- env->SetObjectArrayElement(arr, i, obj);
- }
- return arr;
+ jobject obj = env->NewObject(eventClazz, eventInit, pts, descrTag, array);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getScramblingStatusEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt) {
+void FilterClientCallbackImpl::getScramblingStatusEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/ScramblingStatusEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");
- auto scramblingStatus = eventsExt[0].monitorEvent().scramblingStatus();
- jobject obj = env->NewObject(eventClazz, eventInit, static_cast<jint>(scramblingStatus));
- env->SetObjectArrayElement(arr, 0, obj);
- return arr;
+ const DemuxFilterMonitorEvent &scramblingStatus =
+ event.get<DemuxFilterEvent::Tag::monitorEvent>()
+ .get<DemuxFilterMonitorEvent::Tag::scramblingStatus>();
+ jobject obj = env->NewObject(eventClazz, eventInit, scramblingStatus);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getIpCidChangeEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt) {
+void FilterClientCallbackImpl::getIpCidChangeEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/IpCidChangeEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");
- auto cid = eventsExt[0].monitorEvent().cid();
- jobject obj = env->NewObject(eventClazz, eventInit, static_cast<jint>(cid));
- env->SetObjectArrayElement(arr, 0, obj);
- return arr;
+ const DemuxFilterMonitorEvent &cid = event.get<DemuxFilterEvent::Tag::monitorEvent>()
+ .get<DemuxFilterMonitorEvent::Tag::cid>();
+ jobject obj = env->NewObject(eventClazz, eventInit, cid);
+ env->SetObjectArrayElement(arr, size, obj);
}
-jobjectArray FilterClientCallbackImpl::getRestartEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt) {
+void FilterClientCallbackImpl::getRestartEvent(jobjectArray &arr, const int size,
+ const DemuxFilterEvent &event) {
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/RestartEvent");
jmethodID eventInit = env->GetMethodID(eventClazz, "<init>", "(I)V");
- auto startId = eventsExt[0].startId();
+ const int32_t &startId = event.get<DemuxFilterEvent::Tag::startId>();
jobject obj = env->NewObject(eventClazz, eventInit, static_cast<jint>(startId));
- env->SetObjectArrayElement(arr, 0, obj);
- return arr;
+ env->SetObjectArrayElement(arr, size, obj);
}
-void FilterClientCallbackImpl::onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
- const DemuxFilterEventExt& filterEventExt) {
- ALOGD("FilterClientCallbackImpl::onFilterEvent_1_1");
-
+void FilterClientCallbackImpl::onFilterEvent(const vector<DemuxFilterEvent> &events) {
+ ALOGV("FilterClientCallbackImpl::onFilterEvent");
JNIEnv *env = AndroidRuntime::getJNIEnv();
+ jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/FilterEvent");
jobjectArray array;
- std::vector<DemuxFilterEvent::Event> events = filterEvent.events;
- std::vector<DemuxFilterEventExt::Event> eventsExt = filterEventExt.events;
- jclass eventClazz = env->FindClass("android/media/tv/tuner/filter/FilterEvent");
+ if (!events.empty()) {
+ array = env->NewObjectArray(events.size(), eventClazz, nullptr);
+ }
- if (events.empty() && !eventsExt.empty()) {
- // Monitor event should be sent with one DemuxFilterMonitorEvent in DemuxFilterEventExt.
- array = env->NewObjectArray(1, eventClazz, NULL);
- auto eventExt = eventsExt[0];
- switch (eventExt.getDiscriminator()) {
- case DemuxFilterEventExt::Event::hidl_discriminator::monitorEvent: {
- switch (eventExt.monitorEvent().getDiscriminator()) {
- case DemuxFilterMonitorEvent::hidl_discriminator::scramblingStatus: {
- array = getScramblingStatusEvent(array, eventsExt);
+ for (int i = 0, arraySize = 0; i < events.size(); i++) {
+ const DemuxFilterEvent &event = events[i];
+ switch (event.getTag()) {
+ case DemuxFilterEvent::Tag::media: {
+ getMediaEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::section: {
+ getSectionEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::pes: {
+ getPesEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::tsRecord: {
+ getTsRecordEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::mmtpRecord: {
+ getMmtpRecordEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::download: {
+ getDownloadEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::ipPayload: {
+ getIpPayloadEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::temi: {
+ getTemiEvent(array, arraySize, event);
+ arraySize++;
+ break;
+ }
+ case DemuxFilterEvent::Tag::monitorEvent: {
+ switch (event.get<DemuxFilterEvent::Tag::monitorEvent>().getTag()) {
+ case DemuxFilterMonitorEvent::Tag::scramblingStatus: {
+ getScramblingStatusEvent(array, arraySize, event);
+ arraySize++;
break;
}
- case DemuxFilterMonitorEvent::hidl_discriminator::cid: {
- array = getIpCidChangeEvent(array, eventsExt);
+ case DemuxFilterMonitorEvent::Tag::cid: {
+ getIpCidChangeEvent(array, arraySize, event);
+ arraySize++;
break;
}
default: {
+ ALOGE("FilterClientCallbackImpl::onFilterEvent: unknown MonitorEvent");
break;
}
}
break;
}
- case DemuxFilterEventExt::Event::hidl_discriminator::startId: {
- array = getRestartEvent(array, eventsExt);
+ case DemuxFilterEvent::Tag::startId: {
+ getRestartEvent(array, arraySize, event);
+ arraySize++;
break;
}
default: {
- break;
- }
- }
- }
-
- if (!events.empty()) {
- array = env->NewObjectArray(events.size(), eventClazz, NULL);
- auto event = events[0];
- switch (event.getDiscriminator()) {
- case DemuxFilterEvent::Event::hidl_discriminator::media: {
- array = getMediaEvent(array, events);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::section: {
- array = getSectionEvent(array, events);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::pes: {
- array = getPesEvent(array, events);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::tsRecord: {
- array = getTsRecordEvent(array, events, eventsExt);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::mmtpRecord: {
- array = getMmtpRecordEvent(array, events, eventsExt);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::download: {
- array = getDownloadEvent(array, events);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::ipPayload: {
- array = getIpPayloadEvent(array, events);
- break;
- }
- case DemuxFilterEvent::Event::hidl_discriminator::temi: {
- array = getTemiEvent(array, events);
- break;
- }
- default: {
+ ALOGE("FilterClientCallbackImpl::onFilterEvent: unknown DemuxFilterEvent");
break;
}
}
@@ -846,22 +895,13 @@
gFields.onFilterEventID,
array);
} else {
- ALOGE("FilterClientCallbackImpl::onFilterEvent_1_1:"
- "Filter object has been freed. Ignoring callback.");
+ ALOGE("FilterClientCallbackImpl::onFilterEvent:"
+ "Filter object has been freed. Ignoring callback.");
}
}
-void FilterClientCallbackImpl::onFilterEvent(const DemuxFilterEvent& filterEvent) {
- ALOGD("FilterClientCallbackImpl::onFilterEvent");
- std::vector<DemuxFilterEventExt::Event> emptyEventsExt;
- DemuxFilterEventExt emptyFilterEventExt {
- .events = emptyEventsExt,
- };
- return onFilterEvent_1_1(filterEvent, emptyFilterEventExt);
-}
-
void FilterClientCallbackImpl::onFilterStatus(const DemuxFilterStatus status) {
- ALOGD("FilterClientCallbackImpl::onFilterStatus");
+ ALOGV("FilterClientCallbackImpl::onFilterStatus");
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject filter(env->NewLocalRef(mFilterObj));
if (!env->IsSameObject(filter, nullptr)) {
@@ -876,7 +916,7 @@
}
void FilterClientCallbackImpl::setFilter(jweak filterObj, sp<FilterClient> filterClient) {
- ALOGD("FilterClientCallbackImpl::setFilter");
+ ALOGV("FilterClientCallbackImpl::setFilter");
// Java Object
mFilterObj = filterObj;
mFilterClient = filterClient;
@@ -884,19 +924,18 @@
FilterClientCallbackImpl::~FilterClientCallbackImpl() {
JNIEnv *env = AndroidRuntime::getJNIEnv();
- if (mFilterObj != NULL) {
+ if (mFilterObj != nullptr) {
env->DeleteWeakGlobalRef(mFilterObj);
- mFilterObj = NULL;
+ mFilterObj = nullptr;
}
- mFilterClient = NULL;
+ mFilterClient = nullptr;
}
/////////////// FrontendClientCallbackImpl ///////////////////////
-
FrontendClientCallbackImpl::FrontendClientCallbackImpl(jweak tunerObj) : mObject(tunerObj) {}
void FrontendClientCallbackImpl::onEvent(FrontendEventType frontendEventType) {
- ALOGD("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType);
+ ALOGV("FrontendClientCallbackImpl::onEvent, type=%d", frontendEventType);
JNIEnv *env = AndroidRuntime::getJNIEnv();
jobject frontend(env->NewLocalRef(mObject));
if (!env->IsSameObject(frontend, nullptr)) {
@@ -912,7 +951,7 @@
void FrontendClientCallbackImpl::onScanMessage(
FrontendScanMessageType type, const FrontendScanMessage& message) {
- ALOGD("FrontendClientCallbackImpl::onScanMessage, type=%d", type);
+ ALOGV("FrontendClientCallbackImpl::onScanMessage, type=%d", type);
JNIEnv *env = AndroidRuntime::getJNIEnv();
jclass clazz = env->FindClass("android/media/tv/tuner/Tuner");
jobject frontend(env->NewLocalRef(mObject));
@@ -923,7 +962,7 @@
}
switch(type) {
case FrontendScanMessageType::LOCKED: {
- if (message.isLocked()) {
+ if (message.get<FrontendScanMessage::Tag::isLocked>()) {
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onLocked", "()V"));
@@ -931,7 +970,7 @@
break;
}
case FrontendScanMessageType::END: {
- if (message.isEnd()) {
+ if (message.get<FrontendScanMessage::Tag::isEnd>()) {
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onScanStopped", "()V"));
@@ -939,14 +978,12 @@
break;
}
case FrontendScanMessageType::PROGRESS_PERCENT: {
- env->CallVoidMethod(
- frontend,
- env->GetMethodID(clazz, "onProgress", "(I)V"),
- (jint) message.progressPercent());
+ env->CallVoidMethod(frontend, env->GetMethodID(clazz, "onProgress", "(I)V"),
+ (jint)message.get<FrontendScanMessage::Tag::progressPercent>());
break;
}
case FrontendScanMessageType::FREQUENCY: {
- std::vector<uint32_t> v = message.frequencies();
+ std::vector<int32_t> v = message.get<FrontendScanMessage::Tag::frequencies>();
jintArray freqs = env->NewIntArray(v.size());
env->SetIntArrayRegion(freqs, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -957,7 +994,7 @@
break;
}
case FrontendScanMessageType::SYMBOL_RATE: {
- std::vector<uint32_t> v = message.symbolRates();
+ std::vector<int32_t> v = message.get<FrontendScanMessage::Tag::symbolRates>();
jintArray symbolRates = env->NewIntArray(v.size());
env->SetIntArrayRegion(symbolRates, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -968,21 +1005,17 @@
break;
}
case FrontendScanMessageType::HIERARCHY: {
- env->CallVoidMethod(
- frontend,
- env->GetMethodID(clazz, "onHierarchy", "(I)V"),
- (jint) message.hierarchy());
+ env->CallVoidMethod(frontend, env->GetMethodID(clazz, "onHierarchy", "(I)V"),
+ (jint)message.get<FrontendScanMessage::Tag::hierarchy>());
break;
}
case FrontendScanMessageType::ANALOG_TYPE: {
- env->CallVoidMethod(
- frontend,
- env->GetMethodID(clazz, "onSignalType", "(I)V"),
- (jint) message.analogType());
+ env->CallVoidMethod(frontend, env->GetMethodID(clazz, "onSignalType", "(I)V"),
+ (jint)message.get<FrontendScanMessage::Tag::analogType>());
break;
}
case FrontendScanMessageType::PLP_IDS: {
- std::vector<uint8_t> v = message.plpIds();
+ std::vector<uint8_t> v = message.get<FrontendScanMessage::Tag::plpIds>();
std::vector<jint> jintV(v.begin(), v.end());
jintArray plpIds = env->NewIntArray(v.size());
env->SetIntArrayRegion(plpIds, 0, jintV.size(), &jintV[0]);
@@ -994,7 +1027,7 @@
break;
}
case FrontendScanMessageType::GROUP_IDS: {
- std::vector<uint8_t> v = message.groupIds();
+ std::vector<uint8_t> v = message.get<FrontendScanMessage::groupIds>();
std::vector<jint> jintV(v.begin(), v.end());
jintArray groupIds = env->NewIntArray(v.size());
env->SetIntArrayRegion(groupIds, 0, jintV.size(), &jintV[0]);
@@ -1006,7 +1039,7 @@
break;
}
case FrontendScanMessageType::INPUT_STREAM_IDS: {
- std::vector<uint16_t> v = message.inputStreamIds();
+ std::vector<char16_t> v = message.get<FrontendScanMessage::inputStreamIds>();
std::vector<jint> jintV(v.begin(), v.end());
jintArray streamIds = env->NewIntArray(v.size());
env->SetIntArrayRegion(streamIds, 0, jintV.size(), &jintV[0]);
@@ -1018,24 +1051,22 @@
break;
}
case FrontendScanMessageType::STANDARD: {
- FrontendScanMessage::Standard std = message.std();
+ FrontendScanMessageStandard std = message.get<FrontendScanMessage::std>();
jint standard;
- if (std.getDiscriminator() == FrontendScanMessage::Standard::hidl_discriminator::sStd) {
- standard = (jint) std.sStd();
+ if (std.getTag() == FrontendScanMessageStandard::Tag::sStd) {
+ standard = (jint)std.get<FrontendScanMessageStandard::Tag::sStd>();
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onDvbsStandard", "(I)V"),
standard);
- } else if (std.getDiscriminator() ==
- FrontendScanMessage::Standard::hidl_discriminator::tStd) {
- standard = (jint) std.tStd();
+ } else if (std.getTag() == FrontendScanMessageStandard::Tag::tStd) {
+ standard = (jint)std.get<FrontendScanMessageStandard::Tag::tStd>();
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onDvbtStandard", "(I)V"),
standard);
- } else if (std.getDiscriminator() ==
- FrontendScanMessage::Standard::hidl_discriminator::sifStd) {
- standard = (jint) std.sifStd();
+ } else if (std.getTag() == FrontendScanMessageStandard::Tag::sifStd) {
+ standard = (jint)std.get<FrontendScanMessageStandard::Tag::sifStd>();
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onAnalogSifStandard", "(I)V"),
@@ -1046,8 +1077,9 @@
case FrontendScanMessageType::ATSC3_PLP_INFO: {
jclass plpClazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3PlpInfo");
jmethodID init = env->GetMethodID(plpClazz, "<init>", "(IZ)V");
- std::vector<FrontendScanAtsc3PlpInfo> plpInfos = message.atsc3PlpInfos();
- jobjectArray array = env->NewObjectArray(plpInfos.size(), plpClazz, NULL);
+ std::vector<FrontendScanAtsc3PlpInfo> plpInfos =
+ message.get<FrontendScanMessage::atsc3PlpInfos>();
+ jobjectArray array = env->NewObjectArray(plpInfos.size(), plpClazz, nullptr);
for (int i = 0; i < plpInfos.size(); i++) {
auto info = plpInfos[i];
@@ -1064,82 +1096,67 @@
array);
break;
}
- }
-}
-
-void FrontendClientCallbackImpl::onScanMessageExt1_1(FrontendScanMessageTypeExt1_1 type,
- const FrontendScanMessageExt1_1& message) {
- ALOGD("FrontendClientCallbackImpl::onScanMessageExt1_1, type=%d", type);
- JNIEnv *env = AndroidRuntime::getJNIEnv();
- jclass clazz = env->FindClass("android/media/tv/tuner/Tuner");
- jobject frontend(env->NewLocalRef(mObject));
- if (env->IsSameObject(frontend, nullptr)) {
- ALOGE("FrontendClientCallbackImpl::onScanMessageExt1_1:"
- "Frontend object has been freed. Ignoring callback.");
- return;
- }
- switch(type) {
- case FrontendScanMessageTypeExt1_1::MODULATION: {
- jint modulation = -1;
- switch (message.modulation().getDiscriminator()) {
- case FrontendModulation::hidl_discriminator::dvbc: {
- modulation = (jint) message.modulation().dvbc();
+ case FrontendScanMessageType::MODULATION: {
+ jint modulationType = -1;
+ FrontendModulation modulation = message.get<FrontendScanMessage::modulation>();
+ switch (modulation.getTag()) {
+ case FrontendModulation::Tag::dvbc: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::dvbc>();
break;
}
- case FrontendModulation::hidl_discriminator::dvbt: {
- modulation = (jint) message.modulation().dvbt();
+ case FrontendModulation::Tag::dvbt: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::dvbt>();
break;
}
- case FrontendModulation::hidl_discriminator::dvbs: {
- modulation = (jint) message.modulation().dvbs();
+ case FrontendModulation::Tag::dvbs: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::dvbs>();
break;
}
- case FrontendModulation::hidl_discriminator::isdbs: {
- modulation = (jint) message.modulation().isdbs();
+ case FrontendModulation::Tag::isdbs: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::isdbs>();
break;
}
- case FrontendModulation::hidl_discriminator::isdbs3: {
- modulation = (jint) message.modulation().isdbs3();
+ case FrontendModulation::Tag::isdbs3: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::isdbs3>();
break;
}
- case FrontendModulation::hidl_discriminator::isdbt: {
- modulation = (jint) message.modulation().isdbt();
+ case FrontendModulation::Tag::isdbt: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::isdbt>();
break;
}
- case FrontendModulation::hidl_discriminator::atsc: {
- modulation = (jint) message.modulation().atsc();
+ case FrontendModulation::Tag::atsc: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::atsc>();
break;
}
- case FrontendModulation::hidl_discriminator::atsc3: {
- modulation = (jint) message.modulation().atsc3();
+ case FrontendModulation::Tag::atsc3: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::atsc3>();
break;
}
- case FrontendModulation::hidl_discriminator::dtmb: {
- modulation = (jint) message.modulation().dtmb();
+ case FrontendModulation::Tag::dtmb: {
+ modulationType = (jint)modulation.get<FrontendModulation::Tag::dtmb>();
break;
}
default: {
break;
}
}
- if (modulation > 0) {
- env->CallVoidMethod(
- frontend,
- env->GetMethodID(clazz, "onModulationReported", "(I)V"),
- modulation);
+ if (modulationType > 0) {
+ env->CallVoidMethod(frontend,
+ env->GetMethodID(clazz, "onModulationReported", "(I)V"),
+ modulationType);
}
break;
}
- case FrontendScanMessageTypeExt1_1::HIGH_PRIORITY: {
- bool isHighPriority = message.isHighPriority();
+ case FrontendScanMessageType::HIGH_PRIORITY: {
+ bool isHighPriority = message.get<FrontendScanMessage::Tag::isHighPriority>();
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onPriorityReported", "(Z)V"),
isHighPriority);
break;
}
- case FrontendScanMessageTypeExt1_1::DVBC_ANNEX: {
- jint dvbcAnnex = (jint) message.annex();
+ case FrontendScanMessageType::DVBC_ANNEX: {
+ jint dvbcAnnex = (jint)message.get<FrontendScanMessage::Tag::annex>();
env->CallVoidMethod(
frontend,
env->GetMethodID(clazz, "onDvbcAnnexReported", "(I)V"),
@@ -1153,59 +1170,57 @@
FrontendClientCallbackImpl::~FrontendClientCallbackImpl() {
JNIEnv *env = AndroidRuntime::getJNIEnv();
- if (mObject != NULL) {
+ if (mObject != nullptr) {
env->DeleteWeakGlobalRef(mObject);
- mObject = NULL;
+ mObject = nullptr;
}
}
/////////////// Tuner ///////////////////////
-
sp<TunerClient> JTuner::mTunerClient;
-JTuner::JTuner(JNIEnv *env, jobject thiz)
- : mClass(NULL) {
+JTuner::JTuner(JNIEnv *env, jobject thiz) : mClass(nullptr) {
jclass clazz = env->GetObjectClass(thiz);
- CHECK(clazz != NULL);
+ CHECK(clazz != nullptr);
mClass = (jclass)env->NewGlobalRef(clazz);
mObject = env->NewWeakGlobalRef(thiz);
- if (mTunerClient == NULL) {
+ if (mTunerClient == nullptr) {
mTunerClient = new TunerClient();
}
- mSharedFeId = (int) Constant::INVALID_FRONTEND_ID;
+ mSharedFeId = (int)Constant::INVALID_FRONTEND_ID;
}
JTuner::~JTuner() {
- if (mFeClient != NULL) {
+ if (mFeClient != nullptr) {
mFeClient->close();
}
- if (mDemuxClient != NULL) {
+ if (mDemuxClient != nullptr) {
mDemuxClient->close();
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
env->DeleteWeakGlobalRef(mObject);
env->DeleteGlobalRef(mClass);
- mTunerClient = NULL;
- mFeClient = NULL;
- mDemuxClient = NULL;
- mClass = NULL;
- mObject = NULL;
+ mTunerClient = nullptr;
+ mFeClient = nullptr;
+ mDemuxClient = nullptr;
+ mClass = nullptr;
+ mObject = nullptr;
}
jint JTuner::getTunerVersion() {
- ALOGD("JTuner::getTunerVersion()");
- return (jint) mTunerClient->getHalTunerVersion();
+ ALOGV("JTuner::getTunerVersion()");
+ return (jint)mTunerClient->getHalTunerVersion();
}
jobject JTuner::getFrontendIds() {
- ALOGD("JTuner::getFrontendIds()");
- vector<FrontendId> ids = mTunerClient->getFrontendIds();
+ ALOGV("JTuner::getFrontendIds()");
+ vector<int32_t> ids = mTunerClient->getFrontendIds();
if (ids.size() == 0) {
ALOGW("Frontend isn't available");
- return NULL;
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1216,9 +1231,9 @@
jclass integerClazz = env->FindClass("java/lang/Integer");
jmethodID intInit = env->GetMethodID(integerClazz, "<init>", "(I)V");
- for (int i=0; i < ids.size(); i++) {
- jobject idObj = env->NewObject(integerClazz, intInit, ids[i]);
- env->CallBooleanMethod(obj, arrayListAdd, idObj);
+ for (int i = 0; i < ids.size(); i++) {
+ jobject idObj = env->NewObject(integerClazz, intInit, ids[i]);
+ env->CallBooleanMethod(obj, arrayListAdd, idObj);
}
return obj;
}
@@ -1226,14 +1241,14 @@
jobject JTuner::openFrontendByHandle(int feHandle) {
// TODO: Handle reopening frontend with different handle
sp<FrontendClient> feClient = mTunerClient->openFrontend(feHandle);
- if (feClient == NULL) {
+ if (feClient == nullptr) {
ALOGE("Failed to open frontend");
- return NULL;
+ return nullptr;
}
mFeClient = feClient;
mFeId = mFeClient->getId();
- if (mDemuxClient != NULL) {
+ if (mDemuxClient != nullptr) {
mDemuxClient->setFrontendDataSource(mFeClient);
}
@@ -1242,7 +1257,7 @@
if (env->IsSameObject(tuner, nullptr)) {
ALOGE("openFrontendByHandle"
"Tuner object has been freed. Failed to open frontend.");
- return NULL;
+ return nullptr;
}
sp<FrontendClientCallbackImpl> feClientCb =
@@ -1257,7 +1272,7 @@
}
int JTuner::shareFrontend(int feId) {
- if (mFeClient != NULL) {
+ if (mFeClient != nullptr) {
ALOGE("Cannot share frontend:%d because this session is already holding %d",
feId, mFeClient->getId());
return (int)Result::INVALID_STATE;
@@ -1267,127 +1282,124 @@
return (int)Result::SUCCESS;
}
-jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getAnalogFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
- jint typeCap = caps.analogCaps().typeCap;
- jint sifStandardCap = caps.analogCaps().sifStandardCap;
+ jint typeCap = caps.get<FrontendCapabilities::Tag::analogCaps>().typeCap;
+ jint sifStandardCap = caps.get<FrontendCapabilities::Tag::analogCaps>().sifStandardCap;
return env->NewObject(clazz, capsInit, typeCap, sifStandardCap);
}
-jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getAtsc3FrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIII)V");
- jint bandwidthCap = caps.atsc3Caps().bandwidthCap;
- jint modulationCap = caps.atsc3Caps().modulationCap;
- jint timeInterleaveModeCap = caps.atsc3Caps().timeInterleaveModeCap;
- jint codeRateCap = caps.atsc3Caps().codeRateCap;
- jint fecCap = caps.atsc3Caps().fecCap;
- jint demodOutputFormatCap = caps.atsc3Caps().demodOutputFormatCap;
+ jint bandwidthCap = caps.get<FrontendCapabilities::Tag::atsc3Caps>().bandwidthCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::atsc3Caps>().modulationCap;
+ jint timeInterleaveModeCap =
+ caps.get<FrontendCapabilities::Tag::atsc3Caps>().timeInterleaveModeCap;
+ jint codeRateCap = caps.get<FrontendCapabilities::Tag::atsc3Caps>().codeRateCap;
+ jint fecCap = caps.get<FrontendCapabilities::Tag::atsc3Caps>().fecCap;
+ jint demodOutputFormatCap =
+ caps.get<FrontendCapabilities::Tag::atsc3Caps>().demodOutputFormatCap;
return env->NewObject(clazz, capsInit, bandwidthCap, modulationCap, timeInterleaveModeCap,
codeRateCap, fecCap, demodOutputFormatCap);
}
-jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getAtscFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(I)V");
- jint modulationCap = caps.atscCaps().modulationCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::atscCaps>().modulationCap;
return env->NewObject(clazz, capsInit, modulationCap);
}
-jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getDvbcFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IJI)V");
- jint modulationCap = caps.dvbcCaps().modulationCap;
- jlong fecCap = caps.dvbcCaps().fecCap;
- jint annexCap = caps.dvbcCaps().annexCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::dvbcCaps>().modulationCap;
+ jlong fecCap = caps.get<FrontendCapabilities::Tag::dvbcCaps>().fecCap;
+ jint annexCap = caps.get<FrontendCapabilities::Tag::dvbcCaps>().annexCap;
return env->NewObject(clazz, capsInit, modulationCap, fecCap, annexCap);
}
-jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getDvbsFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IJI)V");
- jint modulationCap = caps.dvbsCaps().modulationCap;
- jlong innerfecCap = caps.dvbsCaps().innerfecCap;
- jint standard = caps.dvbsCaps().standard;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::dvbsCaps>().modulationCap;
+ jlong innerfecCap = caps.get<FrontendCapabilities::Tag::dvbsCaps>().innerfecCap;
+ jint standard = caps.get<FrontendCapabilities::Tag::dvbsCaps>().standard;
return env->NewObject(clazz, capsInit, modulationCap, innerfecCap, standard);
}
-jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getDvbtFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIIIZZ)V");
- jint transmissionModeCap = caps.dvbtCaps().transmissionModeCap;
- jint bandwidthCap = caps.dvbtCaps().bandwidthCap;
- jint constellationCap = caps.dvbtCaps().constellationCap;
- jint coderateCap = caps.dvbtCaps().coderateCap;
- jint hierarchyCap = caps.dvbtCaps().hierarchyCap;
- jint guardIntervalCap = caps.dvbtCaps().guardIntervalCap;
- jboolean isT2Supported = caps.dvbtCaps().isT2Supported;
- jboolean isMisoSupported = caps.dvbtCaps().isMisoSupported;
+ jint transmissionModeCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().transmissionModeCap;
+ jint bandwidthCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().bandwidthCap;
+ jint constellationCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().constellationCap;
+ jint coderateCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().coderateCap;
+ jint hierarchyCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().hierarchyCap;
+ jint guardIntervalCap = caps.get<FrontendCapabilities::Tag::dvbtCaps>().guardIntervalCap;
+ jboolean isT2Supported = caps.get<FrontendCapabilities::Tag::dvbtCaps>().isT2Supported;
+ jboolean isMisoSupported = caps.get<FrontendCapabilities::Tag::dvbtCaps>().isMisoSupported;
return env->NewObject(clazz, capsInit, transmissionModeCap, bandwidthCap, constellationCap,
coderateCap, hierarchyCap, guardIntervalCap, isT2Supported, isMisoSupported);
}
-jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getIsdbs3FrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
- jint modulationCap = caps.isdbs3Caps().modulationCap;
- jint coderateCap = caps.isdbs3Caps().coderateCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::isdbs3Caps>().modulationCap;
+ jint coderateCap = caps.get<FrontendCapabilities::Tag::isdbs3Caps>().coderateCap;
return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
}
-jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getIsdbsFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(II)V");
- jint modulationCap = caps.isdbsCaps().modulationCap;
- jint coderateCap = caps.isdbsCaps().coderateCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::isdbsCaps>().modulationCap;
+ jint coderateCap = caps.get<FrontendCapabilities::Tag::isdbsCaps>().coderateCap;
return env->NewObject(clazz, capsInit, modulationCap, coderateCap);
}
-jobject JTuner::getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps) {
+jobject JTuner::getIsdbtFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIII)V");
- jint modeCap = caps.isdbtCaps().modeCap;
- jint bandwidthCap = caps.isdbtCaps().bandwidthCap;
- jint modulationCap = caps.isdbtCaps().modulationCap;
- jint coderateCap = caps.isdbtCaps().coderateCap;
- jint guardIntervalCap = caps.isdbtCaps().guardIntervalCap;
+ jint modeCap = caps.get<FrontendCapabilities::Tag::isdbtCaps>().modeCap;
+ jint bandwidthCap = caps.get<FrontendCapabilities::Tag::isdbtCaps>().bandwidthCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::isdbtCaps>().modulationCap;
+ jint coderateCap = caps.get<FrontendCapabilities::Tag::isdbtCaps>().coderateCap;
+ jint guardIntervalCap = caps.get<FrontendCapabilities::Tag::isdbtCaps>().guardIntervalCap;
return env->NewObject(clazz, capsInit, modeCap, bandwidthCap, modulationCap, coderateCap,
guardIntervalCap);
}
-jobject JTuner::getDtmbFrontendCaps(JNIEnv *env, int id) {
+jobject JTuner::getDtmbFrontendCaps(JNIEnv *env, FrontendCapabilities &caps) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DtmbFrontendCapabilities");
jmethodID capsInit = env->GetMethodID(clazz, "<init>", "(IIIIII)V");
- shared_ptr<FrontendDtmbCapabilities> dtmbCaps = mTunerClient->getFrontendDtmbCapabilities(id);
- if (dtmbCaps == NULL) {
- return NULL;
- }
-
- jint modulationCap = dtmbCaps->modulationCap;
- jint transmissionModeCap = dtmbCaps->transmissionModeCap;
- jint guardIntervalCap = dtmbCaps->guardIntervalCap;
- jint interleaveModeCap = dtmbCaps->interleaveModeCap;
- jint codeRateCap = dtmbCaps->codeRateCap;
- jint bandwidthCap = dtmbCaps->bandwidthCap;
+ jint modulationCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().modulationCap;
+ jint transmissionModeCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().transmissionModeCap;
+ jint guardIntervalCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().guardIntervalCap;
+ jint interleaveModeCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().interleaveModeCap;
+ jint codeRateCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().codeRateCap;
+ jint bandwidthCap = caps.get<FrontendCapabilities::Tag::dtmbCaps>().bandwidthCap;
return env->NewObject(clazz, capsInit, modulationCap, transmissionModeCap, guardIntervalCap,
interleaveModeCap, codeRateCap, bandwidthCap);
@@ -1396,8 +1408,8 @@
jobject JTuner::getFrontendInfo(int id) {
shared_ptr<FrontendInfo> feInfo;
feInfo = mTunerClient->getFrontendInfo(id);
- if (feInfo == NULL) {
- return NULL;
+ if (feInfo == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1416,70 +1428,60 @@
env->SetIntArrayRegion(
statusCaps, 0, feInfo->statusCaps.size(),
reinterpret_cast<jint*>(&feInfo->statusCaps[0]));
- FrontendInfo::FrontendCapabilities caps = feInfo->frontendCaps;
+ FrontendCapabilities caps = feInfo->frontendCaps;
- jobject jcaps = NULL;
-
- if (feInfo->type == static_cast<FrontendType>(
- ::android::hardware::tv::tuner::V1_1::FrontendType::DTMB)) {
- jcaps = getDtmbFrontendCaps(env, id);
- }
-
+ jobject jcaps = nullptr;
switch(feInfo->type) {
case FrontendType::ANALOG:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::analogCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::analogCaps == caps.getTag()) {
jcaps = getAnalogFrontendCaps(env, caps);
}
break;
case FrontendType::ATSC3:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::atsc3Caps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::atsc3Caps == caps.getTag()) {
jcaps = getAtsc3FrontendCaps(env, caps);
}
break;
case FrontendType::ATSC:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::atscCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::atscCaps == caps.getTag()) {
jcaps = getAtscFrontendCaps(env, caps);
}
break;
case FrontendType::DVBC:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbcCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::dvbcCaps == caps.getTag()) {
jcaps = getDvbcFrontendCaps(env, caps);
}
break;
case FrontendType::DVBS:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbsCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::dvbsCaps == caps.getTag()) {
jcaps = getDvbsFrontendCaps(env, caps);
}
break;
case FrontendType::DVBT:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::dvbtCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::dvbtCaps == caps.getTag()) {
jcaps = getDvbtFrontendCaps(env, caps);
}
break;
case FrontendType::ISDBS:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbsCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::isdbsCaps == caps.getTag()) {
jcaps = getIsdbsFrontendCaps(env, caps);
}
break;
case FrontendType::ISDBS3:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbs3Caps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::isdbs3Caps == caps.getTag()) {
jcaps = getIsdbs3FrontendCaps(env, caps);
}
break;
case FrontendType::ISDBT:
- if (FrontendInfo::FrontendCapabilities::hidl_discriminator::isdbtCaps
- == caps.getDiscriminator()) {
+ if (FrontendCapabilities::Tag::isdbtCaps == caps.getTag()) {
jcaps = getIsdbtFrontendCaps(env, caps);
}
break;
+ case FrontendType::DTMB:
+ if (FrontendCapabilities::Tag::dtmbCaps == caps.getTag()) {
+ jcaps = getDtmbFrontendCaps(env, caps);
+ }
+ break;
default:
break;
}
@@ -1490,21 +1492,21 @@
}
jobject JTuner::openLnbByHandle(int handle) {
- if (mTunerClient == NULL) {
- return NULL;
+ if (mTunerClient == nullptr) {
+ return nullptr;
}
sp<LnbClient> lnbClient;
sp<LnbClientCallbackImpl> callback = new LnbClientCallbackImpl();
lnbClient = mTunerClient->openLnb(handle);
- if (lnbClient == NULL) {
+ if (lnbClient == nullptr) {
ALOGD("Failed to open lnb, handle = %d", handle);
- return NULL;
+ return nullptr;
}
if (lnbClient->setCallback(callback) != Result::SUCCESS) {
ALOGD("Failed to set lnb callback");
- return NULL;
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1520,8 +1522,8 @@
}
jobject JTuner::openLnbByName(jstring name) {
- if (mTunerClient == NULL) {
- return NULL;
+ if (mTunerClient == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1529,14 +1531,14 @@
sp<LnbClient> lnbClient;
sp<LnbClientCallbackImpl> callback = new LnbClientCallbackImpl();
lnbClient = mTunerClient->openLnbByName(lnbName);
- if (lnbClient == NULL) {
+ if (lnbClient == nullptr) {
ALOGD("Failed to open lnb by name, name = %s", lnbName.c_str());
- return NULL;
+ return nullptr;
}
if (lnbClient->setCallback(callback) != Result::SUCCESS) {
ALOGD("Failed to set lnb callback");
- return NULL;
+ return nullptr;
}
jobject lnbObj = env->NewObject(
@@ -1550,12 +1552,12 @@
return lnbObj;
}
-int JTuner::tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1) {
+int JTuner::tune(const FrontendSettings &settings) {
if (mFeClient == nullptr) {
ALOGE("frontend is not initialized");
return (int)Result::INVALID_STATE;
}
- return (int) mFeClient->tune(settings, settingsExt1_1);
+ return (int)mFeClient->tune(settings);
}
int JTuner::stopTune() {
@@ -1566,18 +1568,17 @@
return (int) mFeClient->stopTune();
}
-int JTuner::scan(const FrontendSettings& settings, FrontendScanType scanType,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- if (mFeClient == NULL) {
+int JTuner::scan(const FrontendSettings &settings, FrontendScanType scanType) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Result::INVALID_STATE;
}
- Result result = mFeClient->scan(settings, scanType, settingsExt1_1);
+ Result result = mFeClient->scan(settings, scanType);
return (int)result;
}
int JTuner::stopScan() {
- if (mFeClient == NULL) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Result::INVALID_STATE;
}
@@ -1586,11 +1587,11 @@
}
int JTuner::setLnb(sp<LnbClient> lnbClient) {
- if (mFeClient == NULL) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Result::INVALID_STATE;
}
- if (lnbClient == NULL) {
+ if (lnbClient == nullptr) {
ALOGE("lnb is not initialized");
return (int)Result::INVALID_STATE;
}
@@ -1599,7 +1600,7 @@
}
int JTuner::setLna(bool enable) {
- if (mFeClient == NULL) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Result::INVALID_STATE;
}
@@ -1614,13 +1615,13 @@
if (mDemuxClient == nullptr) {
mDemuxClient = mTunerClient->openDemux(handle);
- if (mDemuxClient == NULL) {
+ if (mDemuxClient == nullptr) {
ALOGE("Failed to open demux");
return Result::UNKNOWN_ERROR;
}
- if (mFeClient != NULL) {
+ if (mFeClient != nullptr) {
return mDemuxClient->setFrontendDataSource(mFeClient);
- } else if (mSharedFeId != (int) Constant::INVALID_FRONTEND_ID) {
+ } else if (mSharedFeId != (int)Constant::INVALID_FRONTEND_ID) {
return mDemuxClient->setFrontendDataSourceById(mSharedFeId);
}
}
@@ -1631,28 +1632,28 @@
jint JTuner::close() {
Result res = Result::SUCCESS;
- if (mFeClient != NULL) {
+ if (mFeClient != nullptr) {
res = mFeClient->close();
if (res != Result::SUCCESS) {
- return (jint) res;
+ return (jint)res;
}
- mFeClient = NULL;
+ mFeClient = nullptr;
}
- if (mDemuxClient != NULL) {
+ if (mDemuxClient != nullptr) {
res = mDemuxClient->close();
if (res != Result::SUCCESS) {
- return (jint) res;
+ return (jint)res;
}
- mDemuxClient = NULL;
+ mDemuxClient = nullptr;
}
- mSharedFeId = (int) Constant::INVALID_FRONTEND_ID;
- return (jint) res;
+ mSharedFeId = (int)Constant::INVALID_FRONTEND_ID;
+ return (jint)res;
}
jobject JTuner::getAvSyncHwId(sp<FilterClient> filterClient) {
- if (mDemuxClient == NULL) {
- return NULL;
+ if (mDemuxClient == nullptr) {
+ return nullptr;
}
int avSyncHwId = mDemuxClient->getAvSyncHwId(filterClient);
@@ -1662,12 +1663,12 @@
jmethodID intInit = env->GetMethodID(integerClazz, "<init>", "(I)V");
return env->NewObject(integerClazz, intInit, avSyncHwId);
}
- return NULL;
+ return nullptr;
}
jobject JTuner::getAvSyncTime(jint id) {
- if (mDemuxClient == NULL) {
- return NULL;
+ if (mDemuxClient == nullptr) {
+ return nullptr;
}
long time = mDemuxClient->getAvSyncTime((int)id);
if (time >= 0) {
@@ -1676,19 +1677,18 @@
jmethodID longInit = env->GetMethodID(longClazz, "<init>", "(J)V");
return env->NewObject(longClazz, longInit, static_cast<jlong>(time));
}
- return NULL;
+ return nullptr;
}
int JTuner::connectCiCam(jint id) {
- if (mDemuxClient == NULL) {
+ if (mDemuxClient == nullptr) {
return (int)Result::NOT_INITIALIZED;
}
- Result r = mDemuxClient->connectCiCam((int)id);
- return (int) r;
+ return (int)mDemuxClient->connectCiCam((int)id);
}
int JTuner::linkCiCam(int id) {
- if (mFeClient == NULL) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Constant::INVALID_LTS_ID;
}
@@ -1696,35 +1696,30 @@
}
int JTuner::disconnectCiCam() {
- if (mDemuxClient == NULL) {
+ if (mDemuxClient == nullptr) {
return (int)Result::NOT_INITIALIZED;
}
- Result r = mDemuxClient->disconnectCiCam();
- return (int) r;
+ return (int)mDemuxClient->disconnectCiCam();
}
-
int JTuner::unlinkCiCam(int id) {
- if (mFeClient == NULL) {
+ if (mFeClient == nullptr) {
ALOGE("frontend client is not initialized");
return (int)Result::INVALID_STATE;
}
-
- Result r = mFeClient->unlinkCiCamToFrontend(id);
-
- return (int) r;
+ return (int)mFeClient->unlinkCiCamToFrontend(id);
}
jobject JTuner::openDescrambler() {
- ALOGD("JTuner::openDescrambler");
+ ALOGV("JTuner::openDescrambler");
if (mTunerClient == nullptr || mDemuxClient == nullptr) {
- return NULL;
+ return nullptr;
}
sp<DescramblerClient> descramblerClient = mTunerClient->openDescrambler(0/*unused*/);
- if (descramblerClient == NULL) {
+ if (descramblerClient == nullptr) {
ALOGD("Failed to open descrambler");
- return NULL;
+ return nullptr;
}
descramblerClient->setDemuxSource(mDemuxClient);
@@ -1742,31 +1737,28 @@
}
jobject JTuner::openFilter(DemuxFilterType type, int bufferSize) {
- if (mDemuxClient == NULL) {
- return NULL;
+ if (mDemuxClient == nullptr) {
+ return nullptr;
}
sp<FilterClient> filterClient;
sp<FilterClientCallbackImpl> callback = new FilterClientCallbackImpl();
filterClient = mDemuxClient->openFilter(type, bufferSize, callback);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to open filter, type = %d", type.mainType);
- return NULL;
+ return nullptr;
}
- uint64_t fId;
+ int64_t fId;
Result res = filterClient->getId64Bit(fId);
if (res != Result::SUCCESS) {
- uint32_t id;
+ int32_t id;
filterClient->getId(id);
- fId = static_cast<uint64_t>(id);
+ fId = static_cast<int64_t>(id);
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
- jobject filterObj =
- env->NewObject(
- env->FindClass("android/media/tv/tuner/filter/Filter"),
- gFields.filterInitID,
- (jlong) fId);
+ jobject filterObj = env->NewObject(env->FindClass("android/media/tv/tuner/filter/Filter"),
+ gFields.filterInitID, (jlong)fId);
filterClient->incStrong(filterObj);
env->SetLongField(filterObj, gFields.filterContext, (jlong)filterClient.get());
@@ -1776,8 +1768,8 @@
}
jobject JTuner::openTimeFilter() {
- if (mDemuxClient == NULL) {
- return NULL;
+ if (mDemuxClient == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1786,9 +1778,9 @@
env->FindClass("android/media/tv/tuner/filter/TimeFilter"),
gFields.timeFilterInitID);
sp<TimeFilterClient> timeFilterClient = mDemuxClient->openTimeFilter();
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed to open time filter.");
- return NULL;
+ return nullptr;
}
timeFilterClient->incStrong(timeFilterObj);
env->SetLongField(timeFilterObj, gFields.timeFilterContext, (jlong)timeFilterClient.get());
@@ -1798,15 +1790,15 @@
jobject JTuner::openDvr(DvrType type, jlong bufferSize) {
ALOGD("JTuner::openDvr");
- if (mDemuxClient == NULL) {
- return NULL;
+ if (mDemuxClient == nullptr) {
+ return nullptr;
}
sp<DvrClient> dvrClient;
sp<DvrClientCallbackImpl> callback = new DvrClientCallbackImpl();
dvrClient = mDemuxClient->openDvr(type, (int) bufferSize, callback);
- if (dvrClient == NULL) {
- return NULL;
+ if (dvrClient == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1833,14 +1825,14 @@
}
jobject JTuner::getDemuxCaps() {
- if (mTunerClient == NULL) {
- return NULL;
+ if (mTunerClient == nullptr) {
+ return nullptr;
}
shared_ptr<DemuxCapabilities> caps;
caps = mTunerClient->getDemuxCaps();
- if (caps == NULL) {
- return NULL;
+ if (caps == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
@@ -1870,25 +1862,19 @@
}
jobject JTuner::getFrontendStatus(jintArray types) {
- if (mFeClient == NULL) {
- return NULL;
+ if (mFeClient == nullptr) {
+ return nullptr;
}
JNIEnv *env = AndroidRuntime::getJNIEnv();
jsize size = env->GetArrayLength(types);
jint intTypes[size];
env->GetIntArrayRegion(types, 0, size, intTypes);
std::vector<FrontendStatusType> v;
- std::vector<FrontendStatusTypeExt1_1> v_1_1;
for (int i = 0; i < size; i++) {
- if (isV1_1ExtendedStatusType(intTypes[i])) {
- v_1_1.push_back(static_cast<FrontendStatusTypeExt1_1>(intTypes[i]));
- } else {
- v.push_back(static_cast<FrontendStatusType>(intTypes[i]));
- }
+ v.push_back(static_cast<FrontendStatusType>(intTypes[i]));
}
- hidl_vec<FrontendStatus> status = mFeClient->getStatus(v);
- hidl_vec<FrontendStatusExt1_1> status_1_1 = mFeClient->getStatusExtended_1_1(v_1_1);
+ vector<FrontendStatus> status = mFeClient->getStatus(v);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendStatus");
jmethodID init = env->GetMethodID(clazz, "<init>", "()V");
@@ -1900,96 +1886,114 @@
jmethodID initBoolean = env->GetMethodID(booleanClazz, "<init>", "(Z)V");
for (auto s : status) {
- switch(s.getDiscriminator()) {
- case FrontendStatus::hidl_discriminator::isDemodLocked: {
+ switch (s.getTag()) {
+ case FrontendStatus::Tag::isDemodLocked: {
jfieldID field = env->GetFieldID(clazz, "mIsDemodLocked", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isDemodLocked()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(
+ s.get<FrontendStatus::Tag::isDemodLocked>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatus::hidl_discriminator::snr: {
+ case FrontendStatus::Tag::snr: {
jfieldID field = env->GetFieldID(clazz, "mSnr", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.snr()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::snr>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::ber: {
+ case FrontendStatus::Tag::ber: {
jfieldID field = env->GetFieldID(clazz, "mBer", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.ber()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::ber>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::per: {
+ case FrontendStatus::Tag::per: {
jfieldID field = env->GetFieldID(clazz, "mPer", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.per()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::per>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::preBer: {
+ case FrontendStatus::Tag::preBer: {
jfieldID field = env->GetFieldID(clazz, "mPerBer", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.preBer()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::preBer>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::signalQuality: {
+ case FrontendStatus::Tag::signalQuality: {
jfieldID field = env->GetFieldID(clazz, "mSignalQuality", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.signalQuality()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(
+ s.get<FrontendStatus::Tag::signalQuality>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::signalStrength: {
+ case FrontendStatus::Tag::signalStrength: {
jfieldID field = env->GetFieldID(clazz, "mSignalStrength", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.signalStrength()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(
+ s.get<FrontendStatus::Tag::signalStrength>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::symbolRate: {
+ case FrontendStatus::Tag::symbolRate: {
jfieldID field = env->GetFieldID(clazz, "mSymbolRate", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.symbolRate()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::symbolRate>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::innerFec: {
+ case FrontendStatus::Tag::innerFec: {
jfieldID field = env->GetFieldID(clazz, "mInnerFec", "Ljava/lang/Long;");
jclass longClazz = env->FindClass("java/lang/Long");
jmethodID initLong = env->GetMethodID(longClazz, "<init>", "(J)V");
- jobject newLongObj = env->NewObject(
- longClazz, initLong, static_cast<jlong>(s.innerFec()));
+ jobject newLongObj =
+ env->NewObject(longClazz, initLong,
+ static_cast<jlong>(s.get<FrontendStatus::Tag::innerFec>()));
env->SetObjectField(statusObj, field, newLongObj);
break;
}
- case FrontendStatus::hidl_discriminator::modulation: {
+ case FrontendStatus::Tag::modulationStatus: {
jfieldID field = env->GetFieldID(clazz, "mModulation", "Ljava/lang/Integer;");
- FrontendModulationStatus modulation = s.modulation();
+ FrontendModulationStatus modulation =
+ s.get<FrontendStatus::Tag::modulationStatus>();
jint intModulation;
bool valid = true;
- switch(modulation.getDiscriminator()) {
- case FrontendModulationStatus::hidl_discriminator::dvbc: {
- intModulation = static_cast<jint>(modulation.dvbc());
+ switch (modulation.getTag()) {
+ case FrontendModulationStatus::Tag::dvbc: {
+ intModulation = static_cast<jint>(
+ modulation.get<FrontendModulationStatus::Tag::dvbc>());
break;
}
- case FrontendModulationStatus::hidl_discriminator::dvbs: {
- intModulation = static_cast<jint>(modulation.dvbs());
+ case FrontendModulationStatus::Tag::dvbs: {
+ intModulation = static_cast<jint>(
+ modulation.get<FrontendModulationStatus::Tag::dvbs>());
break;
}
- case FrontendModulationStatus::hidl_discriminator::isdbs: {
- intModulation = static_cast<jint>(modulation.isdbs());
+ case FrontendModulationStatus::Tag::isdbs: {
+ intModulation = static_cast<jint>(
+ modulation.get<FrontendModulationStatus::Tag::isdbs>());
break;
}
- case FrontendModulationStatus::hidl_discriminator::isdbs3: {
- intModulation = static_cast<jint>(modulation.isdbs3());
+ case FrontendModulationStatus::Tag::isdbs3: {
+ intModulation = static_cast<jint>(
+ modulation.get<FrontendModulationStatus::Tag::isdbs3>());
break;
}
- case FrontendModulationStatus::hidl_discriminator::isdbt: {
- intModulation = static_cast<jint>(modulation.isdbt());
+ case FrontendModulationStatus::Tag::isdbt: {
+ intModulation = static_cast<jint>(
+ modulation.get<FrontendModulationStatus::Tag::isdbt>());
break;
}
default: {
@@ -2003,51 +2007,58 @@
}
break;
}
- case FrontendStatus::hidl_discriminator::inversion: {
+ case FrontendStatus::Tag::inversion: {
jfieldID field = env->GetFieldID(clazz, "mInversion", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.inversion()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::inversion>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::lnbVoltage: {
+ case FrontendStatus::Tag::lnbVoltage: {
jfieldID field = env->GetFieldID(clazz, "mLnbVoltage", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.lnbVoltage()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::lnbVoltage>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::plpId: {
+ case FrontendStatus::Tag::plpId: {
jfieldID field = env->GetFieldID(clazz, "mPlpId", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.plpId()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::plpId>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::isEWBS: {
+ case FrontendStatus::Tag::isEWBS: {
jfieldID field = env->GetFieldID(clazz, "mIsEwbs", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isEWBS()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(s.get<FrontendStatus::Tag::isEWBS>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatus::hidl_discriminator::agc: {
+ case FrontendStatus::Tag::agc: {
jfieldID field = env->GetFieldID(clazz, "mAgc", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.agc()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::agc>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::isLnaOn: {
+ case FrontendStatus::Tag::isLnaOn: {
jfieldID field = env->GetFieldID(clazz, "mIsLnaOn", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isLnaOn()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(
+ s.get<FrontendStatus::Tag::isLnaOn>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatus::hidl_discriminator::isLayerError: {
+ case FrontendStatus::Tag::isLayerError: {
jfieldID field = env->GetFieldID(clazz, "mIsLayerErrors", "[Z");
- hidl_vec<bool> layerErr = s.isLayerError();
+ vector<bool> layerErr = s.get<FrontendStatus::Tag::isLayerError>();
jbooleanArray valObj = env->NewBooleanArray(layerErr.size());
@@ -2058,44 +2069,48 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- case FrontendStatus::hidl_discriminator::mer: {
+ case FrontendStatus::Tag::mer: {
jfieldID field = env->GetFieldID(clazz, "mMer", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.mer()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::mer>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::freqOffset: {
+ case FrontendStatus::Tag::freqOffset: {
jfieldID field = env->GetFieldID(clazz, "mFreqOffset", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.freqOffset()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::freqOffset>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::hierarchy: {
+ case FrontendStatus::Tag::hierarchy: {
jfieldID field = env->GetFieldID(clazz, "mHierarchy", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.hierarchy()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::hierarchy>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatus::hidl_discriminator::isRfLocked: {
+ case FrontendStatus::Tag::isRfLocked: {
jfieldID field = env->GetFieldID(clazz, "mIsRfLocked", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isRfLocked()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(
+ s.get<FrontendStatus::Tag::isRfLocked>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatus::hidl_discriminator::plpInfo: {
+ case FrontendStatus::Tag::plpInfo: {
jfieldID field = env->GetFieldID(clazz, "mPlpInfo",
"[Landroid/media/tv/tuner/frontend/FrontendStatus$Atsc3PlpTuningInfo;");
jclass plpClazz = env->FindClass(
"android/media/tv/tuner/frontend/FrontendStatus$Atsc3PlpTuningInfo");
jmethodID initPlp = env->GetMethodID(plpClazz, "<init>", "(IZI)V");
- hidl_vec<FrontendStatusAtsc3PlpInfo> plpInfos = s.plpInfo();
-
- jobjectArray valObj = env->NewObjectArray(plpInfos.size(), plpClazz, NULL);
+ vector<FrontendStatusAtsc3PlpInfo> plpInfos = s.get<FrontendStatus::Tag::plpInfo>();
+ jobjectArray valObj = env->NewObjectArray(plpInfos.size(), plpClazz, nullptr);
for (int i = 0; i < plpInfos.size(); i++) {
auto info = plpInfos[i];
jint plpId = (jint) info.plpId;
@@ -2109,74 +2124,75 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- default: {
- break;
- }
- }
- }
-
- for (auto s : status_1_1) {
- switch(s.getDiscriminator()) {
- case FrontendStatusExt1_1::hidl_discriminator::modulations: {
+ case FrontendStatus::Tag::modulations: {
jfieldID field = env->GetFieldID(clazz, "mModulationsExt", "[I");
- std::vector<FrontendModulation> v = s.modulations();
+ std::vector<FrontendModulation> v = s.get<FrontendStatus::Tag::modulations>();
jintArray valObj = env->NewIntArray(v.size());
bool valid = false;
jint m[1];
for (int i = 0; i < v.size(); i++) {
auto modulation = v[i];
- switch(modulation.getDiscriminator()) {
- case FrontendModulation::hidl_discriminator::dvbc: {
- m[0] = static_cast<jint>(modulation.dvbc());
+ switch (modulation.getTag()) {
+ case FrontendModulation::Tag::dvbc: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::dvbc>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::dvbs: {
- m[0] = static_cast<jint>(modulation.dvbs());
+ case FrontendModulation::Tag::dvbs: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::dvbs>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::dvbt: {
- m[0] = static_cast<jint>(modulation.dvbt());
+ case FrontendModulation::Tag::dvbt: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::dvbt>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::isdbs: {
- m[0] = static_cast<jint>(modulation.isdbs());
+ case FrontendModulation::Tag::isdbs: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::isdbs>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::isdbs3: {
- m[0] = static_cast<jint>(modulation.isdbs3());
+ case FrontendModulation::Tag::isdbs3: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::isdbs3>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::isdbt: {
- m[0] = static_cast<jint>(modulation.isdbt());
+ case FrontendModulation::Tag::isdbt: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::isdbt>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::atsc: {
- m[0] = static_cast<jint>(modulation.atsc());
+ case FrontendModulation::Tag::atsc: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::atsc>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::atsc3: {
- m[0] = static_cast<jint>(modulation.atsc3());
+ case FrontendModulation::Tag::atsc3: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::atsc3>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
}
- case FrontendModulation::hidl_discriminator::dtmb: {
- m[0] = static_cast<jint>(modulation.dtmb());
+ case FrontendModulation::Tag::dtmb: {
+ m[0] = static_cast<jint>(
+ modulation.get<FrontendModulation::Tag::dtmb>());
env->SetIntArrayRegion(valObj, i, 1, m);
valid = true;
break;
@@ -2190,9 +2206,9 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::bers: {
+ case FrontendStatus::Tag::bers: {
jfieldID field = env->GetFieldID(clazz, "mBers", "[I");
- std::vector<uint32_t> v = s.bers();
+ std::vector<int32_t> v = s.get<FrontendStatus::Tag::bers>();
jintArray valObj = env->NewIntArray(v.size());
env->SetIntArrayRegion(valObj, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -2200,10 +2216,9 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::codeRates: {
+ case FrontendStatus::Tag::codeRates: {
jfieldID field = env->GetFieldID(clazz, "mCodeRates", "[I");
- std::vector<::android::hardware::tv::tuner::V1_1::FrontendInnerFec> v
- = s.codeRates();
+ std::vector<FrontendInnerFec> v = s.get<FrontendStatus::Tag::codeRates>();
jintArray valObj = env->NewIntArray(v.size());
env->SetIntArrayRegion(valObj, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -2211,30 +2226,35 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::bandwidth: {
+ case FrontendStatus::Tag::bandwidth: {
jfieldID field = env->GetFieldID(clazz, "mBandwidth", "Ljava/lang/Integer;");
- auto bandwidth = s.bandwidth();
+ auto bandwidth = s.get<FrontendStatus::Tag::bandwidth>();
jint intBandwidth;
bool valid = true;
- switch(bandwidth.getDiscriminator()) {
- case FrontendBandwidth::hidl_discriminator::atsc3: {
- intBandwidth = static_cast<jint>(bandwidth.atsc3());
+ switch (bandwidth.getTag()) {
+ case FrontendBandwidth::Tag::atsc3: {
+ intBandwidth =
+ static_cast<jint>(bandwidth.get<FrontendBandwidth::Tag::atsc3>());
break;
}
- case FrontendBandwidth::hidl_discriminator::dvbt: {
- intBandwidth = static_cast<jint>(bandwidth.dvbt());
+ case FrontendBandwidth::Tag::dvbt: {
+ intBandwidth =
+ static_cast<jint>(bandwidth.get<FrontendBandwidth::Tag::dvbt>());
break;
}
- case FrontendBandwidth::hidl_discriminator::dvbc: {
- intBandwidth = static_cast<jint>(bandwidth.dvbc());
+ case FrontendBandwidth::Tag::dvbc: {
+ intBandwidth =
+ static_cast<jint>(bandwidth.get<FrontendBandwidth::Tag::dvbc>());
break;
}
- case FrontendBandwidth::hidl_discriminator::isdbt: {
- intBandwidth = static_cast<jint>(bandwidth.isdbt());
+ case FrontendBandwidth::Tag::isdbt: {
+ intBandwidth =
+ static_cast<jint>(bandwidth.get<FrontendBandwidth::Tag::isdbt>());
break;
}
- case FrontendBandwidth::hidl_discriminator::dtmb: {
- intBandwidth = static_cast<jint>(bandwidth.dtmb());
+ case FrontendBandwidth::Tag::dtmb: {
+ intBandwidth =
+ static_cast<jint>(bandwidth.get<FrontendBandwidth::Tag::dtmb>());
break;
}
default:
@@ -2247,22 +2267,25 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::interval: {
+ case FrontendStatus::Tag::interval: {
jfieldID field = env->GetFieldID(clazz, "mGuardInterval", "Ljava/lang/Integer;");
- auto interval = s.interval();
+ auto interval = s.get<FrontendStatus::Tag::interval>();
jint intInterval;
bool valid = true;
- switch(interval.getDiscriminator()) {
- case FrontendGuardInterval::hidl_discriminator::dvbt: {
- intInterval = static_cast<jint>(interval.dvbt());
+ switch (interval.getTag()) {
+ case FrontendGuardInterval::Tag::dvbt: {
+ intInterval =
+ static_cast<jint>(interval.get<FrontendGuardInterval::Tag::dvbt>());
break;
}
- case FrontendGuardInterval::hidl_discriminator::isdbt: {
- intInterval = static_cast<jint>(interval.isdbt());
+ case FrontendGuardInterval::Tag::isdbt: {
+ intInterval = static_cast<jint>(
+ interval.get<FrontendGuardInterval::Tag::isdbt>());
break;
}
- case FrontendGuardInterval::hidl_discriminator::dtmb: {
- intInterval = static_cast<jint>(interval.dtmb());
+ case FrontendGuardInterval::Tag::dtmb: {
+ intInterval =
+ static_cast<jint>(interval.get<FrontendGuardInterval::Tag::dtmb>());
break;
}
default:
@@ -2275,22 +2298,25 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::transmissionMode: {
+ case FrontendStatus::Tag::transmissionMode: {
jfieldID field = env->GetFieldID(clazz, "mTransmissionMode", "Ljava/lang/Integer;");
- auto transmissionMode = s.transmissionMode();
+ auto transmissionMode = s.get<FrontendStatus::Tag::transmissionMode>();
jint intTransmissionMode;
bool valid = true;
- switch(transmissionMode.getDiscriminator()) {
- case FrontendTransmissionMode::hidl_discriminator::dvbt: {
- intTransmissionMode = static_cast<jint>(transmissionMode.dvbt());
+ switch (transmissionMode.getTag()) {
+ case FrontendTransmissionMode::Tag::dvbt: {
+ intTransmissionMode = static_cast<jint>(
+ transmissionMode.get<FrontendTransmissionMode::Tag::dvbt>());
break;
}
- case FrontendTransmissionMode::hidl_discriminator::isdbt: {
- intTransmissionMode = static_cast<jint>(transmissionMode.isdbt());
+ case FrontendTransmissionMode::Tag::isdbt: {
+ intTransmissionMode = static_cast<jint>(
+ transmissionMode.get<FrontendTransmissionMode::Tag::isdbt>());
break;
}
- case FrontendTransmissionMode::hidl_discriminator::dtmb: {
- intTransmissionMode = static_cast<jint>(transmissionMode.dtmb());
+ case FrontendTransmissionMode::Tag::dtmb: {
+ intTransmissionMode = static_cast<jint>(
+ transmissionMode.get<FrontendTransmissionMode::Tag::dtmb>());
break;
}
default:
@@ -2303,44 +2329,48 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::uec: {
+ case FrontendStatus::Tag::uec: {
jfieldID field = env->GetFieldID(clazz, "mUec", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.uec()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::uec>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::systemId: {
+ case FrontendStatus::Tag::systemId: {
jfieldID field = env->GetFieldID(clazz, "mSystemId", "Ljava/lang/Integer;");
- jobject newIntegerObj = env->NewObject(
- intClazz, initInt, static_cast<jint>(s.systemId()));
+ jobject newIntegerObj =
+ env->NewObject(intClazz, initInt,
+ static_cast<jint>(s.get<FrontendStatus::Tag::systemId>()));
env->SetObjectField(statusObj, field, newIntegerObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::interleaving: {
+ case FrontendStatus::Tag::interleaving: {
jfieldID field = env->GetFieldID(clazz, "mInterleaving", "[I");
-
- std::vector<FrontendInterleaveMode> v = s.interleaving();
+ std::vector<FrontendInterleaveMode> v = s.get<FrontendStatus::Tag::interleaving>();
jintArray valObj = env->NewIntArray(v.size());
bool valid = false;
jint in[1];
for (int i = 0; i < v.size(); i++) {
auto interleaving = v[i];
- switch(interleaving.getDiscriminator()) {
- case FrontendInterleaveMode::hidl_discriminator::atsc3: {
- in[0] = static_cast<jint>(interleaving.atsc3());
+ switch (interleaving.getTag()) {
+ case FrontendInterleaveMode::Tag::atsc3: {
+ in[0] = static_cast<jint>(
+ interleaving.get<FrontendInterleaveMode::Tag::atsc3>());
env->SetIntArrayRegion(valObj, i, 1, in);
valid = true;
break;
}
- case FrontendInterleaveMode::hidl_discriminator::dvbc: {
- in[0] = static_cast<jint>(interleaving.dvbc());
+ case FrontendInterleaveMode::Tag::dvbc: {
+ in[0] = static_cast<jint>(
+ interleaving.get<FrontendInterleaveMode::Tag::dvbc>());
env->SetIntArrayRegion(valObj, i, 1, in);
valid = true;
break;
}
- case FrontendInterleaveMode::hidl_discriminator::dtmb: {
- in[0] = static_cast<jint>(interleaving.dtmb());
+ case FrontendInterleaveMode::Tag::dtmb: {
+ in[0] = static_cast<jint>(
+ interleaving.get<FrontendInterleaveMode::Tag::dtmb>());
env->SetIntArrayRegion(valObj, i, 1, in);
valid = true;
break;
@@ -2354,9 +2384,9 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::isdbtSegment: {
+ case FrontendStatus::Tag::isdbtSegment: {
jfieldID field = env->GetFieldID(clazz, "mIsdbtSegment", "[I");
- std::vector<uint8_t> v = s.isdbtSegment();
+ std::vector<uint8_t> v = s.get<FrontendStatus::Tag::isdbtSegment>();
jintArray valObj = env->NewIntArray(v.size());
env->SetIntArrayRegion(valObj, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -2364,9 +2394,9 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::tsDataRate: {
+ case FrontendStatus::Tag::tsDataRate: {
jfieldID field = env->GetFieldID(clazz, "mTsDataRate", "[I");
- std::vector<uint32_t> v = s.tsDataRate();
+ std::vector<int32_t> v = s.get<FrontendStatus::Tag::tsDataRate>();
jintArray valObj = env->NewIntArray(v.size());
env->SetIntArrayRegion(valObj, 0, v.size(), reinterpret_cast<jint*>(&v[0]));
@@ -2374,22 +2404,22 @@
env->SetObjectField(statusObj, field, valObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::rollOff: {
+ case FrontendStatus::Tag::rollOff: {
jfieldID field = env->GetFieldID(clazz, "mRollOff", "Ljava/lang/Integer;");
- auto rollOff = s.rollOff();
+ auto rollOff = s.get<FrontendStatus::Tag::rollOff>();
jint intRollOff;
bool valid = true;
- switch(rollOff.getDiscriminator()) {
- case FrontendRollOff::hidl_discriminator::dvbs: {
- intRollOff = static_cast<jint>(rollOff.dvbs());
+ switch (rollOff.getTag()) {
+ case FrontendRollOff::Tag::dvbs: {
+ intRollOff = static_cast<jint>(rollOff.get<FrontendRollOff::Tag::dvbs>());
break;
}
- case FrontendRollOff::hidl_discriminator::isdbs: {
- intRollOff = static_cast<jint>(rollOff.isdbs());
+ case FrontendRollOff::Tag::isdbs: {
+ intRollOff = static_cast<jint>(rollOff.get<FrontendRollOff::Tag::isdbs>());
break;
}
- case FrontendRollOff::hidl_discriminator::isdbs3: {
- intRollOff = static_cast<jint>(rollOff.isdbs3());
+ case FrontendRollOff::Tag::isdbs3: {
+ intRollOff = static_cast<jint>(rollOff.get<FrontendRollOff::Tag::isdbs3>());
break;
}
default:
@@ -2402,24 +2432,29 @@
}
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::isMiso: {
+ case FrontendStatus::Tag::isMiso: {
jfieldID field = env->GetFieldID(clazz, "mIsMisoEnabled", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isMiso()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(s.get<FrontendStatus::Tag::isMiso>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::isLinear: {
+ case FrontendStatus::Tag::isLinear: {
jfieldID field = env->GetFieldID(clazz, "mIsLinear", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isLinear()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(
+ s.get<FrontendStatus::Tag::isLinear>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
- case FrontendStatusExt1_1::hidl_discriminator::isShortFrames: {
+ case FrontendStatus::Tag::isShortFrames: {
jfieldID field = env->GetFieldID(clazz, "mIsShortFrames", "Ljava/lang/Boolean;");
- jobject newBooleanObj = env->NewObject(
- booleanClazz, initBoolean, static_cast<jboolean>(s.isShortFrames()));
+ jobject newBooleanObj =
+ env->NewObject(booleanClazz, initBoolean,
+ static_cast<jboolean>(
+ s.get<FrontendStatus::Tag::isShortFrames>()));
env->SetObjectField(statusObj, field, newBooleanObj);
break;
}
@@ -2431,33 +2466,28 @@
return statusObj;
}
-bool JTuner::isV1_1ExtendedStatusType(int type) {
- return (type > static_cast<int>(FrontendStatusType::ATSC3_PLP_INFO)
- && type <= static_cast<int>(FrontendStatusTypeExt1_1::IS_SHORT_FRAMES));
-}
-
jint JTuner::closeFrontend() {
Result r = Result::SUCCESS;
- if (mFeClient != NULL) {
+ if (mFeClient != nullptr) {
r = mFeClient->close();
}
if (r == Result::SUCCESS) {
- mFeClient = NULL;
+ mFeClient = nullptr;
}
- return (jint) r;
+ return (jint)r;
}
jint JTuner::closeDemux() {
Result r = Result::SUCCESS;
- if (mDemuxClient != NULL) {
+ if (mDemuxClient != nullptr) {
r = mDemuxClient->close();
}
if (r == Result::SUCCESS) {
- mDemuxClient = NULL;
+ mDemuxClient = nullptr;
}
- return (jint) r;
+ return (jint)r;
}
} // namespace android
@@ -2468,14 +2498,14 @@
static sp<JTuner> setTuner(JNIEnv *env, jobject thiz, const sp<JTuner> &tuner) {
sp<JTuner> old = (JTuner *)env->GetLongField(thiz, gFields.tunerContext);
- if (tuner != NULL) {
+ if (tuner != nullptr) {
tuner->incStrong(thiz);
}
- if (old != NULL) {
+ if (old != nullptr) {
old->decStrong(thiz);
}
- if (tuner != NULL) {
+ if (tuner != nullptr) {
env->SetLongField(thiz, gFields.tunerContext, (jlong)tuner.get());
}
@@ -2492,25 +2522,25 @@
static DemuxPid getDemuxPid(int pidType, int pid) {
DemuxPid demuxPid;
- if ((int)pidType == 1) {
- demuxPid.tPid(static_cast<DemuxTpid>(pid));
- } else if ((int)pidType == 2) {
- demuxPid.mmtpPid(static_cast<DemuxMmtpPid>(pid));
+ if (pidType == 1) {
+ demuxPid.set<DemuxPid::tPid>(pid);
+ } else if (pidType == 2) {
+ demuxPid.set<DemuxPid::mmtpPid>(pid);
}
return demuxPid;
}
-static uint32_t getFrontendSettingsFreq(JNIEnv *env, const jobject& settings) {
+static int32_t getFrontendSettingsFreq(JNIEnv *env, const jobject &settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendSettings");
jfieldID freqField = env->GetFieldID(clazz, "mFrequency", "I");
- uint32_t freq = static_cast<uint32_t>(env->GetIntField(settings, freqField));
+ int32_t freq = static_cast<int32_t>(env->GetIntField(settings, freqField));
return freq;
}
-static uint32_t getFrontendSettingsEndFreq(JNIEnv *env, const jobject& settings) {
+static int32_t getFrontendSettingsEndFreq(JNIEnv *env, const jobject &settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/FrontendSettings");
jfieldID endFreqField = env->GetFieldID(clazz, "mEndFrequency", "I");
- uint32_t endFreq = static_cast<uint32_t>(env->GetIntField(settings, endFreqField));
+ int32_t endFreq = static_cast<int32_t>(env->GetIntField(settings, endFreqField));
return endFreq;
}
@@ -2525,7 +2555,9 @@
static FrontendSettings getAnalogFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendSettings");
FrontendAnalogType analogType =
static_cast<FrontendAnalogType>(
@@ -2533,29 +2565,21 @@
FrontendAnalogSifStandard sifStandard =
static_cast<FrontendAnalogSifStandard>(
env->GetIntField(settings, env->GetFieldID(clazz, "mSifStandard", "I")));
- FrontendAnalogSettings frontendAnalogSettings {
+ FrontendAnalogAftFlag aftFlag = static_cast<FrontendAnalogAftFlag>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mAftFlag", "I")));
+ FrontendAnalogSettings frontendAnalogSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.type = analogType,
.sifStandard = sifStandard,
+ .aftFlag = aftFlag,
+ .inversion = inversion,
};
- frontendSettings.analog(frontendAnalogSettings);
+ frontendSettings.set<FrontendSettings::Tag::analog>(frontendAnalogSettings);
return frontendSettings;
}
-static void getAnalogFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
- FrontendSettingsExt1_1& settingsExt1_1) {
- jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AnalogFrontendSettings");
- FrontendAnalogAftFlag aftFlag =
- static_cast<FrontendAnalogAftFlag>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mAftFlag", "I")));
- FrontendAnalogSettingsExt1_1 analogExt1_1 {
- .aftFlag = aftFlag,
- };
- settingsExt1_1.settingExt.analog(analogExt1_1);
-}
-
-static hidl_vec<FrontendAtsc3PlpSettings> getAtsc3PlpSettings(
- JNIEnv *env, const jobject& settings) {
+static vector<FrontendAtsc3PlpSettings> getAtsc3PlpSettings(JNIEnv *env, const jobject &settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendSettings");
jobjectArray plpSettings =
reinterpret_cast<jobjectArray>(
@@ -2567,13 +2591,12 @@
int len = env->GetArrayLength(plpSettings);
jclass plpClazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3PlpSettings");
- hidl_vec<FrontendAtsc3PlpSettings> plps = hidl_vec<FrontendAtsc3PlpSettings>(len);
+ vector<FrontendAtsc3PlpSettings> plps = vector<FrontendAtsc3PlpSettings>(len);
// parse PLP settings
for (int i = 0; i < len; i++) {
jobject plp = env->GetObjectArrayElement(plpSettings, i);
- uint8_t plpId =
- static_cast<uint8_t>(
- env->GetIntField(plp, env->GetFieldID(plpClazz, "mPlpId", "I")));
+ int8_t plpId = static_cast<int8_t>(
+ env->GetIntField(plp, env->GetFieldID(plpClazz, "mPlpId", "I")));
FrontendAtsc3Modulation modulation =
static_cast<FrontendAtsc3Modulation>(
env->GetIntField(plp, env->GetFieldID(plpClazz, "mModulation", "I")));
@@ -2601,9 +2624,10 @@
static FrontendSettings getAtsc3FrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Atsc3FrontendSettings");
-
FrontendAtsc3Bandwidth bandwidth =
static_cast<FrontendAtsc3Bandwidth>(
env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
@@ -2611,35 +2635,42 @@
static_cast<FrontendAtsc3DemodOutputFormat>(
env->GetIntField(
settings, env->GetFieldID(clazz, "mDemodOutputFormat", "I")));
- hidl_vec<FrontendAtsc3PlpSettings> plps = getAtsc3PlpSettings(env, settings);
- FrontendAtsc3Settings frontendAtsc3Settings {
+ vector<FrontendAtsc3PlpSettings> plps = getAtsc3PlpSettings(env, settings);
+ FrontendAtsc3Settings frontendAtsc3Settings{
.frequency = freq,
+ .endFrequency = endFreq,
.bandwidth = bandwidth,
.demodOutputFormat = demod,
.plpSettings = plps,
+ .inversion = inversion,
};
- frontendSettings.atsc3(frontendAtsc3Settings);
+ frontendSettings.set<FrontendSettings::Tag::atsc3>(frontendAtsc3Settings);
return frontendSettings;
}
static FrontendSettings getAtscFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/AtscFrontendSettings");
FrontendAtscModulation modulation =
static_cast<FrontendAtscModulation>(
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
- FrontendAtscSettings frontendAtscSettings {
+ FrontendAtscSettings frontendAtscSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.modulation = modulation,
+ .inversion = inversion,
};
- frontendSettings.atsc(frontendAtscSettings);
+ frontendSettings.set<FrontendSettings::Tag::atsc>(frontendAtscSettings);
return frontendSettings;
}
static FrontendSettings getDvbcFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendSettings");
FrontendDvbcModulation modulation =
static_cast<FrontendDvbcModulation>(
@@ -2647,49 +2678,36 @@
FrontendInnerFec innerFec =
static_cast<FrontendInnerFec>(
env->GetLongField(settings, env->GetFieldID(clazz, "mInnerFec", "J")));
- uint32_t symbolRate =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
+ int32_t symbolRate = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
FrontendDvbcOuterFec outerFec =
static_cast<FrontendDvbcOuterFec>(
env->GetIntField(settings, env->GetFieldID(clazz, "mOuterFec", "I")));
FrontendDvbcAnnex annex =
static_cast<FrontendDvbcAnnex>(
env->GetIntField(settings, env->GetFieldID(clazz, "mAnnex", "I")));
- FrontendDvbcSpectralInversion spectralInversion =
- static_cast<FrontendDvbcSpectralInversion>(
- env->GetIntField(
- settings, env->GetFieldID(clazz, "mSpectralInversion", "I")));
- FrontendDvbcSettings frontendDvbcSettings {
+ FrontendSpectralInversion spectralInversion = static_cast<FrontendSpectralInversion>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSpectralInversion", "I")));
+ FrontendCableTimeInterleaveMode interleaveMode = static_cast<FrontendCableTimeInterleaveMode>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mInterleaveMode", "I")));
+ FrontendDvbcBandwidth bandwidth = static_cast<FrontendDvbcBandwidth>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
+ FrontendDvbcSettings frontendDvbcSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.modulation = modulation,
.fec = innerFec,
.symbolRate = symbolRate,
.outerFec = outerFec,
.annex = annex,
- .spectralInversion = spectralInversion,
+ .inversion = spectralInversion,
+ .interleaveMode = interleaveMode,
+ .bandwidth = bandwidth,
};
- frontendSettings.dvbc(frontendDvbcSettings);
+ frontendSettings.set<FrontendSettings::Tag::dvbc>(frontendDvbcSettings);
return frontendSettings;
}
-static void getDvbcFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
- FrontendSettingsExt1_1& settingsExt1_1) {
- jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbcFrontendSettings");
- FrontendCableTimeInterleaveMode interleaveMode =
- static_cast<FrontendCableTimeInterleaveMode>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mInterleaveMode", "I")));
- FrontendDvbcBandwidth bandwidth =
- static_cast<FrontendDvbcBandwidth>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mBandwidth", "I")));
-
- FrontendDvbcSettingsExt1_1 dvbcExt1_1 {
- .interleaveMode = interleaveMode,
- .bandwidth = bandwidth,
- };
- settingsExt1_1.settingExt.dvbc(dvbcExt1_1);
-}
-
static FrontendDvbsCodeRate getDvbsCodeRate(JNIEnv *env, const jobject& settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
jobject jcodeRate =
@@ -2712,11 +2730,8 @@
static_cast<bool>(
env->GetBooleanField(
jcodeRate, env->GetFieldID(codeRateClazz, "mIsShortFrames", "Z")));
- uint32_t bitsPer1000Symbol =
- static_cast<uint32_t>(
- env->GetIntField(
- jcodeRate, env->GetFieldID(
- codeRateClazz, "mBitsPer1000Symbol", "I")));
+ int32_t bitsPer1000Symbol = static_cast<int32_t>(
+ env->GetIntField(jcodeRate, env->GetFieldID(codeRateClazz, "mBitsPer1000Symbol", "I")));
FrontendDvbsCodeRate coderate {
.fec = innerFec,
.isLinear = isLinear,
@@ -2728,33 +2743,37 @@
static FrontendSettings getDvbsFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
-
FrontendDvbsModulation modulation =
static_cast<FrontendDvbsModulation>(
env->GetIntField(settings, env->GetFieldID(clazz, "mModulation", "I")));
- uint32_t symbolRate =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
+ int32_t symbolRate = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
FrontendDvbsRolloff rolloff =
static_cast<FrontendDvbsRolloff>(
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
FrontendDvbsPilot pilot =
static_cast<FrontendDvbsPilot>(
env->GetIntField(settings, env->GetFieldID(clazz, "mPilot", "I")));
- uint32_t inputStreamId =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mInputStreamId", "I")));
+ int32_t inputStreamId = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mInputStreamId", "I")));
FrontendDvbsStandard standard =
static_cast<FrontendDvbsStandard>(
env->GetIntField(settings, env->GetFieldID(clazz, "mStandard", "I")));
FrontendDvbsVcmMode vcmMode =
static_cast<FrontendDvbsVcmMode>(
env->GetIntField(settings, env->GetFieldID(clazz, "mVcmMode", "I")));
+ FrontendDvbsScanType scanType = static_cast<FrontendDvbsScanType>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mScanType", "I")));
+ bool isDiseqcRxMessage = static_cast<bool>(
+ env->GetBooleanField(settings, env->GetFieldID(clazz, "mIsDiseqcRxMessage", "Z")));
- FrontendDvbsSettings frontendDvbsSettings {
+ FrontendDvbsSettings frontendDvbsSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.modulation = modulation,
.symbolRate = symbolRate,
.rolloff = rolloff,
@@ -2762,37 +2781,26 @@
.inputStreamId = inputStreamId,
.standard = standard,
.vcmMode = vcmMode,
+ .scanType = scanType,
+ .isDiseqcRxMessage = isDiseqcRxMessage,
+ .inversion = inversion,
};
jobject jcodeRate = env->GetObjectField(settings, env->GetFieldID(clazz, "mCodeRate",
"Landroid/media/tv/tuner/frontend/DvbsCodeRate;"));
- if (jcodeRate != NULL) {
+ if (jcodeRate != nullptr) {
frontendDvbsSettings.coderate = getDvbsCodeRate(env, settings);
}
- frontendSettings.dvbs(frontendDvbsSettings);
+ frontendSettings.set<FrontendSettings::Tag::dvbs>(frontendDvbsSettings);
return frontendSettings;
}
-static void getDvbsFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
- FrontendSettingsExt1_1& settingsExt1_1) {
- jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbsFrontendSettings");
- FrontendDvbsScanType scanType =
- static_cast<FrontendDvbsScanType>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mScanType", "I")));
- bool isDiseqcRxMessage = static_cast<bool>(env->GetBooleanField(
- settings, env->GetFieldID(clazz, "mIsDiseqcRxMessage", "Z")));
-
- FrontendDvbsSettingsExt1_1 dvbsExt1_1 {
- .scanType = scanType,
- .isDiseqcRxMessage = isDiseqcRxMessage,
- };
- settingsExt1_1.settingExt.dvbs(dvbsExt1_1);
-}
-
static FrontendSettings getDvbtFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendSettings");
FrontendDvbtTransmissionMode transmissionMode =
static_cast<FrontendDvbtTransmissionMode>(
@@ -2829,15 +2837,14 @@
FrontendDvbtPlpMode plpMode =
static_cast<FrontendDvbtPlpMode>(
env->GetIntField(settings, env->GetFieldID(clazz, "mPlpMode", "I")));
- uint8_t plpId =
- static_cast<uint8_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mPlpId", "I")));
- uint8_t plpGroupId =
- static_cast<uint8_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mPlpGroupId", "I")));
+ int8_t plpId =
+ static_cast<int8_t>(env->GetIntField(settings, env->GetFieldID(clazz, "mPlpId", "I")));
+ int8_t plpGroupId = static_cast<int8_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mPlpGroupId", "I")));
- FrontendDvbtSettings frontendDvbtSettings {
+ FrontendDvbtSettings frontendDvbtSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.transmissionMode = transmissionMode,
.bandwidth = bandwidth,
.constellation = constellation,
@@ -2851,33 +2858,16 @@
.plpMode = plpMode,
.plpId = plpId,
.plpGroupId = plpGroupId,
+ .inversion = inversion,
};
- frontendSettings.dvbt(frontendDvbtSettings);
+ frontendSettings.set<FrontendSettings::Tag::dvbt>(frontendDvbtSettings);
return frontendSettings;
}
-static void getDvbtFrontendSettingsExt1_1(JNIEnv *env, const jobject& settings,
- FrontendSettingsExt1_1& settingsExt1_1) {
- jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DvbtFrontendSettings");
-
- FrontendDvbtSettingsExt1_1 dvbtExt1_1;
- int transmissionMode =
- env->GetIntField(settings, env->GetFieldID(clazz, "mTransmissionMode", "I"));
- dvbtExt1_1.transmissionMode = static_cast<
- ::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode>(
- transmissionMode);
-
- int constellation =
- env->GetIntField(settings, env->GetFieldID(clazz, "mConstellation", "I"));
- dvbtExt1_1.constellation = static_cast<
- ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation>(constellation);
-
- settingsExt1_1.settingExt.dvbt(dvbtExt1_1);
-}
-
static FrontendSettings getIsdbsFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbsFrontendSettings");
uint16_t streamId =
static_cast<uint16_t>(
@@ -2891,15 +2881,15 @@
FrontendIsdbsCoderate coderate =
static_cast<FrontendIsdbsCoderate>(
env->GetIntField(settings, env->GetFieldID(clazz, "mCodeRate", "I")));
- uint32_t symbolRate =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
+ int32_t symbolRate = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
FrontendIsdbsRolloff rolloff =
static_cast<FrontendIsdbsRolloff>(
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
- FrontendIsdbsSettings frontendIsdbsSettings {
+ FrontendIsdbsSettings frontendIsdbsSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.streamId = streamId,
.streamIdType = streamIdType,
.modulation = modulation,
@@ -2907,13 +2897,14 @@
.symbolRate = symbolRate,
.rolloff = rolloff,
};
- frontendSettings.isdbs(frontendIsdbsSettings);
+ frontendSettings.set<FrontendSettings::Tag::isdbs>(frontendIsdbsSettings);
return frontendSettings;
}
static FrontendSettings getIsdbs3FrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/Isdbs3FrontendSettings");
uint16_t streamId =
static_cast<uint16_t>(
@@ -2927,15 +2918,15 @@
FrontendIsdbs3Coderate coderate =
static_cast<FrontendIsdbs3Coderate>(
env->GetIntField(settings, env->GetFieldID(clazz, "mCodeRate", "I")));
- uint32_t symbolRate =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
+ int32_t symbolRate = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mSymbolRate", "I")));
FrontendIsdbs3Rolloff rolloff =
static_cast<FrontendIsdbs3Rolloff>(
env->GetIntField(settings, env->GetFieldID(clazz, "mRolloff", "I")));
- FrontendIsdbs3Settings frontendIsdbs3Settings {
+ FrontendIsdbs3Settings frontendIsdbs3Settings{
.frequency = freq,
+ .endFrequency = endFreq,
.streamId = streamId,
.streamIdType = streamIdType,
.modulation = modulation,
@@ -2943,13 +2934,15 @@
.symbolRate = symbolRate,
.rolloff = rolloff,
};
- frontendSettings.isdbs3(frontendIsdbs3Settings);
+ frontendSettings.set<FrontendSettings::Tag::isdbs3>(frontendIsdbs3Settings);
return frontendSettings;
}
static FrontendSettings getIsdbtFrontendSettings(JNIEnv *env, const jobject& settings) {
FrontendSettings frontendSettings;
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/IsdbtFrontendSettings");
FrontendIsdbtModulation modulation =
static_cast<FrontendIsdbtModulation>(
@@ -2966,26 +2959,29 @@
FrontendIsdbtGuardInterval guardInterval =
static_cast<FrontendIsdbtGuardInterval>(
env->GetIntField(settings, env->GetFieldID(clazz, "mGuardInterval", "I")));
- uint32_t serviceAreaId =
- static_cast<uint32_t>(
- env->GetIntField(settings, env->GetFieldID(clazz, "mServiceAreaId", "I")));
+ int32_t serviceAreaId = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mServiceAreaId", "I")));
- FrontendIsdbtSettings frontendIsdbtSettings {
+ FrontendIsdbtSettings frontendIsdbtSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.modulation = modulation,
.bandwidth = bandwidth,
.mode = mode,
.coderate = coderate,
.guardInterval = guardInterval,
.serviceAreaId = serviceAreaId,
+ .inversion = inversion,
};
- frontendSettings.isdbt(frontendIsdbtSettings);
+ frontendSettings.set<FrontendSettings::Tag::isdbt>(frontendIsdbtSettings);
return frontendSettings;
}
-static void getDtmbFrontendSettings(JNIEnv *env, const jobject& settings,
- FrontendSettingsExt1_1& settingsExt1_1) {
- uint32_t freq = getFrontendSettingsFreq(env, settings);
+static FrontendSettings getDtmbFrontendSettings(JNIEnv *env, const jobject &settings) {
+ FrontendSettings frontendSettings;
+ int32_t freq = getFrontendSettingsFreq(env, settings);
+ int32_t endFreq = getFrontendSettingsEndFreq(env, settings);
+ FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
jclass clazz = env->FindClass("android/media/tv/tuner/frontend/DtmbFrontendSettings");
FrontendDtmbModulation modulation =
static_cast<FrontendDtmbModulation>(
@@ -3006,25 +3002,23 @@
static_cast<FrontendDtmbTimeInterleaveMode>(
env->GetIntField(settings, env->GetFieldID(clazz, "mTimeInterleaveMode", "I")));
- FrontendDtmbSettings frontendDtmbSettings {
+ FrontendDtmbSettings frontendDtmbSettings{
.frequency = freq,
+ .endFrequency = endFreq,
.modulation = modulation,
.bandwidth = bandwidth,
.transmissionMode = transmissionMode,
.codeRate = codeRate,
.guardInterval = guardInterval,
.interleaveMode = interleaveMode,
+ .inversion = inversion,
};
- settingsExt1_1.settingExt.dtmb(frontendDtmbSettings);
+ frontendSettings.set<FrontendSettings::Tag::dtmb>(frontendDtmbSettings);
+ return frontendSettings;
}
static FrontendSettings getFrontendSettings(JNIEnv *env, int type, jobject settings) {
- ALOGD("getFrontendSettings %d", type);
-
- if (type == static_cast<int>(::android::hardware::tv::tuner::V1_1::FrontendType::DTMB)) {
- return FrontendSettings();
- }
-
+ ALOGV("getFrontendSettings %d", type);
FrontendType feType = static_cast<FrontendType>(type);
switch(feType) {
case FrontendType::ANALOG:
@@ -3045,6 +3039,8 @@
return getIsdbs3FrontendSettings(env, settings);
case FrontendType::ISDBT:
return getIsdbtFrontendSettings(env, settings);
+ case FrontendType::DTMB:
+ return getDtmbFrontendSettings(env, settings);
default:
// should never happen because a type is associated with a subclass of
// FrontendSettings and not set by users
@@ -3054,64 +3050,6 @@
}
}
-static FrontendSettingsExt1_1 getFrontendSettingsExt1_1(
- JNIEnv *env, int type, jobject settings, int tunerVersion) {
- ALOGD("getFrontendSettingsExt1_1 %d", type);
-
- FrontendSettingsExt1_1 settingsExt1_1 {
- .endFrequency = static_cast<uint32_t>(Constant::INVALID_FRONTEND_SETTING_FREQUENCY),
- .inversion = FrontendSpectralInversion::UNDEFINED,
- };
- settingsExt1_1.settingExt.noinit();
-
- if (tunerVersion < TUNER_VERSION_1_1) {
- return settingsExt1_1;
- }
-
- if (type == static_cast<int>(::android::hardware::tv::tuner::V1_1::FrontendType::DTMB)) {
- getDtmbFrontendSettings(env, settings, settingsExt1_1);
- } else {
- FrontendType feType = static_cast<FrontendType>(type);
- switch(feType) {
- case FrontendType::DVBS:
- getDvbsFrontendSettingsExt1_1(env, settings, settingsExt1_1);
- break;
- case FrontendType::DVBT:
- getDvbtFrontendSettingsExt1_1(env, settings, settingsExt1_1);
- break;
- case FrontendType::ANALOG:
- getAnalogFrontendSettingsExt1_1(env, settings, settingsExt1_1);
- break;
- case FrontendType::ATSC3:
- break;
- case FrontendType::ATSC:
- break;
- case FrontendType::DVBC:
- getDvbcFrontendSettingsExt1_1(env, settings, settingsExt1_1);
- break;
- case FrontendType::ISDBS:
- break;
- case FrontendType::ISDBS3:
- break;
- case FrontendType::ISDBT:
- break;
- default:
- // should never happen because a type is associated with a subclass of
- // FrontendSettings and not set by users
- jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
- "Unsupported frontend type %d", type);
- return FrontendSettingsExt1_1();
- }
- }
-
- uint32_t endFreq = getFrontendSettingsEndFreq(env, settings);
- FrontendSpectralInversion inversion = getFrontendSettingsSpectralInversion(env, settings);
- settingsExt1_1.endFrequency = endFreq;
- settingsExt1_1.inversion = inversion;
-
- return settingsExt1_1;
-}
-
static sp<FilterClient> getFilterClient(JNIEnv *env, jobject filter) {
return (FilterClient *)env->GetLongField(filter, gFields.filterContext);
}
@@ -3123,18 +3061,14 @@
static DvrSettings getDvrSettings(JNIEnv *env, jobject settings, bool isRecorder) {
DvrSettings dvrSettings;
jclass clazz = env->FindClass("android/media/tv/tuner/dvr/DvrSettings");
- uint32_t statusMask =
- static_cast<uint32_t>(env->GetIntField(
- settings, env->GetFieldID(clazz, "mStatusMask", "I")));
- uint32_t lowThreshold =
- static_cast<uint32_t>(env->GetLongField(
- settings, env->GetFieldID(clazz, "mLowThreshold", "J")));
- uint32_t highThreshold =
- static_cast<uint32_t>(env->GetLongField(
- settings, env->GetFieldID(clazz, "mHighThreshold", "J")));
- uint8_t packetSize =
- static_cast<uint8_t>(env->GetLongField(
- settings, env->GetFieldID(clazz, "mPacketSize", "J")));
+ int32_t statusMask = static_cast<int32_t>(
+ env->GetIntField(settings, env->GetFieldID(clazz, "mStatusMask", "I")));
+ int32_t lowThreshold = static_cast<int32_t>(
+ env->GetLongField(settings, env->GetFieldID(clazz, "mLowThreshold", "J")));
+ int32_t highThreshold = static_cast<int32_t>(
+ env->GetLongField(settings, env->GetFieldID(clazz, "mHighThreshold", "J")));
+ int8_t packetSize = static_cast<int8_t>(
+ env->GetLongField(settings, env->GetFieldID(clazz, "mPacketSize", "J")));
DataFormat dataFormat =
static_cast<DataFormat>(env->GetIntField(
settings, env->GetFieldID(clazz, "mDataFormat", "I")));
@@ -3146,7 +3080,7 @@
.dataFormat = dataFormat,
.packetSize = packetSize,
};
- dvrSettings.record(recordSettings);
+ dvrSettings.set<DvrSettings::Tag::record>(recordSettings);
} else {
PlaybackSettings PlaybackSettings {
.statusMask = statusMask,
@@ -3155,7 +3089,7 @@
.dataFormat = dataFormat,
.packetSize = packetSize,
};
- dvrSettings.playback(PlaybackSettings);
+ dvrSettings.set<DvrSettings::Tag::playback>(PlaybackSettings);
}
return dvrSettings;
}
@@ -3170,10 +3104,10 @@
static void android_media_tv_Tuner_native_init(JNIEnv *env) {
jclass clazz = env->FindClass("android/media/tv/tuner/Tuner");
- CHECK(clazz != NULL);
+ CHECK(clazz != nullptr);
gFields.tunerContext = env->GetFieldID(clazz, "mNativeContext", "J");
- CHECK(gFields.tunerContext != NULL);
+ CHECK(gFields.tunerContext != nullptr);
gFields.onFrontendEventID = env->GetMethodID(clazz, "onFrontendEvent", "(I)V");
@@ -3256,9 +3190,7 @@
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);
- FrontendSettingsExt1_1 settingExt = getFrontendSettingsExt1_1(
- env, type, settings, tuner->getTunerVersion());
- return tuner->tune(setting, settingExt);
+ return tuner->tune(setting);
}
static int android_media_tv_Tuner_stop_tune(JNIEnv *env, jobject thiz) {
@@ -3270,9 +3202,7 @@
JNIEnv *env, jobject thiz, jint settingsType, jobject settings, jint scanType) {
sp<JTuner> tuner = getTuner(env, thiz);
FrontendSettings setting = getFrontendSettings(env, settingsType, settings);
- FrontendSettingsExt1_1 settingExt = getFrontendSettingsExt1_1(
- env, settingsType, settings, tuner->getTunerVersion());
- return tuner->scan(setting, static_cast<FrontendScanType>(scanType), settingExt);
+ return tuner->scan(setting, static_cast<FrontendScanType>(scanType));
}
static int android_media_tv_Tuner_stop_scan(JNIEnv *env, jobject thiz) {
@@ -3283,7 +3213,7 @@
static int android_media_tv_Tuner_set_lnb(JNIEnv *env, jobject thiz, jobject lnb) {
sp<JTuner> tuner = getTuner(env, thiz);
sp<LnbClient> lnbClient = getLnbClient(env, lnb);
- if (lnbClient == NULL) {
+ if (lnbClient == nullptr) {
ALOGE("lnb is not initialized");
return (int)Result::INVALID_STATE;
}
@@ -3304,9 +3234,9 @@
static jobject android_media_tv_Tuner_get_av_sync_hw_id(
JNIEnv *env, jobject thiz, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to get sync ID. Filter client not found");
- return NULL;
+ return nullptr;
}
sp<JTuner> tuner = getTuner(env, thiz);
return tuner->getAvSyncHwId(filterClient);
@@ -3361,22 +3291,30 @@
.mainType = mainType,
};
- switch(mainType) {
+ switch (mainType) {
case DemuxFilterMainType::TS:
- filterType.subType.tsFilterType(static_cast<DemuxTsFilterType>(subType));
+ filterType.subType.set<DemuxFilterSubType::Tag::tsFilterType>(
+ static_cast<DemuxTsFilterType>(subType));
break;
case DemuxFilterMainType::MMTP:
- filterType.subType.mmtpFilterType(static_cast<DemuxMmtpFilterType>(subType));
+ filterType.subType.set<DemuxFilterSubType::Tag::mmtpFilterType>(
+ static_cast<DemuxMmtpFilterType>(subType));
break;
case DemuxFilterMainType::IP:
- filterType.subType.ipFilterType(static_cast<DemuxIpFilterType>(subType));
+ filterType.subType.set<DemuxFilterSubType::Tag::ipFilterType>(
+ static_cast<DemuxIpFilterType>(subType));
break;
case DemuxFilterMainType::TLV:
- filterType.subType.tlvFilterType(static_cast<DemuxTlvFilterType>(subType));
+ filterType.subType.set<DemuxFilterSubType::Tag::tlvFilterType>(
+ static_cast<DemuxTlvFilterType>(subType));
break;
case DemuxFilterMainType::ALP:
- filterType.subType.alpFilterType(static_cast<DemuxAlpFilterType>(subType));
+ filterType.subType.set<DemuxFilterSubType::Tag::alpFilterType>(
+ static_cast<DemuxAlpFilterType>(subType));
break;
+ default:
+ ALOGD("Demux Filter Main Type is undefined.");
+ return nullptr;
}
return tuner->openFilter(filterType, bufferSize);
@@ -3416,16 +3354,16 @@
return filterSectionBits;
}
-static DemuxFilterSectionSettings::Condition::TableInfo getFilterTableInfo(
- JNIEnv *env, const jobject& settings) {
+static DemuxFilterSectionSettingsConditionTableInfo getFilterTableInfo(JNIEnv *env,
+ const jobject &settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithTableInfo");
uint16_t tableId = static_cast<uint16_t>(
env->GetIntField(settings, env->GetFieldID(clazz, "mTableId", "I")));
uint16_t version = static_cast<uint16_t>(
env->GetIntField(settings, env->GetFieldID(clazz, "mVersion", "I")));
- DemuxFilterSectionSettings::Condition::TableInfo tableInfo {
- .tableId = tableId,
- .version = version,
+ DemuxFilterSectionSettingsConditionTableInfo tableInfo{
+ .tableId = tableId,
+ .version = version,
};
return tableInfo;
}
@@ -3447,11 +3385,13 @@
if (env->IsInstanceOf(
settings,
env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithSectionBits"))) {
- filterSectionSettings.condition.sectionBits(getFilterSectionBits(env, settings));
+ filterSectionSettings.condition.set<DemuxFilterSectionSettingsCondition::Tag::sectionBits>(
+ getFilterSectionBits(env, settings));
} else if (env->IsInstanceOf(
settings,
env->FindClass("android/media/tv/tuner/filter/SectionSettingsWithTableInfo"))) {
- filterSectionSettings.condition.tableInfo(getFilterTableInfo(env, settings));
+ filterSectionSettings.condition.set<DemuxFilterSectionSettingsCondition::Tag::tableInfo>(
+ getFilterTableInfo(env, settings));
}
return filterSectionSettings;
}
@@ -3479,13 +3419,13 @@
AudioStreamType audioStreamType = static_cast<AudioStreamType>(
env->GetIntField(settingsObj, env->GetFieldID(clazz, "mAudioStreamType", "I")));
if (audioStreamType != AudioStreamType::UNDEFINED) {
- type.audio(audioStreamType);
+ type.set<AvStreamType::Tag::audio>(audioStreamType);
return true;
}
VideoStreamType videoStreamType = static_cast<VideoStreamType>(
env->GetIntField(settingsObj, env->GetFieldID(clazz, "mVideoStreamType", "I")));
if (videoStreamType != VideoStreamType::UNDEFINED) {
- type.video(videoStreamType);
+ type.set<AvStreamType::Tag::video>(videoStreamType);
return true;
}
return false;
@@ -3506,7 +3446,7 @@
static DemuxFilterRecordSettings getFilterRecordSettings(JNIEnv *env, const jobject& settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/RecordSettings");
- hidl_bitfield<DemuxTsIndex> tsIndexMask = static_cast<hidl_bitfield<DemuxTsIndex>>(
+ int32_t tsIndexMask = static_cast<int32_t>(
env->GetIntField(settings, env->GetFieldID(clazz, "mTsIndexMask", "I")));
DemuxRecordScIndexType scIndexType = static_cast<DemuxRecordScIndexType>(
env->GetIntField(settings, env->GetFieldID(clazz, "mScIndexType", "I")));
@@ -3517,17 +3457,16 @@
.scIndexType = scIndexType,
};
if (scIndexType == DemuxRecordScIndexType::SC) {
- filterRecordSettings.scIndexMask.sc(static_cast<hidl_bitfield<DemuxScIndex>>(scIndexMask));
+ filterRecordSettings.scIndexMask.set<DemuxFilterScIndexMask::Tag::scIndex>(scIndexMask);
} else if (scIndexType == DemuxRecordScIndexType::SC_HEVC) {
- filterRecordSettings.scIndexMask.scHevc(
- static_cast<hidl_bitfield<DemuxScHevcIndex>>(scIndexMask));
+ filterRecordSettings.scIndexMask.set<DemuxFilterScIndexMask::Tag::scHevc>(scIndexMask);
}
return filterRecordSettings;
}
static DemuxFilterDownloadSettings getFilterDownloadSettings(JNIEnv *env, const jobject& settings) {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/DownloadSettings");
- uint32_t downloadId = static_cast<uint32_t>(
+ int32_t downloadId = static_cast<int32_t>(
env->GetIntField(settings, env->GetFieldID(clazz, "mDownloadId", "I")));
DemuxFilterDownloadSettings filterDownloadSettings {
@@ -3556,23 +3495,23 @@
}
if (srcSize == IP_V4_LENGTH) {
- uint8_t srcAddr[IP_V4_LENGTH];
- uint8_t dstAddr[IP_V4_LENGTH];
- env->GetByteArrayRegion(
- jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte*>(srcAddr));
- env->GetByteArrayRegion(
- jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte*>(dstAddr));
- res.srcIpAddress.v4(srcAddr);
- res.dstIpAddress.v4(dstAddr);
+ vector<uint8_t> srcAddr;
+ vector<uint8_t> dstAddr;
+ srcAddr.resize(IP_V4_LENGTH);
+ dstAddr.resize(IP_V4_LENGTH);
+ env->GetByteArrayRegion(jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte *>(&srcAddr[0]));
+ env->GetByteArrayRegion(jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte *>(&dstAddr[0]));
+ res.srcIpAddress.set<DemuxIpAddressIpAddress::Tag::v4>(srcAddr);
+ res.dstIpAddress.set<DemuxIpAddressIpAddress::Tag::v4>(dstAddr);
} else if (srcSize == IP_V6_LENGTH) {
- uint8_t srcAddr[IP_V6_LENGTH];
- uint8_t dstAddr[IP_V6_LENGTH];
- env->GetByteArrayRegion(
- jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte*>(srcAddr));
- env->GetByteArrayRegion(
- jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte*>(dstAddr));
- res.srcIpAddress.v6(srcAddr);
- res.dstIpAddress.v6(dstAddr);
+ vector<uint8_t> srcAddr;
+ vector<uint8_t> dstAddr;
+ srcAddr.resize(IP_V6_LENGTH);
+ dstAddr.resize(IP_V6_LENGTH);
+ env->GetByteArrayRegion(jsrcIpAddress, 0, srcSize, reinterpret_cast<jbyte *>(&srcAddr[0]));
+ env->GetByteArrayRegion(jdstIpAddress, 0, dstSize, reinterpret_cast<jbyte *>(&dstAddr[0]));
+ res.srcIpAddress.set<DemuxIpAddressIpAddress::Tag::v6>(srcAddr);
+ res.dstIpAddress.set<DemuxIpAddressIpAddress::Tag::v6>(dstAddr);
} else {
// should never happen. Validated on Java size.
jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
@@ -3580,10 +3519,10 @@
return res;
}
- uint16_t srcPort = static_cast<uint16_t>(
- env->GetIntField(config, env->GetFieldID(clazz, "mSrcPort", "I")));
- uint16_t dstPort = static_cast<uint16_t>(
- env->GetIntField(config, env->GetFieldID(clazz, "mDstPort", "I")));
+ int16_t srcPort =
+ static_cast<int16_t>(env->GetIntField(config, env->GetFieldID(clazz, "mSrcPort", "I")));
+ int16_t dstPort =
+ static_cast<int16_t>(env->GetIntField(config, env->GetFieldID(clazz, "mDstPort", "I")));
res.srcPort = srcPort;
res.dstPort = dstPort;
@@ -3611,30 +3550,35 @@
.tpid = tpid,
};
- if (settingsObj != NULL) {
+ if (settingsObj != nullptr) {
DemuxTsFilterType tsType = static_cast<DemuxTsFilterType>(subtype);
switch (tsType) {
case DemuxTsFilterType::SECTION:
- tsFilterSettings.filterSettings.section(
- getFilterSectionSettings(env, settingsObj));
+ tsFilterSettings.filterSettings
+ .set<DemuxTsFilterSettingsFilterSettings::Tag::section>(
+ getFilterSectionSettings(env, settingsObj));
break;
case DemuxTsFilterType::AUDIO:
case DemuxTsFilterType::VIDEO:
- tsFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
+ tsFilterSettings.filterSettings
+ .set<DemuxTsFilterSettingsFilterSettings::Tag::av>(
+ getFilterAvSettings(env, settingsObj));
break;
case DemuxTsFilterType::PES:
- tsFilterSettings.filterSettings.pesData(
- getFilterPesDataSettings(env, settingsObj));
+ tsFilterSettings.filterSettings
+ .set<DemuxTsFilterSettingsFilterSettings::Tag::pesData>(
+ getFilterPesDataSettings(env, settingsObj));
break;
case DemuxTsFilterType::RECORD:
- tsFilterSettings.filterSettings.record(
- getFilterRecordSettings(env, settingsObj));
+ tsFilterSettings.filterSettings
+ .set<DemuxTsFilterSettingsFilterSettings::Tag::record>(
+ getFilterRecordSettings(env, settingsObj));
break;
default:
break;
}
}
- filterSettings.ts(tsFilterSettings);
+ filterSettings.set<DemuxFilterSettings::Tag::ts>(tsFilterSettings);
break;
}
case DemuxFilterMainType::MMTP: {
@@ -3645,34 +3589,40 @@
.mmtpPid = mmtpPid,
};
- if (settingsObj != NULL) {
+ if (settingsObj != nullptr) {
DemuxMmtpFilterType mmtpType = static_cast<DemuxMmtpFilterType>(subtype);
switch (mmtpType) {
case DemuxMmtpFilterType::SECTION:
- mmtpFilterSettings.filterSettings.section(
- getFilterSectionSettings(env, settingsObj));
+ mmtpFilterSettings.filterSettings
+ .set<DemuxMmtpFilterSettingsFilterSettings::Tag::section>(
+ getFilterSectionSettings(env, settingsObj));
break;
case DemuxMmtpFilterType::AUDIO:
case DemuxMmtpFilterType::VIDEO:
- mmtpFilterSettings.filterSettings.av(getFilterAvSettings(env, settingsObj));
+ mmtpFilterSettings.filterSettings
+ .set<DemuxMmtpFilterSettingsFilterSettings::Tag::av>(
+ getFilterAvSettings(env, settingsObj));
break;
case DemuxMmtpFilterType::PES:
- mmtpFilterSettings.filterSettings.pesData(
- getFilterPesDataSettings(env, settingsObj));
+ mmtpFilterSettings.filterSettings
+ .set<DemuxMmtpFilterSettingsFilterSettings::Tag::pesData>(
+ getFilterPesDataSettings(env, settingsObj));
break;
case DemuxMmtpFilterType::RECORD:
- mmtpFilterSettings.filterSettings.record(
- getFilterRecordSettings(env, settingsObj));
+ mmtpFilterSettings.filterSettings
+ .set<DemuxMmtpFilterSettingsFilterSettings::Tag::record>(
+ getFilterRecordSettings(env, settingsObj));
break;
case DemuxMmtpFilterType::DOWNLOAD:
- mmtpFilterSettings.filterSettings.download(
- getFilterDownloadSettings(env, settingsObj));
+ mmtpFilterSettings.filterSettings
+ .set<DemuxMmtpFilterSettingsFilterSettings::Tag::download>(
+ getFilterDownloadSettings(env, settingsObj));
break;
default:
break;
}
}
- filterSettings.mmtp(mmtpFilterSettings);
+ filterSettings.set<DemuxFilterSettings::Tag::mmtp>(mmtpFilterSettings);
break;
}
case DemuxFilterMainType::IP: {
@@ -3682,8 +3632,9 @@
};
DemuxIpFilterType ipType = static_cast<DemuxIpFilterType>(subtype);
- if (ipType == DemuxIpFilterType::SECTION && settingsObj != NULL) {
- ipFilterSettings.filterSettings.section(
+ if (ipType == DemuxIpFilterType::SECTION && settingsObj != nullptr) {
+ ipFilterSettings.filterSettings
+ .set<DemuxIpFilterSettingsFilterSettings::Tag::section>(
getFilterSectionSettings(env, settingsObj));
} else if (ipType == DemuxIpFilterType::IP) {
jclass clazz = env->FindClass(
@@ -3692,14 +3643,15 @@
env->GetBooleanField(
filterConfigObj, env->GetFieldID(
clazz, "mPassthrough", "Z")));
- ipFilterSettings.filterSettings.bPassthrough(bPassthrough);
+ ipFilterSettings.filterSettings
+ .set<DemuxIpFilterSettingsFilterSettings::Tag::bPassthrough>(bPassthrough);
}
- filterSettings.ip(ipFilterSettings);
+ filterSettings.set<DemuxFilterSettings::Tag::ip>(ipFilterSettings);
break;
}
case DemuxFilterMainType::TLV: {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/TlvFilterConfiguration");
- uint8_t packetType = static_cast<uint8_t>(
+ int8_t packetType = static_cast<int8_t>(
env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mPacketType", "I")));
bool isCompressedIpPacket = static_cast<bool>(
env->GetBooleanField(
@@ -3711,22 +3663,24 @@
};
DemuxTlvFilterType tlvType = static_cast<DemuxTlvFilterType>(subtype);
- if (tlvType == DemuxTlvFilterType::SECTION && settingsObj != NULL) {
- tlvFilterSettings.filterSettings.section(
- getFilterSectionSettings(env, settingsObj));
+ if (tlvType == DemuxTlvFilterType::SECTION && settingsObj != nullptr) {
+ tlvFilterSettings.filterSettings
+ .set<DemuxTlvFilterSettingsFilterSettings::Tag::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);
+ tlvFilterSettings.filterSettings
+ .set<DemuxTlvFilterSettingsFilterSettings::Tag::bPassthrough>(bPassthrough);
}
- filterSettings.tlv(tlvFilterSettings);
+ filterSettings.set<DemuxFilterSettings::Tag::tlv>(tlvFilterSettings);
break;
}
case DemuxFilterMainType::ALP: {
jclass clazz = env->FindClass("android/media/tv/tuner/filter/AlpFilterConfiguration");
- uint8_t packetType = static_cast<uint8_t>(
+ int8_t packetType = static_cast<int8_t>(
env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mPacketType", "I")));
DemuxAlpLengthType lengthType = static_cast<DemuxAlpLengthType>(
env->GetIntField(filterConfigObj, env->GetFieldID(clazz, "mLengthType", "I")));
@@ -3735,18 +3689,19 @@
.lengthType = lengthType,
};
- if (settingsObj != NULL) {
+ if (settingsObj != nullptr) {
DemuxAlpFilterType alpType = static_cast<DemuxAlpFilterType>(subtype);
switch (alpType) {
case DemuxAlpFilterType::SECTION:
- alpFilterSettings.filterSettings.section(
- getFilterSectionSettings(env, settingsObj));
+ alpFilterSettings.filterSettings
+ .set<DemuxAlpFilterSettingsFilterSettings::Tag::section>(
+ getFilterSectionSettings(env, settingsObj));
break;
default:
break;
}
}
- filterSettings.alp(alpFilterSettings);
+ filterSettings.set<DemuxFilterSettings::Tag::alp>(alpFilterSettings);
break;
}
default: {
@@ -3767,34 +3722,33 @@
}
static bool isAvFilterSettings(DemuxFilterSettings filterSettings) {
- return (filterSettings.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::ts
- && filterSettings.ts().filterSettings.getDiscriminator()
- == DemuxTsFilterSettings::FilterSettings::hidl_discriminator::av)
- ||
- (filterSettings.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::mmtp
- && filterSettings.mmtp().filterSettings.getDiscriminator()
- == DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::av);
+ return (filterSettings.getTag() == DemuxFilterSettings::Tag::ts &&
+ filterSettings.get<DemuxFilterSettings::Tag::ts>().filterSettings.getTag() ==
+ DemuxTsFilterSettingsFilterSettings::Tag::av) ||
+ (filterSettings.getTag() == DemuxFilterSettings::Tag::mmtp &&
+ filterSettings.get<DemuxFilterSettings::Tag::mmtp>().filterSettings.getTag() ==
+ DemuxMmtpFilterSettingsFilterSettings::Tag::av);
}
static jint android_media_tv_Tuner_configure_filter(
JNIEnv *env, jobject filter, int type, int subtype, jobject settings) {
- ALOGD("configure filter type=%d, subtype=%d", type, subtype);
+ ALOGV("configure filter type=%d, subtype=%d", type, subtype);
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to configure filter: filter not found");
- return (jint) Result::NOT_INITIALIZED;
+ return (jint)Result::NOT_INITIALIZED;
}
DemuxFilterSettings filterSettings = getFilterConfiguration(env, type, subtype, settings);
Result res = filterClient->configure(filterSettings);
if (res != Result::SUCCESS) {
- return (jint) res;
+ return (jint)res;
}
if (static_cast<DemuxFilterMainType>(type) == DemuxFilterMainType::IP) {
res = configureIpFilterContextId(env, filterClient, settings);
if (res != Result::SUCCESS) {
- return (jint) res;
+ return (jint)res;
}
}
@@ -3802,99 +3756,98 @@
if (isAvFilterSettings(filterSettings) && getAvStreamType(env, settings, streamType)) {
res = filterClient->configureAvStreamType(streamType);
}
- return (jint) res;
+ return (jint)res;
}
static jint android_media_tv_Tuner_get_filter_id(JNIEnv* env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to get filter ID: filter client not found");
return (int) Result::NOT_INITIALIZED;
}
- uint32_t id;
+ int32_t id;
Result res = filterClient->getId(id);
if (res != Result::SUCCESS) {
- return (jint) Constant::INVALID_FILTER_ID;
+ return (jint)Constant::INVALID_FILTER_ID;
}
- return (jint) id;
+ return (jint)id;
}
static jlong android_media_tv_Tuner_get_filter_64bit_id(JNIEnv* env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to get filter ID 64 bit: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
- uint64_t id;
+ int64_t id;
Result res = filterClient->getId64Bit(id);
- return (res == Result::SUCCESS) ?
- static_cast<jlong>(id) : static_cast<jlong>(
- ::android::hardware::tv::tuner::V1_1::Constant64Bit::INVALID_FILTER_ID_64BIT);
+ return (res == Result::SUCCESS) ? static_cast<jlong>(id)
+ : static_cast<jlong>(Constant64Bit::INVALID_FILTER_ID_64BIT);
}
static jint android_media_tv_Tuner_configure_monitor_event(
JNIEnv* env, jobject filter, int monitorEventType) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to configure scrambling event: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
Result res = filterClient->configureMonitorEvent(monitorEventType);
- return (jint) res;
+ return (jint)res;
}
static jint android_media_tv_Tuner_set_filter_data_source(
JNIEnv* env, jobject filter, jobject srcFilter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to set filter data source: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
Result res;
- if (srcFilter == NULL) {
- res = filterClient->setDataSource(NULL);
+ if (srcFilter == nullptr) {
+ res = filterClient->setDataSource(nullptr);
} else {
sp<FilterClient> srcClient = getFilterClient(env, srcFilter);
- if (srcClient == NULL) {
+ if (srcClient == nullptr) {
ALOGD("Failed to set filter data source: src filter not found");
- return (jint) Result::INVALID_ARGUMENT;
+ return (jint)Result::INVALID_ARGUMENT;
}
res = filterClient->setDataSource(srcClient);
}
- return (jint) res;
+ return (jint)res;
}
static jint android_media_tv_Tuner_start_filter(JNIEnv *env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to start filter: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
- return (jint) filterClient->start();
+ return (jint)filterClient->start();
}
static jint android_media_tv_Tuner_stop_filter(JNIEnv *env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to stop filter: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
- return (jint) filterClient->stop();
+ return (jint)filterClient->stop();
}
static jint android_media_tv_Tuner_flush_filter(JNIEnv *env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
ALOGD("Failed to flush filter: filter client not found");
- return (int) Result::NOT_INITIALIZED;
+ return (int)Result::NOT_INITIALIZED;
}
- return (jint) filterClient->flush();
+ return (jint)filterClient->flush();
}
static jint android_media_tv_Tuner_read_filter_fmq(
JNIEnv *env, jobject filter, jbyteArray buffer, jlong offset, jlong size) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
jniThrowException(env, "java/lang/IllegalStateException",
"Failed to read filter FMQ: filter client not found");
return -1;
@@ -3902,25 +3855,25 @@
jboolean isCopy;
jbyte *dst = env->GetByteArrayElements(buffer, &isCopy);
- ALOGD("copyData, isCopy=%d", isCopy);
+ ALOGV("copyData, isCopy=%d", isCopy);
if (dst == nullptr) {
jniThrowRuntimeException(env, "Failed to GetByteArrayElements");
return -1;
}
int realReadSize = filterClient->read(reinterpret_cast<int8_t*>(dst) + offset, size);
env->ReleaseByteArrayElements(buffer, dst, 0);
- return (jint) realReadSize;
+ return (jint)realReadSize;
}
static jint android_media_tv_Tuner_close_filter(JNIEnv *env, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
+ if (filterClient == nullptr) {
jniThrowException(env, "java/lang/IllegalStateException",
"Failed to close filter: filter client not found");
return 0;
}
- return (jint) filterClient->close();
+ return (jint)filterClient->close();
}
static sp<TimeFilterClient> getTimeFilterClient(JNIEnv *env, jobject filter) {
@@ -3930,33 +3883,31 @@
static int android_media_tv_Tuner_time_filter_set_timestamp(
JNIEnv *env, jobject filter, jlong timestamp) {
sp<TimeFilterClient> timeFilterClient = getTimeFilterClient(env, filter);
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed set timestamp: time filter client not found");
return (int) Result::INVALID_STATE;
}
- Result r = timeFilterClient->setTimeStamp(static_cast<uint64_t>(timestamp));
- return (int) r;
+ return (int)timeFilterClient->setTimeStamp(static_cast<int64_t>(timestamp));
}
static int android_media_tv_Tuner_time_filter_clear_timestamp(JNIEnv *env, jobject filter) {
sp<TimeFilterClient> timeFilterClient = getTimeFilterClient(env, filter);
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed clear timestamp: time filter client not found");
return (int) Result::INVALID_STATE;
}
- Result r = timeFilterClient->clearTimeStamp();
- return (int) r;
+ return (int)timeFilterClient->clearTimeStamp();
}
static jobject android_media_tv_Tuner_time_filter_get_timestamp(JNIEnv *env, jobject filter) {
sp<TimeFilterClient> timeFilterClient = getTimeFilterClient(env, filter);
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed get timestamp: time filter client not found");
- return NULL;
+ return nullptr;
}
- uint64_t timestamp = timeFilterClient->getTimeStamp();
+ int64_t timestamp = timeFilterClient->getTimeStamp();
if (timestamp == (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP) {
- return NULL;
+ return nullptr;
}
jclass longClazz = env->FindClass("java/lang/Long");
@@ -3968,13 +3919,13 @@
static jobject android_media_tv_Tuner_time_filter_get_source_time(JNIEnv *env, jobject filter) {
sp<TimeFilterClient> timeFilterClient = getTimeFilterClient(env, filter);
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed get source time: time filter client not found");
- return NULL;
+ return nullptr;
}
- uint64_t timestamp = timeFilterClient->getSourceTime();
+ int64_t timestamp = timeFilterClient->getSourceTime();
if (timestamp == (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP) {
- return NULL;
+ return nullptr;
}
jclass longClazz = env->FindClass("java/lang/Long");
@@ -3986,7 +3937,7 @@
static int android_media_tv_Tuner_time_filter_close(JNIEnv *env, jobject filter) {
sp<TimeFilterClient> timeFilterClient = getTimeFilterClient(env, filter);
- if (timeFilterClient == NULL) {
+ if (timeFilterClient == nullptr) {
ALOGD("Failed close time filter: time filter client not found");
return (int) Result::INVALID_STATE;
}
@@ -3996,7 +3947,7 @@
timeFilterClient->decStrong(filter);
env->SetLongField(filter, gFields.timeFilterContext, 0);
}
- return (int) r;
+ return (int)r;
}
static jobject android_media_tv_Tuner_open_descrambler(JNIEnv *env, jobject thiz, jint) {
@@ -4007,48 +3958,48 @@
static jint android_media_tv_Tuner_descrambler_add_pid(
JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) {
sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler);
- if (descramblerClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (descramblerClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
- sp<FilterClient> filterClient = (filter == NULL) ? NULL : getFilterClient(env, filter);
+ sp<FilterClient> filterClient = (filter == nullptr) ? nullptr : getFilterClient(env, filter);
Result result = descramblerClient->addPid(getDemuxPid((int)pidType, (int)pid), filterClient);
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_descrambler_remove_pid(
JNIEnv *env, jobject descrambler, jint pidType, jint pid, jobject filter) {
sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler);
- if (descramblerClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (descramblerClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
- sp<FilterClient> filterClient = (filter == NULL) ? NULL : getFilterClient(env, filter);
+ sp<FilterClient> filterClient = (filter == nullptr) ? nullptr : getFilterClient(env, filter);
Result result = descramblerClient->removePid(getDemuxPid((int)pidType, (int)pid), filterClient);
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_descrambler_set_key_token(
JNIEnv* env, jobject descrambler, jbyteArray keyToken) {
sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler);
- if (descramblerClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (descramblerClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
int size = env->GetArrayLength(keyToken);
std::vector<uint8_t> v(size);
env->GetByteArrayRegion(keyToken, 0, size, reinterpret_cast<jbyte*>(&v[0]));
Result result = descramblerClient->setKeyToken(v);
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_close_descrambler(JNIEnv* env, jobject descrambler) {
sp<DescramblerClient> descramblerClient = getDescramblerClient(env, descrambler);
- if (descramblerClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (descramblerClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
Result r = descramblerClient->close();
if (r == Result::SUCCESS) {
descramblerClient->decStrong(descrambler);
}
- return (jint) r;
+ return (jint)r;
}
static jobject android_media_tv_Tuner_open_dvr_recorder(
@@ -4070,13 +4021,13 @@
static jint android_media_tv_Tuner_open_demux(JNIEnv* env, jobject thiz, jint handle) {
sp<JTuner> tuner = getTuner(env, thiz);
- return (jint) tuner->openDemux(handle);
+ return (jint)tuner->openDemux(handle);
}
static jint android_media_tv_Tuner_close_tuner(JNIEnv* env, jobject thiz) {
sp<JTuner> tuner = getTuner(env, thiz);
- setTuner(env, thiz, NULL);
- return (jint) tuner->close();
+ setTuner(env, thiz, nullptr);
+ return (jint)tuner->close();
}
static jint android_media_tv_Tuner_close_demux(JNIEnv* env, jobject thiz, jint /* handle */) {
@@ -4091,97 +4042,94 @@
static jint android_media_tv_Tuner_attach_filter(JNIEnv *env, jobject dvr, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
- return (jint) Result::INVALID_ARGUMENT;
+ if (filterClient == nullptr) {
+ return (jint)Result::INVALID_ARGUMENT;
}
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (dvrClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
Result result = dvrClient->attachFilter(filterClient);
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_detach_filter(JNIEnv *env, jobject dvr, jobject filter) {
sp<FilterClient> filterClient = getFilterClient(env, filter);
- if (filterClient == NULL) {
- return (jint) Result::INVALID_ARGUMENT;
+ if (filterClient == nullptr) {
+ return (jint)Result::INVALID_ARGUMENT;
}
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
- return (jint) Result::NOT_INITIALIZED;
+ if (dvrClient == nullptr) {
+ return (jint)Result::NOT_INITIALIZED;
}
Result result = dvrClient->detachFilter(filterClient);
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_configure_dvr(JNIEnv *env, jobject dvr, jobject settings) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to configure dvr: dvr client not found");
return (int)Result::NOT_INITIALIZED;
}
bool isRecorder =
env->IsInstanceOf(dvr, env->FindClass("android/media/tv/tuner/dvr/DvrRecorder"));
Result result = dvrClient->configure(getDvrSettings(env, settings, isRecorder));
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_start_dvr(JNIEnv *env, jobject dvr) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to start dvr: dvr client not found");
- return (jint) Result::NOT_INITIALIZED;
+ return (jint)Result::NOT_INITIALIZED;
}
Result result = dvrClient->start();
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_stop_dvr(JNIEnv *env, jobject dvr) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to stop dvr: dvr client not found");
- return (jint) Result::NOT_INITIALIZED;
+ return (jint)Result::NOT_INITIALIZED;
}
Result result = dvrClient->stop();
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_flush_dvr(JNIEnv *env, jobject dvr) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to flush dvr: dvr client not found");
- return (jint) Result::NOT_INITIALIZED;
+ return (jint)Result::NOT_INITIALIZED;
}
Result result = dvrClient->flush();
- return (jint) result;
+ return (jint)result;
}
static jint android_media_tv_Tuner_close_dvr(JNIEnv* env, jobject dvr) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to close dvr: dvr client not found");
- return (jint) Result::NOT_INITIALIZED;
+ return (jint)Result::NOT_INITIALIZED;
}
- return (jint) dvrClient->close();
+ return (jint)dvrClient->close();
}
static jint android_media_tv_Tuner_lnb_set_voltage(JNIEnv* env, jobject lnb, jint voltage) {
sp<LnbClient> lnbClient = getLnbClient(env, lnb);
- Result r = lnbClient->setVoltage(static_cast<LnbVoltage>(voltage));
- return (jint) r;
+ return (jint)lnbClient->setVoltage(static_cast<LnbVoltage>(voltage));
}
static int android_media_tv_Tuner_lnb_set_tone(JNIEnv* env, jobject lnb, jint tone) {
sp<LnbClient> lnbClient = getLnbClient(env, lnb);
- Result r = lnbClient->setTone(static_cast<LnbTone>(tone));
- return (jint) r;
+ return (jint)lnbClient->setTone(static_cast<LnbTone>(tone));
}
static int android_media_tv_Tuner_lnb_set_position(JNIEnv* env, jobject lnb, jint position) {
sp<LnbClient> lnbClient = getLnbClient(env, lnb);
- Result r = lnbClient->setSatellitePosition(static_cast<LnbPosition>(position));
- return (jint) r;
+ return (jint)lnbClient->setSatellitePosition(static_cast<LnbPosition>(position));
}
static int android_media_tv_Tuner_lnb_send_diseqc_msg(JNIEnv* env, jobject lnb, jbyteArray msg) {
@@ -4189,8 +4137,7 @@
int size = env->GetArrayLength(msg);
std::vector<uint8_t> v(size);
env->GetByteArrayRegion(msg, 0, size, reinterpret_cast<jbyte*>(&v[0]));
- Result r = lnbClient->sendDiseqcMessage(v);
- return (jint) r;
+ return (jint)lnbClient->sendDiseqcMessage(v);
}
static int android_media_tv_Tuner_close_lnb(JNIEnv* env, jobject lnb) {
@@ -4200,34 +4147,34 @@
lnbClient->decStrong(lnb);
env->SetLongField(lnb, gFields.lnbContext, 0);
}
- return (jint) r;
+ return (jint)r;
}
static void android_media_tv_Tuner_dvr_set_fd(JNIEnv *env, jobject dvr, jint fd) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGD("Failed to set FD for dvr: dvr client not found");
return;
}
dvrClient->setFd((int)fd);
- ALOGD("set fd = %d", fd);
+ ALOGV("set fd = %d", fd);
}
static jlong android_media_tv_Tuner_read_dvr(JNIEnv *env, jobject dvr, jlong size) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
jniThrowException(env, "java/lang/IllegalStateException",
"Failed to read dvr: dvr client not found");
return -1;
}
- return (jlong) dvrClient->readFromFile(size);
+ return (jlong)dvrClient->readFromFile(size);
}
static jlong android_media_tv_Tuner_read_dvr_from_array(
JNIEnv* env, jobject dvr, jbyteArray buffer, jlong offset, jlong size) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGW("Failed to read dvr: dvr client not found");
return -1;
}
@@ -4240,32 +4187,31 @@
}
long realSize = dvrClient->readFromBuffer(reinterpret_cast<signed char*>(src) + offset, size);
env->ReleaseByteArrayElements(buffer, src, 0);
- return (jlong) realSize;
-
+ return (jlong)realSize;
}
static jlong android_media_tv_Tuner_write_dvr(JNIEnv *env, jobject dvr, jlong size) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
jniThrowException(env, "java/lang/IllegalStateException",
"Failed to write dvr: dvr client not found");
return -1;
}
- return (jlong) dvrClient->writeToFile(size);
+ return (jlong)dvrClient->writeToFile(size);
}
static jlong android_media_tv_Tuner_write_dvr_to_array(
JNIEnv *env, jobject dvr, jbyteArray buffer, jlong offset, jlong size) {
sp<DvrClient> dvrClient = getDvrClient(env, dvr);
- if (dvrClient == NULL) {
+ if (dvrClient == nullptr) {
ALOGW("Failed to read dvr: dvr client not found");
return -1;
}
jboolean isCopy;
jbyte *dst = env->GetByteArrayElements(buffer, &isCopy);
- ALOGD("copyData, isCopy=%d", isCopy);
+ ALOGV("copyData, isCopy=%d", isCopy);
if (dst == nullptr) {
jniThrowRuntimeException(env, "Failed to GetByteArrayElements");
return -1;
@@ -4273,7 +4219,7 @@
long realSize = dvrClient->writeToBuffer(reinterpret_cast<signed char*>(dst) + offset, size);
env->ReleaseByteArrayElements(buffer, dst, 0);
- return (jlong) realSize;
+ return (jlong)realSize;
}
static sp<MediaEvent> getMediaEventSp(JNIEnv *env, jobject mediaEventObj) {
@@ -4283,9 +4229,9 @@
static jobject android_media_tv_Tuner_media_event_get_linear_block(
JNIEnv* env, jobject mediaEventObj) {
sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj);
- if (mediaEventSp == NULL) {
+ if (mediaEventSp == nullptr) {
ALOGD("Failed get MediaEvent");
- return NULL;
+ return nullptr;
}
android::Mutex::Autolock autoLock(mediaEventSp->mLock);
@@ -4295,9 +4241,9 @@
static jobject android_media_tv_Tuner_media_event_get_audio_handle(
JNIEnv* env, jobject mediaEventObj) {
sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj);
- if (mediaEventSp == NULL) {
+ if (mediaEventSp == nullptr) {
ALOGD("Failed get MediaEvent");
- return NULL;
+ return nullptr;
}
android::Mutex::Autolock autoLock(mediaEventSp->mLock);
@@ -4311,7 +4257,7 @@
static void android_media_tv_Tuner_media_event_finalize(JNIEnv* env, jobject mediaEventObj) {
sp<MediaEvent> mediaEventSp = getMediaEventSp(env, mediaEventObj);
- if (mediaEventSp == NULL) {
+ if (mediaEventSp == nullptr) {
ALOGD("Failed get MediaEvent");
return;
}
@@ -4520,19 +4466,18 @@
return true;
}
-jint JNI_OnLoad(JavaVM* vm, void* /* reserved */)
-{
- JNIEnv* env = NULL;
+jint JNI_OnLoad(JavaVM *vm, void * /* reserved */) {
+ JNIEnv *env = nullptr;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- ALOGE("ERROR: GetEnv failed\n");
+ ALOGE("ERROR: GetEnv failed");
return result;
}
- assert(env != NULL);
+ assert(env != nullptr);
if (!register_android_media_tv_Tuner(env)) {
- ALOGE("ERROR: Tuner native registration failed\n");
+ ALOGE("ERROR: Tuner native registration failed");
return result;
}
return JNI_VERSION_1_4;
diff --git a/media/jni/android_media_tv_Tuner.h b/media/jni/android_media_tv_Tuner.h
index 5d3b0a3..02c347f 100644
--- a/media/jni/android_media_tv_Tuner.h
+++ b/media/jni/android_media_tv_Tuner.h
@@ -17,18 +17,35 @@
#ifndef _ANDROID_MEDIA_TV_TUNER_H_
#define _ANDROID_MEDIA_TV_TUNER_H_
-#include <android/hardware/tv/tuner/1.1/types.h>
-
#include <C2BlockInternal.h>
#include <C2HandleIonInternal.h>
#include <C2ParamDef.h>
-#include <fmq/MessageQueue.h>
-#include <fstream>
-#include <string>
-#include <unordered_map>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterMonitorEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterStatus.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxPid.h>
+#include <aidl/android/hardware/tv/tuner/DvrType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendCapabilities.h>
+#include <aidl/android/hardware/tv/tuner/FrontendEventType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendInfo.h>
+#include <aidl/android/hardware/tv/tuner/FrontendScanMessage.h>
+#include <aidl/android/hardware/tv/tuner/FrontendScanMessageType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendScanType.h>
+#include <aidl/android/hardware/tv/tuner/FrontendSettings.h>
+#include <aidl/android/hardware/tv/tuner/LnbEventType.h>
+#include <aidl/android/hardware/tv/tuner/PlaybackStatus.h>
+#include <aidl/android/hardware/tv/tuner/RecordStatus.h>
+#include <aidl/android/hardware/tv/tuner/Result.h>
+#include <fmq/AidlMessageQueue.h>
#include <utils/Mutex.h>
#include <utils/RefBase.h>
+#include <fstream>
+#include <string>
+#include <unordered_map>
+
+#include "jni.h"
#include "tuner/DemuxClient.h"
#include "tuner/DescramblerClient.h"
#include "tuner/FilterClient.h"
@@ -39,48 +56,36 @@
#include "tuner/LnbClientCallback.h"
#include "tuner/TimeFilterClient.h"
#include "tuner/TunerClient.h"
-#include "jni.h"
+using ::aidl::android::hardware::common::fmq::MQDescriptor;
+using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMonitorEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterStatus;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxPid;
+using ::aidl::android::hardware::tv::tuner::DvrType;
+using ::aidl::android::hardware::tv::tuner::FrontendCapabilities;
+using ::aidl::android::hardware::tv::tuner::FrontendEventType;
+using ::aidl::android::hardware::tv::tuner::FrontendInfo;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessage;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessageType;
+using ::aidl::android::hardware::tv::tuner::FrontendScanType;
+using ::aidl::android::hardware::tv::tuner::FrontendSettings;
+using ::aidl::android::hardware::tv::tuner::LnbEventType;
+using ::aidl::android::hardware::tv::tuner::PlaybackStatus;
+using ::aidl::android::hardware::tv::tuner::RecordStatus;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::android::hardware::EventFlag;
-using ::android::hardware::MQDescriptorSync;
-using ::android::hardware::MessageQueue;
-using ::android::hardware::Return;
-using ::android::hardware::hidl_handle;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::kSynchronizedReadWrite;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterStatus;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxPid;
-using ::android::hardware::tv::tuner::V1_0::DvrType;
-using ::android::hardware::tv::tuner::V1_0::FrontendEventType;
-using ::android::hardware::tv::tuner::V1_0::FrontendId;
-using ::android::hardware::tv::tuner::V1_0::FrontendInfo;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanType;
-using ::android::hardware::tv::tuner::V1_0::FrontendSettings;
-using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_0::LnbEventType;
-using ::android::hardware::tv::tuner::V1_0::LnbId;
-using ::android::hardware::tv::tuner::V1_0::PlaybackStatus;
-using ::android::hardware::tv::tuner::V1_0::RecordStatus;
-using ::android::hardware::tv::tuner::V1_0::Result;
-using ::android::hardware::tv::tuner::V1_1::DemuxFilterEventExt;
-using ::android::hardware::tv::tuner::V1_1::DemuxFilterMonitorEvent;
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1;
-using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>;
-
-const static int TUNER_VERSION_1_1 = ((1 << 16) | 1);
+using MQ = MQDescriptor<int8_t, SynchronizedReadWrite>;
namespace android {
struct LnbClientCallbackImpl : public LnbClientCallback {
~LnbClientCallbackImpl();
virtual void onEvent(LnbEventType lnbEventType);
- virtual void onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage);
+ virtual void onDiseqcMessage(const vector<uint8_t>& diseqcMessage);
void setLnb(jweak lnbObj);
private:
@@ -98,8 +103,8 @@
};
struct MediaEvent : public RefBase {
- MediaEvent(sp<FilterClient> filterClient, hidl_handle avHandle, uint64_t dataId,
- uint64_t dataSize, jobject obj);
+ MediaEvent(sp<FilterClient> filterClient, native_handle_t* avHandle, uint64_t dataId,
+ uint64_t dataSize, jobject obj);
~MediaEvent();
jobject getLinearBlock();
uint64_t getAudioHandle();
@@ -121,39 +126,24 @@
struct FilterClientCallbackImpl : public FilterClientCallback {
~FilterClientCallbackImpl();
- virtual void onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
- const DemuxFilterEventExt& filterEventExt);
- virtual void onFilterEvent(const DemuxFilterEvent& filterEvent);
+ virtual void onFilterEvent(const vector<DemuxFilterEvent>& events);
virtual void onFilterStatus(const DemuxFilterStatus status);
void setFilter(jweak filterObj, sp<FilterClient> filterClient);
private:
jweak mFilterObj;
sp<FilterClient> mFilterClient;
- jobjectArray getSectionEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getMediaEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getPesEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getTsRecordEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>&events,
- const std::vector<DemuxFilterEventExt::Event>& eventsExt);
- jobjectArray getMmtpRecordEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>&events,
- const std::vector<DemuxFilterEventExt::Event>& eventsExt);
- jobjectArray getDownloadEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getIpPayloadEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getTemiEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEvent::Event>& events);
- jobjectArray getScramblingStatusEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt);
- jobjectArray getIpCidChangeEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt);
- jobjectArray getRestartEvent(
- jobjectArray& arr, const std::vector<DemuxFilterEventExt::Event>& eventsExt);
+ void getSectionEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getMediaEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getPesEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getTsRecordEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getMmtpRecordEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getDownloadEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getIpPayloadEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getTemiEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getScramblingStatusEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getIpCidChangeEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
+ void getRestartEvent(jobjectArray& arr, const int size, const DemuxFilterEvent& event);
};
struct FrontendClientCallbackImpl : public FrontendClientCallback {
@@ -162,8 +152,6 @@
virtual void onEvent(FrontendEventType frontendEventType);
virtual void onScanMessage(
FrontendScanMessageType type, const FrontendScanMessage& message);
- virtual void onScanMessageExt1_1(
- FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt);
jweak mObject;
};
@@ -182,10 +170,9 @@
int shareFrontend(int feId);
jint closeFrontendById(int id);
jobject getFrontendInfo(int id);
- int tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
+ int tune(const FrontendSettings& settings);
int stopTune();
- int scan(const FrontendSettings& settings, FrontendScanType scanType,
- const FrontendSettingsExt1_1& settingsExt1_1);
+ int scan(const FrontendSettings& settings, FrontendScanType scanType);
int stopScan();
int setLnb(sp<LnbClient> lnbClient);
int setLna(bool enable);
@@ -214,18 +201,16 @@
int mSharedFeId;
sp<LnbClient> mLnbClient;
sp<DemuxClient> mDemuxClient;
- static jobject getAnalogFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getAtsc3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getAtscFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getDvbcFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getDvbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getDvbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getIsdbs3FrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getIsdbsFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getIsdbtFrontendCaps(JNIEnv *env, FrontendInfo::FrontendCapabilities& caps);
- static jobject getDtmbFrontendCaps(JNIEnv *env, int id);
-
- bool isV1_1ExtendedStatusType(jint type);
+ static jobject getAnalogFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getAtsc3FrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getAtscFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getDvbcFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getDvbsFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getDvbtFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getIsdbs3FrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getIsdbsFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getIsdbtFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
+ static jobject getDtmbFrontendCaps(JNIEnv* env, FrontendCapabilities& caps);
};
class C2DataIdInfo : public C2Param {
diff --git a/media/jni/tuner/ClientHelper.h b/media/jni/tuner/ClientHelper.h
index 508dccf..d7a847a 100644
--- a/media/jni/tuner/ClientHelper.h
+++ b/media/jni/tuner/ClientHelper.h
@@ -17,22 +17,18 @@
#ifndef _ANDROID_MEDIA_TV_CLIENT_HELPER_H_
#define _ANDROID_MEDIA_TV_CLIENT_HELPER_H_
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <android/binder_parcel_utils.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
#include <utils/Log.h>
+using ::aidl::android::hardware::tv::tuner::Result;
using Status = ::ndk::ScopedAStatus;
-using ::android::hardware::tv::tuner::V1_0::Result;
-
-using namespace std;
-
namespace android {
-struct ClientHelper {
-
+class ClientHelper {
public:
- static Result getServiceSpecificErrorCode(Status& s) {
+ static Result getServiceSpecificErrorCode(Status& s) {
if (s.getExceptionCode() == EX_SERVICE_SPECIFIC) {
return static_cast<Result>(s.getServiceSpecificError());
} else if (s.isOk()) {
@@ -42,6 +38,7 @@
return Result::UNKNOWN_ERROR;
}
};
+
} // namespace android
-#endif // _ANDROID_MEDIA_TV_CLIENT_HELPER_H_
\ No newline at end of file
+#endif // _ANDROID_MEDIA_TV_CLIENT_HELPER_H_
diff --git a/media/jni/tuner/DemuxClient.cpp b/media/jni/tuner/DemuxClient.cpp
index 6c4295b..4ee3f48 100644
--- a/media/jni/tuner/DemuxClient.cpp
+++ b/media/jni/tuner/DemuxClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,52 +16,41 @@
#define LOG_TAG "DemuxClient"
+#include "DemuxClient.h"
+
+#include <aidl/android/hardware/tv/tuner/Constant.h>
+#include <aidl/android/hardware/tv/tuner/Constant64Bit.h>
#include <android-base/logging.h>
#include <utils/Log.h>
-#include "DemuxClient.h"
-
-using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
-
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
-using ::android::hardware::tv::tuner::V1_0::Result;
+using ::aidl::android::hardware::tv::tuner::Constant;
+using ::aidl::android::hardware::tv::tuner::Constant64Bit;
namespace android {
-
/////////////// DemuxClient ///////////////////////
-
DemuxClient::DemuxClient(shared_ptr<ITunerDemux> tunerDemux) {
mTunerDemux = tunerDemux;
- mId = -1;
}
DemuxClient::~DemuxClient() {
- mTunerDemux = NULL;
- mDemux = NULL;
- mId = -1;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-void DemuxClient::setHidlDemux(sp<IDemux> demux) {
- mDemux = demux;
+ mTunerDemux = nullptr;
}
Result DemuxClient::setFrontendDataSource(sp<FrontendClient> frontendClient) {
- if (mTunerDemux != NULL) {
- Status s = mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
- return ClientHelper::getServiceSpecificErrorCode(s);
+ if (frontendClient == nullptr) {
+ return Result::INVALID_ARGUMENT;
}
- if (mDemux != NULL) {
- Result res = mDemux->setFrontendDataSource(frontendClient->getId());
- return res;
+ if (mTunerDemux != nullptr) {
+ Status s = mTunerDemux->setFrontendDataSource(frontendClient->getAidlFrontend());
+ return ClientHelper::getServiceSpecificErrorCode(s);
}
return Result::INVALID_STATE;
}
Result DemuxClient::setFrontendDataSourceById(int frontendId) {
- if (mTunerDemux != NULL) {
+ if (mTunerDemux != nullptr) {
Status s = mTunerDemux->setFrontendDataSourceById(frontendId);
return ClientHelper::getServiceSpecificErrorCode(s);
}
@@ -69,251 +58,114 @@
return Result::INVALID_STATE;
}
-sp<FilterClient> DemuxClient::openFilter(DemuxFilterType type, int bufferSize,
- sp<FilterClientCallback> cb) {
- if (mTunerDemux != NULL) {
+sp<FilterClient> DemuxClient::openFilter(const DemuxFilterType& type, int32_t bufferSize,
+ sp<FilterClientCallback> cb) {
+ if (cb == nullptr) {
+ return nullptr;
+ }
+
+ if (mTunerDemux != nullptr) {
shared_ptr<ITunerFilter> tunerFilter;
shared_ptr<TunerFilterCallback> callback =
::ndk::SharedRefBase::make<TunerFilterCallback>(cb);
- Status s = mTunerDemux->openFilter((int)type.mainType, getSubType(type),
- bufferSize, callback, &tunerFilter);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ Status s = mTunerDemux->openFilter(type, bufferSize, callback, &tunerFilter);
+ if (!s.isOk()) {
+ return nullptr;
}
return new FilterClient(type, tunerFilter);
}
- if (mDemux != NULL) {
- sp<HidlFilterCallback> callback = new HidlFilterCallback(cb);
- sp<IFilter> hidlFilter = openHidlFilter(type, bufferSize, callback);
- if (hidlFilter != NULL) {
- sp<FilterClient> filterClient = new FilterClient(type, NULL);
- filterClient->setHidlFilter(hidlFilter);
- return filterClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
sp<TimeFilterClient> DemuxClient::openTimeFilter() {
- if (mTunerDemux != NULL) {
+ if (mTunerDemux != nullptr) {
shared_ptr<ITunerTimeFilter> tunerTimeFilter;
Status s = mTunerDemux->openTimeFilter(&tunerTimeFilter);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
return new TimeFilterClient(tunerTimeFilter);
}
- if (mDemux != NULL) {
- sp<ITimeFilter> hidlTimeFilter = openHidlTimeFilter();
- if (hidlTimeFilter != NULL) {
- sp<TimeFilterClient> timeFilterClient = new TimeFilterClient(NULL);
- timeFilterClient->setHidlTimeFilter(hidlTimeFilter);
- return timeFilterClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
-int DemuxClient::getAvSyncHwId(sp<FilterClient> filterClient) {
- if (mTunerDemux != NULL) {
- int hwId;
+int32_t DemuxClient::getAvSyncHwId(sp<FilterClient> filterClient) {
+ if (filterClient == nullptr) {
+ return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
+ }
+
+ if (mTunerDemux != nullptr) {
+ int32_t hwId;
Status s = mTunerDemux->getAvSyncHwId(filterClient->getAidlFilter(), &hwId);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return INVALID_AV_SYNC_HW_ID;
+ if (!s.isOk()) {
+ return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
}
return hwId;
}
- if (mDemux != NULL) {
- uint32_t avSyncHwId;
- Result res;
- sp<IFilter> halFilter = filterClient->getHalFilter();
- mDemux->getAvSyncHwId(halFilter,
- [&](Result r, uint32_t id) {
- res = r;
- avSyncHwId = id;
- });
- if (res == Result::SUCCESS) {
- return (int) avSyncHwId;
- }
- }
-
- return INVALID_AV_SYNC_HW_ID;
+ return static_cast<int32_t>(Constant::INVALID_AV_SYNC_ID);
}
-long DemuxClient::getAvSyncTime(int avSyncHwId) {
- if (mTunerDemux != NULL) {
+int64_t DemuxClient::getAvSyncTime(int32_t avSyncHwId) {
+ if (mTunerDemux != nullptr) {
int64_t time;
Status s = mTunerDemux->getAvSyncTime(avSyncHwId, &time);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return INVALID_AV_SYNC_TIME;
+ if (!s.isOk()) {
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
return time;
}
- if (mDemux != NULL) {
- uint64_t time;
- Result res;
- mDemux->getAvSyncTime(static_cast<uint32_t>(avSyncHwId),
- [&](Result r, uint64_t ts) {
- res = r;
- time = ts;
- });
- if (res == Result::SUCCESS) {
- return (long) time;
- }
- }
-
- return INVALID_AV_SYNC_TIME;
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
-sp<DvrClient> DemuxClient::openDvr(DvrType dvbType, int bufferSize, sp<DvrClientCallback> cb) {
- if (mTunerDemux != NULL) {
+sp<DvrClient> DemuxClient::openDvr(DvrType dvbType, int32_t bufferSize, sp<DvrClientCallback> cb) {
+ if (cb == nullptr) {
+ return nullptr;
+ }
+
+ if (mTunerDemux != nullptr) {
shared_ptr<ITunerDvr> tunerDvr;
shared_ptr<TunerDvrCallback> callback =
::ndk::SharedRefBase::make<TunerDvrCallback>(cb);
- Status s = mTunerDemux->openDvr((int)dvbType, bufferSize, callback, &tunerDvr);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ Status s = mTunerDemux->openDvr(dvbType, bufferSize, callback, &tunerDvr);
+ if (!s.isOk()) {
+ return nullptr;
}
return new DvrClient(tunerDvr);
}
- if (mDemux != NULL) {
- sp<HidlDvrCallback> callback = new HidlDvrCallback(cb);
- sp<IDvr> hidlDvr = openHidlDvr(dvbType, bufferSize, callback);
- if (hidlDvr != NULL) {
- sp<DvrClient> dvrClient = new DvrClient(NULL);
- dvrClient->setHidlDvr(hidlDvr);
- return dvrClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
-Result DemuxClient::connectCiCam(int ciCamId) {
- if (mTunerDemux != NULL) {
+Result DemuxClient::connectCiCam(int32_t ciCamId) {
+ if (mTunerDemux != nullptr) {
Status s = mTunerDemux->connectCiCam(ciCamId);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDemux != NULL) {
- return mDemux->connectCiCam(static_cast<uint32_t>(ciCamId));
- }
-
return Result::INVALID_STATE;
}
Result DemuxClient::disconnectCiCam() {
- if (mTunerDemux != NULL) {
+ if (mTunerDemux != nullptr) {
Status s = mTunerDemux->disconnectCiCam();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDemux != NULL) {
- return mDemux->disconnectCiCam();
- }
-
return Result::INVALID_STATE;
}
Result DemuxClient::close() {
- if (mTunerDemux != NULL) {
+ if (mTunerDemux != nullptr) {
Status s = mTunerDemux->close();
- mTunerDemux = NULL;
+ mTunerDemux = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDemux != NULL) {
- Result res = mDemux->close();
- mDemux = NULL;
- return res;
- }
-
return Result::INVALID_STATE;
}
-/////////////// DemuxClient Helper Methods ///////////////////////
-
-sp<IFilter> DemuxClient::openHidlFilter(DemuxFilterType type, int bufferSize,
- sp<HidlFilterCallback> callback) {
- if (mDemux == NULL) {
- return NULL;
- }
-
- sp<IFilter> hidlFilter;
- Result res;
- mDemux->openFilter(type, bufferSize, callback,
- [&](Result r, const sp<IFilter>& filter) {
- hidlFilter = filter;
- res = r;
- });
- if (res != Result::SUCCESS || hidlFilter == NULL) {
- return NULL;
- }
-
- return hidlFilter;
-}
-
-sp<ITimeFilter> DemuxClient::openHidlTimeFilter() {
- if (mDemux == NULL) {
- return NULL;
- }
-
- sp<ITimeFilter> timeFilter;
- Result res;
- mDemux->openTimeFilter(
- [&](Result r, const sp<ITimeFilter>& timeFilterSp) {
- timeFilter = timeFilterSp;
- res = r;
- });
-
- if (res != Result::SUCCESS || timeFilter == NULL) {
- return NULL;
- }
-
- return timeFilter;
-}
-
-sp<IDvr> DemuxClient::openHidlDvr(DvrType dvrType, int bufferSize,
- sp<HidlDvrCallback> callback) {
- if (mDemux == NULL) {
- return NULL;
- }
-
- sp<IDvr> hidlDvr;
- Result res;
- mDemux->openDvr(dvrType, bufferSize, callback,
- [&](Result r, const sp<IDvr>& dvr) {
- hidlDvr = dvr;
- res = r;
- });
- if (res != Result::SUCCESS || hidlDvr == NULL) {
- return NULL;
- }
-
- return hidlDvr;
-}
-
-int DemuxClient::getSubType(DemuxFilterType filterType) {
- switch (filterType.mainType) {
- case DemuxFilterMainType::TS:
- return (int)filterType.subType.tsFilterType();
- case DemuxFilterMainType::MMTP:
- return (int)filterType.subType.mmtpFilterType();
- case DemuxFilterMainType::IP:
- return (int)filterType.subType.ipFilterType();
- case DemuxFilterMainType::TLV:
- return (int)filterType.subType.tlvFilterType();
- case DemuxFilterMainType::ALP:
- return (int)filterType.subType.alpFilterType();
- default:
- return -1;
- }
-}
} // namespace android
diff --git a/media/jni/tuner/DemuxClient.h b/media/jni/tuner/DemuxClient.h
index 46b0a3d..d5f5f2f 100644
--- a/media/jni/tuner/DemuxClient.h
+++ b/media/jni/tuner/DemuxClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,12 +17,11 @@
#ifndef _ANDROID_MEDIA_TV_DEMUX_CLIENT_H_
#define _ANDROID_MEDIA_TV_DEMUX_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <aidl/android/media/tv/tuner/ITunerDemux.h>
-#include <android/hardware/tv/tuner/1.0/IDemux.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
-#include "DvrClient.h"
#include "ClientHelper.h"
+#include "DvrClient.h"
#include "DvrClientCallback.h"
#include "FilterClient.h"
#include "FilterClientCallback.h"
@@ -30,20 +29,14 @@
#include "TimeFilterClient.h"
using Status = ::ndk::ScopedAStatus;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterType;
+using ::aidl::android::hardware::tv::tuner::DvrType;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::aidl::android::media::tv::tuner::ITunerDemux;
using ::aidl::android::media::tv::tuner::ITunerTimeFilter;
-using ::android::hardware::tv::tuner::V1_0::IDemux;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterType;
-using ::android::hardware::tv::tuner::V1_0::DvrType;
-using ::android::hardware::tv::tuner::V1_0::IDemux;
-using ::android::hardware::tv::tuner::V1_0::ITimeFilter;
-
using namespace std;
-const int64_t INVALID_AV_SYNC_TIME = -1;
-const int INVALID_AV_SYNC_HW_ID = -1;
-
namespace android {
struct DemuxClient : public RefBase {
@@ -52,9 +45,6 @@
DemuxClient(shared_ptr<ITunerDemux> tunerDemux);
~DemuxClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlDemux(sp<IDemux> demux);
-
/**
* Set a frontend resource as data input of the demux.
*/
@@ -68,7 +58,8 @@
/**
* Open a new filter client.
*/
- sp<FilterClient> openFilter(DemuxFilterType type, int bufferSize, sp<FilterClientCallback> cb);
+ sp<FilterClient> openFilter(const DemuxFilterType& type, int32_t bufferSize,
+ sp<FilterClientCallback> cb);
/**
* Open time filter of the demux.
@@ -78,22 +69,22 @@
/**
* Get hardware sync ID for audio and video.
*/
- int getAvSyncHwId(sp<FilterClient> filterClient);
+ int32_t getAvSyncHwId(sp<FilterClient> filterClient);
/**
* Get current time stamp to use for A/V sync.
*/
- long getAvSyncTime(int avSyncHwId);
+ int64_t getAvSyncTime(int32_t avSyncHwId);
/**
* Open a DVR (Digital Video Record) client.
*/
- sp<DvrClient> openDvr(DvrType dvbType, int bufferSize, sp<DvrClientCallback> cb);
+ sp<DvrClient> openDvr(DvrType dvbType, int32_t bufferSize, sp<DvrClientCallback> cb);
/**
* Connect Conditional Access Modules (CAM) through Common Interface (CI).
*/
- Result connectCiCam(int ciCamId);
+ Result connectCiCam(int32_t ciCamId);
/**
* Disconnect Conditional Access Modules (CAM).
@@ -110,29 +101,12 @@
*/
shared_ptr<ITunerDemux> getAidlDemux() { return mTunerDemux; }
- void setId(int id) { mId = id; }
- int getId() { return mId; }
-
private:
- sp<IFilter> openHidlFilter(DemuxFilterType type, int bufferSize, sp<HidlFilterCallback> cb);
- sp<ITimeFilter> openHidlTimeFilter();
- sp<IDvr> openHidlDvr(DvrType type, int bufferSize, sp<HidlDvrCallback> cb);
- int getSubType(DemuxFilterType filterType);
-
/**
* An AIDL Tuner Demux Singleton assigned at the first time the Tuner Client
* opens a demux. Default null when demux is not opened.
*/
shared_ptr<ITunerDemux> mTunerDemux;
-
- /**
- * A Demux HAL interface that is ready before migrating to the TunerDemux.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<IDemux> mDemux;
-
- int mId;
};
} // namespace android
diff --git a/media/jni/tuner/DescramblerClient.cpp b/media/jni/tuner/DescramblerClient.cpp
index 3e4ed82..052fa7a 100644
--- a/media/jni/tuner/DescramblerClient.cpp
+++ b/media/jni/tuner/DescramblerClient.cpp
@@ -21,118 +21,69 @@
#include "DescramblerClient.h"
-using ::android::hardware::tv::tuner::V1_0::Result;
-
namespace android {
/////////////// DescramblerClient ///////////////////////
-
DescramblerClient::DescramblerClient(shared_ptr<ITunerDescrambler> tunerDescrambler) {
mTunerDescrambler = tunerDescrambler;
}
DescramblerClient::~DescramblerClient() {
- mTunerDescrambler = NULL;
- mDescrambler = NULL;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-void DescramblerClient::setHidlDescrambler(sp<IDescrambler> descrambler) {
- mDescrambler = descrambler;
+ mTunerDescrambler = nullptr;
}
Result DescramblerClient::setDemuxSource(sp<DemuxClient> demuxClient) {
- if (demuxClient == NULL) {
+ if (demuxClient == nullptr) {
return Result::INVALID_ARGUMENT;
}
- if (mTunerDescrambler != NULL) {
+ if (mTunerDescrambler != nullptr) {
Status s = mTunerDescrambler->setDemuxSource(demuxClient->getAidlDemux());
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDescrambler != NULL) {
- return mDescrambler->setDemuxSource(demuxClient->getId());
- }
-
return Result::INVALID_STATE;
}
Result DescramblerClient::setKeyToken(vector<uint8_t> keyToken) {
- if (mTunerDescrambler != NULL) {
+ if (mTunerDescrambler != nullptr) {
Status s = mTunerDescrambler->setKeyToken(keyToken);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDescrambler != NULL) {
- return mDescrambler->setKeyToken(keyToken);
- }
-
return Result::INVALID_STATE;
}
Result DescramblerClient::addPid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) {
- if (mTunerDescrambler != NULL) {
- shared_ptr<ITunerFilter> aidlFilter = (optionalSourceFilter == NULL)
- ? NULL : optionalSourceFilter->getAidlFilter();
- Status s = mTunerDescrambler->addPid(getAidlDemuxPid(pid), aidlFilter);
+ if (mTunerDescrambler != nullptr) {
+ shared_ptr<ITunerFilter> aidlFilter =
+ (optionalSourceFilter == nullptr) ? nullptr : optionalSourceFilter->getAidlFilter();
+ Status s = mTunerDescrambler->addPid(pid, aidlFilter);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDescrambler != NULL) {
- sp<IFilter> halFilter = (optionalSourceFilter == NULL)
- ? NULL : optionalSourceFilter->getHalFilter();
- return mDescrambler->addPid(pid, halFilter);
- }
-
return Result::INVALID_STATE;
}
Result DescramblerClient::removePid(DemuxPid pid, sp<FilterClient> optionalSourceFilter) {
- if (mTunerDescrambler != NULL) {
- shared_ptr<ITunerFilter> aidlFilter = (optionalSourceFilter == NULL)
- ? NULL : optionalSourceFilter->getAidlFilter();
- Status s = mTunerDescrambler->removePid(getAidlDemuxPid(pid), aidlFilter);
+ if (mTunerDescrambler != nullptr) {
+ shared_ptr<ITunerFilter> aidlFilter =
+ (optionalSourceFilter == nullptr) ? nullptr : optionalSourceFilter->getAidlFilter();
+ Status s = mTunerDescrambler->removePid(pid, aidlFilter);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDescrambler != NULL) {
- sp<IFilter> halFilter = (optionalSourceFilter == NULL)
- ? NULL : optionalSourceFilter->getHalFilter();
- return mDescrambler->removePid(pid, halFilter);
- }
-
return Result::INVALID_STATE;
}
Result DescramblerClient::close() {
- if (mTunerDescrambler != NULL) {
+ if (mTunerDescrambler != nullptr) {
Status s = mTunerDescrambler->close();
- mTunerDescrambler = NULL;
+ mTunerDescrambler = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDescrambler != NULL) {
- Result res = mDescrambler->close();
- mDescrambler = NULL;
- return res;
- }
-
return Result::INVALID_STATE;
}
-/////////////// DescramblerClient Helper Methods ///////////////////////
-
-TunerDemuxPid DescramblerClient::getAidlDemuxPid(DemuxPid& pid) {
- TunerDemuxPid aidlPid;
- switch (pid.getDiscriminator()) {
- case DemuxPid::hidl_discriminator::tPid:
- aidlPid.set<TunerDemuxPid::tPid>((int)pid.tPid());
- break;
- case DemuxPid::hidl_discriminator::mmtpPid:
- aidlPid.set<TunerDemuxPid::mmtpPid>((int)pid.mmtpPid());
- break;
- }
- return aidlPid;
-}
} // namespace android
diff --git a/media/jni/tuner/DescramblerClient.h b/media/jni/tuner/DescramblerClient.h
index a8fa1e2..c851e84 100644
--- a/media/jni/tuner/DescramblerClient.h
+++ b/media/jni/tuner/DescramblerClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,19 +17,15 @@
#ifndef _ANDROID_MEDIA_TV_DESCRAMBLER_CLIENT_H_
#define _ANDROID_MEDIA_TV_DESCRAMBLER_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <aidl/android/media/tv/tuner/ITunerDescrambler.h>
-#include <android/hardware/tv/tuner/1.0/IDescrambler.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
#include "DemuxClient.h"
#include "FilterClient.h"
+using ::aidl::android::hardware::tv::tuner::DemuxPid;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::aidl::android::media::tv::tuner::ITunerDescrambler;
-using ::aidl::android::media::tv::tuner::TunerDemuxPid;
-
-using ::android::hardware::tv::tuner::V1_0::IDescrambler;
-using ::android::hardware::tv::tuner::V1_0::Result;
-using ::android::hardware::tv::tuner::V1_0::DemuxPid;
using namespace std;
@@ -41,9 +37,6 @@
DescramblerClient(shared_ptr<ITunerDescrambler> tunerDescrambler);
~DescramblerClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlDescrambler(sp<IDescrambler> descrambler);
-
/**
* Set a demux as source of the descrambler.
*/
@@ -70,20 +63,11 @@
Result close();
private:
- TunerDemuxPid getAidlDemuxPid(DemuxPid& pid);
-
/**
* An AIDL Tuner Descrambler Singleton assigned at the first time the Tuner Client
* opens a descrambler. Default null when descrambler is not opened.
*/
shared_ptr<ITunerDescrambler> mTunerDescrambler;
-
- /**
- * A Descrambler HAL interface that is ready before migrating to the TunerDescrambler.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<IDescrambler> mDescrambler;
};
} // namespace android
diff --git a/media/jni/tuner/DvrClient.cpp b/media/jni/tuner/DvrClient.cpp
index 0476216..052b465 100644
--- a/media/jni/tuner/DvrClient.cpp
+++ b/media/jni/tuner/DvrClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -14,48 +14,42 @@
* limitations under the License.
*/
+//#define LOG_NDEBUG 0
#define LOG_TAG "DvrClient"
+#include "DvrClient.h"
+
+#include <aidl/android/hardware/tv/tuner/DemuxQueueNotifyBits.h>
#include <android-base/logging.h>
-#include <fmq/ConvertMQDescriptors.h>
+#include <inttypes.h>
#include <utils/Log.h>
#include "ClientHelper.h"
-#include "DvrClient.h"
-using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits;
-using ::android::hardware::tv::tuner::V1_0::Result;
+using ::aidl::android::hardware::tv::tuner::DemuxQueueNotifyBits;
namespace android {
-
/////////////// DvrClient ///////////////////////
-
DvrClient::DvrClient(shared_ptr<ITunerDvr> tunerDvr) {
mTunerDvr = tunerDvr;
mFd = -1;
- mDvrMQ = NULL;
- mDvrMQEventFlag = NULL;
+ mDvrMQ = nullptr;
+ mDvrMQEventFlag = nullptr;
}
DvrClient::~DvrClient() {
- mTunerDvr = NULL;
- mDvr = NULL;
+ mTunerDvr = nullptr;
mFd = -1;
- mDvrMQ = NULL;
- mDvrMQEventFlag = NULL;
+ mDvrMQ = nullptr;
+ mDvrMQEventFlag = nullptr;
}
-// TODO: remove after migration to Tuner Service is done.
-void DvrClient::setHidlDvr(sp<IDvr> dvr) {
- mDvr = dvr;
-}
-
-void DvrClient::setFd(int fd) {
+void DvrClient::setFd(int32_t fd) {
mFd = fd;
}
-long DvrClient::readFromFile(long size) {
- if (mDvrMQ == NULL || mDvrMQEventFlag == NULL) {
+int64_t DvrClient::readFromFile(int64_t size) {
+ if (mDvrMQ == nullptr || mDvrMQEventFlag == nullptr) {
ALOGE("Failed to readFromFile. DVR mq is not configured");
return -1;
}
@@ -64,16 +58,16 @@
return -1;
}
- long available = mDvrMQ->availableToWrite();
- long write = min(size, available);
+ int64_t available = mDvrMQ->availableToWrite();
+ int64_t write = min(size, available);
AidlMQ::MemTransaction tx;
- long ret = 0;
+ int64_t ret = 0;
if (mDvrMQ->beginWrite(write, &tx)) {
auto first = tx.getFirstRegion();
auto data = first.getAddress();
- long length = first.getLength();
- long firstToWrite = min(length, write);
+ int64_t length = first.getLength();
+ int64_t firstToWrite = min(length, write);
ret = read(mFd, data, firstToWrite);
if (ret < 0) {
@@ -81,17 +75,20 @@
return -1;
}
if (ret < firstToWrite) {
- ALOGW("file to MQ, first region: %ld bytes to write, but %ld bytes written",
- firstToWrite, ret);
+ ALOGW("file to MQ, first region: %" PRIu64 " bytes to write, but %" PRIu64
+ " bytes written",
+ firstToWrite, ret);
} else if (firstToWrite < write) {
- ALOGD("write second region: %ld bytes written, %ld bytes in total", ret, write);
+ ALOGV("write second region: %" PRIu64 " bytes written, %" PRIu64 " bytes in total", ret,
+ write);
auto second = tx.getSecondRegion();
data = second.getAddress();
length = second.getLength();
- int secondToWrite = std::min(length, write - firstToWrite);
+ int64_t secondToWrite = std::min(length, write - firstToWrite);
ret += read(mFd, data, secondToWrite);
}
- ALOGD("file to MQ: %ld bytes need to be written, %ld bytes written", write, ret);
+ ALOGV("file to MQ: %" PRIu64 " bytes need to be written, %" PRIu64 " bytes written", write,
+ ret);
if (!mDvrMQ->commitWrite(ret)) {
ALOGE("Error: failed to commit write!");
return -1;
@@ -106,8 +103,8 @@
return ret;
}
-long DvrClient::readFromBuffer(int8_t* buffer, long size) {
- if (mDvrMQ == NULL || mDvrMQEventFlag == NULL) {
+int64_t DvrClient::readFromBuffer(int8_t* buffer, int64_t size) {
+ if (mDvrMQ == nullptr || mDvrMQEventFlag == nullptr) {
ALOGE("Failed to readFromBuffer. DVR mq is not configured");
return -1;
}
@@ -116,7 +113,7 @@
return -1;
}
- long available = mDvrMQ->availableToWrite();
+ int64_t available = mDvrMQ->availableToWrite();
size = min(size, available);
if (mDvrMQ->write(buffer, size)) {
@@ -128,8 +125,8 @@
return size;
}
-long DvrClient::writeToFile(long size) {
- if (mDvrMQ == NULL || mDvrMQEventFlag == NULL) {
+int64_t DvrClient::writeToFile(int64_t size) {
+ if (mDvrMQ == nullptr || mDvrMQEventFlag == nullptr) {
ALOGE("Failed to writeToFile. DVR mq is not configured");
return -1;
}
@@ -138,16 +135,16 @@
return -1;
}
- long available = mDvrMQ->availableToRead();
- long toRead = min(size, available);
+ int64_t available = mDvrMQ->availableToRead();
+ int64_t toRead = min(size, available);
- long ret = 0;
+ int64_t ret = 0;
AidlMQ::MemTransaction tx;
if (mDvrMQ->beginRead(toRead, &tx)) {
auto first = tx.getFirstRegion();
auto data = first.getAddress();
- long length = first.getLength();
- long firstToRead = std::min(length, toRead);
+ int64_t length = first.getLength();
+ int64_t firstToRead = std::min(length, toRead);
ret = write(mFd, data, firstToRead);
if (ret < 0) {
@@ -155,16 +152,18 @@
return -1;
}
if (ret < firstToRead) {
- ALOGW("MQ to file: %ld bytes read, but %ld bytes written", firstToRead, ret);
+ ALOGW("MQ to file: %" PRIu64 " bytes read, but %" PRIu64 " bytes written", firstToRead,
+ ret);
} else if (firstToRead < toRead) {
- ALOGD("read second region: %ld bytes read, %ld bytes in total", ret, toRead);
+ ALOGV("read second region: %" PRIu64 " bytes read, %" PRIu64 " bytes in total", ret,
+ toRead);
auto second = tx.getSecondRegion();
data = second.getAddress();
length = second.getLength();
- int secondToRead = toRead - firstToRead;
+ int32_t secondToRead = toRead - firstToRead;
ret += write(mFd, data, secondToRead);
}
- ALOGD("MQ to file: %ld bytes to be read, %ld bytes written", toRead, ret);
+ ALOGV("MQ to file: %" PRIu64 " bytes to be read, %" PRIu64 " bytes written", toRead, ret);
if (!mDvrMQ->commitRead(ret)) {
ALOGE("Error: failed to commit read!");
return 0;
@@ -179,8 +178,8 @@
return ret;
}
-long DvrClient::writeToBuffer(int8_t* buffer, long size) {
- if (mDvrMQ == NULL || mDvrMQEventFlag == NULL) {
+int64_t DvrClient::writeToBuffer(int8_t* buffer, int64_t size) {
+ if (mDvrMQ == nullptr || mDvrMQEventFlag == nullptr) {
ALOGE("Failed to writetoBuffer. DVR mq is not configured");
return -1;
}
@@ -189,7 +188,7 @@
return -1;
}
- long available = mDvrMQ->availableToRead();
+ int64_t available = mDvrMQ->availableToRead();
size = min(size, available);
if (mDvrMQ->read(buffer, size)) {
@@ -202,9 +201,8 @@
}
Result DvrClient::configure(DvrSettings settings) {
- if (mTunerDvr != NULL) {
- TunerDvrSettings dvrSettings = getAidlDvrSettingsFromHidl(settings);
- Status s = mTunerDvr->configure(dvrSettings);
+ if (mTunerDvr != nullptr) {
+ Status s = mTunerDvr->configure(settings);
Result res = ClientHelper::getServiceSpecificErrorCode(s);
if (res != Result::SUCCESS) {
return res;
@@ -221,196 +219,95 @@
return res;
}
- if (mDvr != NULL) {
- Result res = mDvr->configure(settings);
- if (res == Result::SUCCESS) {
- MQDescriptorSync<uint8_t> dvrMQDesc;
- res = getQueueDesc(dvrMQDesc);
- if (res == Result::SUCCESS) {
- AidlMQDesc aidlMQDesc;
- unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>(
- dvrMQDesc, &aidlMQDesc);
- mDvrMQ = new (nothrow) AidlMessageQueue(aidlMQDesc);
- EventFlag::createEventFlag(mDvrMQ->getEventFlagWord(), &mDvrMQEventFlag);
- }
- }
- return res;
- }
-
return Result::INVALID_STATE;
}
Result DvrClient::attachFilter(sp<FilterClient> filterClient) {
- if (mTunerDvr != NULL) {
- Status s = mTunerDvr->attachFilter(filterClient->getAidlFilter());
- return ClientHelper::getServiceSpecificErrorCode(s);
+ if (filterClient == nullptr) {
+ return Result::INVALID_ARGUMENT;
}
- if (mDvr != NULL) {
- sp<IFilter> hidlFilter = filterClient->getHalFilter();
- if (hidlFilter == NULL) {
- return Result::INVALID_ARGUMENT;
- }
- return mDvr->attachFilter(hidlFilter);
+ if (mTunerDvr != nullptr) {
+ Status s = mTunerDvr->attachFilter(filterClient->getAidlFilter());
+ return ClientHelper::getServiceSpecificErrorCode(s);
}
return Result::INVALID_STATE;
}
Result DvrClient::detachFilter(sp<FilterClient> filterClient) {
- if (mTunerDvr != NULL) {
- Status s = mTunerDvr->detachFilter(filterClient->getAidlFilter());
- return ClientHelper::getServiceSpecificErrorCode(s);
+ if (filterClient == nullptr) {
+ return Result::INVALID_ARGUMENT;
}
- if (mDvr != NULL) {
- sp<IFilter> hidlFilter = filterClient->getHalFilter();
- if (hidlFilter == NULL) {
- return Result::INVALID_ARGUMENT;
- }
- return mDvr->detachFilter(hidlFilter);
+ if (mTunerDvr != nullptr) {
+ Status s = mTunerDvr->detachFilter(filterClient->getAidlFilter());
+ return ClientHelper::getServiceSpecificErrorCode(s);
}
return Result::INVALID_STATE;
}
Result DvrClient::start() {
- if (mTunerDvr != NULL) {
+ if (mTunerDvr != nullptr) {
Status s = mTunerDvr->start();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDvr != NULL) {
- return mDvr->start();
- }
-
return Result::INVALID_STATE;
}
Result DvrClient::stop() {
- if (mTunerDvr != NULL) {
+ if (mTunerDvr != nullptr) {
Status s = mTunerDvr->stop();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDvr != NULL) {
- return mDvr->stop();
- }
-
return Result::INVALID_STATE;
}
Result DvrClient::flush() {
- if (mTunerDvr != NULL) {
+ if (mTunerDvr != nullptr) {
Status s = mTunerDvr->flush();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDvr != NULL) {
- return mDvr->flush();
- }
-
return Result::INVALID_STATE;
}
Result DvrClient::close() {
- if (mDvrMQEventFlag != NULL) {
+ if (mDvrMQEventFlag != nullptr) {
EventFlag::deleteEventFlag(&mDvrMQEventFlag);
}
- mDvrMQ = NULL;
+ mDvrMQ = nullptr;
- if (mTunerDvr != NULL) {
+ if (mTunerDvr != nullptr) {
Status s = mTunerDvr->close();
- mTunerDvr = NULL;
+ mTunerDvr = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mDvr != NULL) {
- Result res = mDvr->close();
- mDvr = NULL;
- return res;
- }
-
return Result::INVALID_STATE;
}
-/////////////// IDvrCallback ///////////////////////
-
-HidlDvrCallback::HidlDvrCallback(sp<DvrClientCallback> dvrClientCallback)
- : mDvrClientCallback(dvrClientCallback) {}
-
-Return<void> HidlDvrCallback::onRecordStatus(const RecordStatus status) {
- if (mDvrClientCallback != NULL) {
- mDvrClientCallback->onRecordStatus(status);
- }
- return Void();
-}
-
-Return<void> HidlDvrCallback::onPlaybackStatus(const PlaybackStatus status) {
- if (mDvrClientCallback != NULL) {
- mDvrClientCallback->onPlaybackStatus(status);
- }
- return Void();
-}
-
/////////////// TunerDvrCallback ///////////////////////
-
TunerDvrCallback::TunerDvrCallback(sp<DvrClientCallback> dvrClientCallback)
: mDvrClientCallback(dvrClientCallback) {}
-Status TunerDvrCallback::onRecordStatus(int status) {
- if (mDvrClientCallback != NULL) {
- mDvrClientCallback->onRecordStatus(static_cast<RecordStatus>(status));
+Status TunerDvrCallback::onRecordStatus(RecordStatus status) {
+ if (mDvrClientCallback != nullptr) {
+ mDvrClientCallback->onRecordStatus(status);
return Status::ok();
}
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
-Status TunerDvrCallback::onPlaybackStatus(int status) {
- if (mDvrClientCallback != NULL) {
- mDvrClientCallback->onPlaybackStatus(static_cast<PlaybackStatus>(status));
+Status TunerDvrCallback::onPlaybackStatus(PlaybackStatus status) {
+ if (mDvrClientCallback != nullptr) {
+ mDvrClientCallback->onPlaybackStatus(status);
return Status::ok();
}
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
-/////////////// DvrClient Helper Methods ///////////////////////
-
-Result DvrClient::getQueueDesc(MQDesc& dvrMQDesc) {
- if (mDvr != NULL) {
- Result res = Result::UNKNOWN_ERROR;
- mDvr->getQueueDesc([&](Result r, const MQDesc& desc) {
- dvrMQDesc = desc;
- res = r;
- });
- return res;
- }
-
- return Result::INVALID_STATE;
-}
-
-TunerDvrSettings DvrClient::getAidlDvrSettingsFromHidl(DvrSettings settings) {
- TunerDvrSettings s;
- switch (settings.getDiscriminator()) {
- case DvrSettings::hidl_discriminator::record: {
- s.statusMask = static_cast<int>(settings.record().statusMask);
- s.lowThreshold = static_cast<int>(settings.record().lowThreshold);
- s.highThreshold = static_cast<int>(settings.record().highThreshold);
- s.dataFormat = static_cast<int>(settings.record().dataFormat);
- s.packetSize = static_cast<int>(settings.record().packetSize);
- return s;
- }
- case DvrSettings::hidl_discriminator::playback: {
- s.statusMask = static_cast<int>(settings.playback().statusMask);
- s.lowThreshold = static_cast<int>(settings.playback().lowThreshold);
- s.highThreshold = static_cast<int>(settings.playback().highThreshold);
- s.dataFormat = static_cast<int>(settings.playback().dataFormat);
- s.packetSize = static_cast<int>(settings.playback().packetSize);
- return s;
- }
- default:
- break;
- }
- return s;
-}
} // namespace android
diff --git a/media/jni/tuner/DvrClient.h b/media/jni/tuner/DvrClient.h
index 252554e..9080c72 100644
--- a/media/jni/tuner/DvrClient.h
+++ b/media/jni/tuner/DvrClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,36 +17,29 @@
#ifndef _ANDROID_MEDIA_TV_DVR_CLIENT_H_
#define _ANDROID_MEDIA_TV_DVR_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/DvrSettings.h>
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <aidl/android/media/tv/tuner/BnTunerDvrCallback.h>
#include <aidl/android/media/tv/tuner/ITunerDvr.h>
-#include <android/hardware/tv/tuner/1.0/IDvr.h>
-#include <android/hardware/tv/tuner/1.0/IDvrCallback.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
#include <fmq/AidlMessageQueue.h>
-#include <fmq/MessageQueue.h>
#include "DvrClientCallback.h"
#include "FilterClient.h"
using Status = ::ndk::ScopedAStatus;
+using ::aidl::android::hardware::common::fmq::MQDescriptor;
using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
+using ::aidl::android::hardware::tv::tuner::DvrSettings;
+using ::aidl::android::hardware::tv::tuner::PlaybackStatus;
+using ::aidl::android::hardware::tv::tuner::RecordStatus;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::aidl::android::media::tv::tuner::BnTunerDvrCallback;
using ::aidl::android::media::tv::tuner::ITunerDvr;
-using ::aidl::android::media::tv::tuner::TunerDvrSettings;
-
-using ::android::hardware::EventFlag;
-using ::android::hardware::MQDescriptorSync;
-using ::android::hardware::MessageQueue;
-using ::android::hardware::tv::tuner::V1_0::DvrSettings;
-using ::android::hardware::tv::tuner::V1_0::IDvr;
-using ::android::hardware::tv::tuner::V1_0::IDvrCallback;
using namespace std;
namespace android {
-using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>;
-using MQDesc = MQDescriptorSync<uint8_t>;
using AidlMQ = AidlMessageQueue<int8_t, SynchronizedReadWrite>;
using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>;
@@ -55,19 +48,8 @@
public:
TunerDvrCallback(sp<DvrClientCallback> dvrClientCallback);
- Status onRecordStatus(int status);
- Status onPlaybackStatus(int status);
-
-private:
- sp<DvrClientCallback> mDvrClientCallback;
-};
-
-struct HidlDvrCallback : public IDvrCallback {
-
-public:
- HidlDvrCallback(sp<DvrClientCallback> dvrClientCallback);
- virtual Return<void> onRecordStatus(const RecordStatus status);
- virtual Return<void> onPlaybackStatus(const PlaybackStatus status);
+ Status onRecordStatus(RecordStatus status);
+ Status onPlaybackStatus(PlaybackStatus status);
private:
sp<DvrClientCallback> mDvrClientCallback;
@@ -79,33 +61,30 @@
DvrClient(shared_ptr<ITunerDvr> tunerDvr);
~DvrClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlDvr(sp<IDvr> dvr);
-
/**
* Set the DVR file descriptor.
*/
- void setFd(int fd);
+ void setFd(int32_t fd);
/**
* Read data from file with given size. Return the actual read size.
*/
- long readFromFile(long size);
+ int64_t readFromFile(int64_t size);
/**
* Read data from the given buffer with given size. Return the actual read size.
*/
- long readFromBuffer(int8_t* buffer, long size);
+ int64_t readFromBuffer(int8_t* buffer, int64_t size);
/**
* Write data to file with given size. Return the actual write size.
*/
- long writeToFile(long size);
+ int64_t writeToFile(int64_t size);
/**
* Write data to the given buffer with given size. Return the actual write size.
*/
- long writeToBuffer(int8_t* buffer, long size);
+ int64_t writeToBuffer(int8_t* buffer, int64_t size);
/**
* Configure the DVR.
@@ -143,26 +122,16 @@
Result close();
private:
- Result getQueueDesc(MQDesc& dvrMQDesc);
- TunerDvrSettings getAidlDvrSettingsFromHidl(DvrSettings settings);
-
/**
* An AIDL Tuner Dvr Singleton assigned at the first time the Tuner Client
* opens a dvr. Default null when dvr is not opened.
*/
shared_ptr<ITunerDvr> mTunerDvr;
- /**
- * A Dvr HAL interface that is ready before migrating to the TunerDvr.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<IDvr> mDvr;
-
AidlMQ* mDvrMQ;
EventFlag* mDvrMQEventFlag;
string mFilePath;
- int mFd;
+ int32_t mFd;
};
} // namespace android
diff --git a/media/jni/tuner/DvrClientCallback.h b/media/jni/tuner/DvrClientCallback.h
index 6684424..a75f199 100644
--- a/media/jni/tuner/DvrClientCallback.h
+++ b/media/jni/tuner/DvrClientCallback.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,8 +17,12 @@
#ifndef _ANDROID_MEDIA_TV_DVR_CLIENT_CALLBACK_H_
#define _ANDROID_MEDIA_TV_DVR_CLIENT_CALLBACK_H_
-using ::android::hardware::tv::tuner::V1_0::PlaybackStatus;
-using ::android::hardware::tv::tuner::V1_0::RecordStatus;
+#include <aidl/android/hardware/tv/tuner/PlaybackStatus.h>
+#include <aidl/android/hardware/tv/tuner/RecordStatus.h>
+#include <utils/RefBase.h>
+
+using ::aidl::android::hardware::tv::tuner::PlaybackStatus;
+using ::aidl::android::hardware::tv::tuner::RecordStatus;
using namespace std;
@@ -30,4 +34,4 @@
};
} // namespace android
-#endif // _ANDROID_MEDIA_TV_DVR_CLIENT_CALLBACK_H_
\ No newline at end of file
+#endif // _ANDROID_MEDIA_TV_DVR_CLIENT_CALLBACK_H_
diff --git a/media/jni/tuner/FilterClient.cpp b/media/jni/tuner/FilterClient.cpp
index 324c09a..eea27ea 100644
--- a/media/jni/tuner/FilterClient.cpp
+++ b/media/jni/tuner/FilterClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,65 +16,43 @@
#define LOG_TAG "FilterClient"
-#include <aidlcommonsupport/NativeHandle.h>
-#include <android-base/logging.h>
-#include <fmq/ConvertMQDescriptors.h>
-#include <utils/Log.h>
-
#include "FilterClient.h"
-using ::aidl::android::media::tv::tuner::TunerDemuxIpAddressSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterAlpConfiguration;
-using ::aidl::android::media::tv::tuner::TunerFilterIpConfiguration;
-using ::aidl::android::media::tv::tuner::TunerFilterMmtpConfiguration;
-using ::aidl::android::media::tv::tuner::TunerFilterMonitorEvent;
-using ::aidl::android::media::tv::tuner::TunerFilterScIndexMask;
-using ::aidl::android::media::tv::tuner::TunerFilterSectionBits;
-using ::aidl::android::media::tv::tuner::TunerFilterSectionCondition;
-using ::aidl::android::media::tv::tuner::TunerFilterSectionTableInfo;
-using ::aidl::android::media::tv::tuner::TunerFilterSharedHandleInfo;
-using ::aidl::android::media::tv::tuner::TunerFilterTlvConfiguration;
-using ::aidl::android::media::tv::tuner::TunerFilterTsConfiguration;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterMainType;
-using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxQueueNotifyBits;
-using ::android::hardware::tv::tuner::V1_0::DemuxStreamId;
-using ::android::hardware::tv::tuner::V1_0::DemuxTpid;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterType;
-using ::android::hardware::tv::tuner::V1_1::DemuxFilterMonitorEvent;
-using ::android::hardware::tv::tuner::V1_1::ScramblingStatus;
+#include <aidl/android/hardware/tv/tuner/DemuxFilterMainType.h>
+#include <aidl/android/hardware/tv/tuner/DemuxQueueNotifyBits.h>
+#include <aidlcommonsupport/NativeHandle.h>
+#include <android-base/logging.h>
+#include <utils/Log.h>
+
+using ::aidl::android::hardware::common::NativeHandle;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterMainType;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSubType;
+using ::aidl::android::hardware::tv::tuner::DemuxMmtpFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxMmtpFilterType;
+using ::aidl::android::hardware::tv::tuner::DemuxQueueNotifyBits;
+using ::aidl::android::hardware::tv::tuner::DemuxTsFilterSettingsFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxTsFilterType;
+using ::aidl::android::hardware::tv::tuner::ScramblingStatus;
namespace android {
-
/////////////// FilterClient ///////////////////////
-
FilterClient::FilterClient(DemuxFilterType type, shared_ptr<ITunerFilter> tunerFilter) {
mTunerFilter = tunerFilter;
- mAvSharedHandle = NULL;
+ mAvSharedHandle = nullptr;
checkIsMediaFilter(type);
}
FilterClient::~FilterClient() {
- mTunerFilter = NULL;
- mFilter = NULL;
- mFilter_1_1 = NULL;
- mAvSharedHandle = NULL;
+ mTunerFilter = nullptr;
+ mAvSharedHandle = nullptr;
mAvSharedMemSize = 0;
mIsMediaFilter = false;
mIsPassthroughFilter = false;
- mFilterMQ = NULL;
- mFilterMQEventFlag = NULL;
+ mFilterMQ = nullptr;
+ mFilterMQEventFlag = nullptr;
}
-// TODO: remove after migration to Tuner Service is done.
-void FilterClient::setHidlFilter(sp<IFilter> filter) {
- mFilter = filter;
- mFilter_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(mFilter);
-}
-
-int FilterClient::read(int8_t* buffer, int size) {
+int64_t FilterClient::read(int8_t* buffer, int64_t size) {
Result res = getFilterMq();
if (res != Result::SUCCESS) {
return -1;
@@ -85,8 +63,8 @@
SharedHandleInfo FilterClient::getAvSharedHandleInfo() {
handleAvShareMemory();
SharedHandleInfo info{
- .sharedHandle = (mIsMediaFilter && !mIsPassthroughFilter) ? mAvSharedHandle : NULL,
- .size = mAvSharedMemSize,
+ .sharedHandle = (mIsMediaFilter && !mIsPassthroughFilter) ? mAvSharedHandle : nullptr,
+ .size = mAvSharedMemSize,
};
return info;
@@ -96,8 +74,8 @@
Result res;
checkIsPassthroughFilter(configure);
- if (mTunerFilter != NULL) {
- Status s = mTunerFilter->configure(getAidlFilterSettings(configure));
+ if (mTunerFilter != nullptr) {
+ Status s = mTunerFilter->configure(configure);
res = ClientHelper::getServiceSpecificErrorCode(s);
if (res == Result::SUCCESS) {
getAvSharedHandleInfo();
@@ -105,171 +83,96 @@
return res;
}
- if (mFilter != NULL) {
- res = mFilter->configure(configure);
- if (res == Result::SUCCESS) {
- getAvSharedHandleInfo();
- }
- return res;
- }
-
return Result::INVALID_STATE;
}
-Result FilterClient::configureMonitorEvent(int monitorEventType) {
- if (mTunerFilter != NULL) {
+Result FilterClient::configureMonitorEvent(int32_t monitorEventType) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->configureMonitorEvent(monitorEventType);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter_1_1 != NULL) {
- return mFilter_1_1->configureMonitorEvent(monitorEventType);
- }
-
return Result::INVALID_STATE;
}
-Result FilterClient::configureIpFilterContextId(int cid) {
- if (mTunerFilter != NULL) {
+Result FilterClient::configureIpFilterContextId(int32_t cid) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->configureIpFilterContextId(cid);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter_1_1 != NULL) {
- return mFilter_1_1->configureIpCid(cid);
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::configureAvStreamType(AvStreamType avStreamType) {
- if (mTunerFilter != NULL) {
- int type;
- switch (avStreamType.getDiscriminator()) {
- case AvStreamType::hidl_discriminator::audio:
- type = (int)avStreamType.audio();
- break;
- case AvStreamType::hidl_discriminator::video:
- type = (int)avStreamType.video();
- break;
- }
- Status s = mTunerFilter->configureAvStreamType(type);
+ if (mTunerFilter != nullptr) {
+ Status s = mTunerFilter->configureAvStreamType(avStreamType);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter_1_1 != NULL) {
- return mFilter_1_1->configureAvStreamType(avStreamType);
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::start() {
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->start();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- return mFilter->start();
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::stop() {
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->stop();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- return mFilter->stop();
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::flush() {
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->flush();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- return mFilter->flush();
+ return Result::INVALID_STATE;
+}
+
+Result FilterClient::getId(int32_t& id) {
+ if (mTunerFilter != nullptr) {
+ Status s = mTunerFilter->getId(&id);
+ return ClientHelper::getServiceSpecificErrorCode(s);
}
return Result::INVALID_STATE;
}
-Result FilterClient::getId(uint32_t& id) {
- if (mTunerFilter != NULL) {
- int32_t id32Bit;
- Status s = mTunerFilter->getId(&id32Bit);
- id = static_cast<uint32_t>(id32Bit);
+Result FilterClient::getId64Bit(int64_t& id) {
+ if (mTunerFilter != nullptr) {
+ Status s = mTunerFilter->getId64Bit(&id);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- Result res;
- mFilter->getId([&](Result r, uint32_t filterId) {
- res = r;
- id = filterId;
- });
- return res;
- }
-
- return Result::INVALID_STATE;
-}
-
-Result FilterClient::getId64Bit(uint64_t& id) {
- if (mTunerFilter != NULL) {
- int64_t id64Bit;
- Status s = mTunerFilter->getId64Bit(&id64Bit);
- id = static_cast<uint64_t>(id64Bit);
- return ClientHelper::getServiceSpecificErrorCode(s);
- }
-
- if (mFilter_1_1 != NULL) {
- Result res;
- mFilter_1_1->getId64Bit([&](Result r, uint64_t filterId) {
- res = r;
- id = filterId;
- });
- return res;
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::releaseAvHandle(native_handle_t* handle, uint64_t avDataId) {
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->releaseAvHandle(makeToAidl(handle), avDataId);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- return mFilter->releaseAvHandle(hidl_handle(handle), avDataId);
- }
-
return Result::INVALID_STATE;
}
Result FilterClient::setDataSource(sp<FilterClient> filterClient){
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->setDataSource(filterClient->getAidlFilter());
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- sp<IFilter> sourceFilter = filterClient->getHalFilter();
- if (sourceFilter == NULL) {
- return Result::INVALID_ARGUMENT;
- }
- return mFilter->setDataSource(sourceFilter);
- }
-
return Result::INVALID_STATE;
}
@@ -277,648 +180,38 @@
if (mFilterMQEventFlag) {
EventFlag::deleteEventFlag(&mFilterMQEventFlag);
}
- mFilterMQEventFlag = NULL;
- mFilterMQ = NULL;
+ mFilterMQEventFlag = nullptr;
+ mFilterMQ = nullptr;
- if (mTunerFilter != NULL) {
+ if (mTunerFilter != nullptr) {
Status s = mTunerFilter->close();
closeAvSharedMemory();
- mTunerFilter = NULL;
+ mTunerFilter = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFilter != NULL) {
- Result res = mFilter->close();
- mFilter = NULL;
- mFilter_1_1 = NULL;
- closeAvSharedMemory();
- return res;
- }
-
return Result::INVALID_STATE;
}
-/////////////// IFilterCallback ///////////////////////
-
-HidlFilterCallback::HidlFilterCallback(sp<FilterClientCallback> filterClientCallback)
- : mFilterClientCallback(filterClientCallback) {}
-
-Return<void> HidlFilterCallback::onFilterStatus(const DemuxFilterStatus status) {
- if (mFilterClientCallback != NULL) {
- mFilterClientCallback->onFilterStatus(status);
- }
- return Void();
-}
-
-Return<void> HidlFilterCallback::onFilterEvent(const DemuxFilterEvent& filterEvent) {
- if (mFilterClientCallback != NULL) {
- mFilterClientCallback->onFilterEvent(filterEvent);
- }
- return Void();
-}
-
-Return<void> HidlFilterCallback::onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
- const DemuxFilterEventExt& filterEventExt) {
- if (mFilterClientCallback != NULL) {
- mFilterClientCallback->onFilterEvent_1_1(filterEvent, filterEventExt);
- }
- return Void();
-}
-
/////////////// TunerFilterCallback ///////////////////////
TunerFilterCallback::TunerFilterCallback(sp<FilterClientCallback> filterClientCallback)
: mFilterClientCallback(filterClientCallback) {}
-Status TunerFilterCallback::onFilterStatus(int status) {
- if (mFilterClientCallback != NULL) {
- mFilterClientCallback->onFilterStatus(static_cast<DemuxFilterStatus>(status));
+Status TunerFilterCallback::onFilterStatus(DemuxFilterStatus status) {
+ if (mFilterClientCallback != nullptr) {
+ mFilterClientCallback->onFilterStatus(status);
return Status::ok();
}
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
-Status TunerFilterCallback::onFilterEvent(const vector<TunerFilterEvent>& filterEvents) {
- if (mFilterClientCallback == NULL) {
- return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
+Status TunerFilterCallback::onFilterEvent(const vector<DemuxFilterEvent>& filterEvents) {
+ if (mFilterClientCallback != nullptr) {
+ mFilterClientCallback->onFilterEvent(filterEvents);
+ return Status::ok();
}
-
- if (filterEvents.size() == 0) {
- return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_ARGUMENT));
- }
-
- DemuxFilterEvent event;
- DemuxFilterEventExt eventExt;
- getHidlFilterEvent(filterEvents, event, eventExt);
- if (eventExt.events.size() > 0) {
- mFilterClientCallback->onFilterEvent_1_1(event, eventExt);
- } else {
- mFilterClientCallback->onFilterEvent(event);
- }
-
- return Status::ok();
-}
-
-/////////////// FilterClient Helper Methods ///////////////////////
-
-TunerFilterConfiguration FilterClient::getAidlFilterSettings(DemuxFilterSettings configure) {
- TunerFilterConfiguration config;
- switch (configure.getDiscriminator()) {
- case DemuxFilterSettings::hidl_discriminator::ts:
- return getAidlTsSettings(configure.ts());
- case DemuxFilterSettings::hidl_discriminator::mmtp:
- return getAidlMmtpSettings(configure.mmtp());
- case DemuxFilterSettings::hidl_discriminator::ip:
- return getAidlIpSettings(configure.ip());
- case DemuxFilterSettings::hidl_discriminator::tlv:
- return getAidlTlvSettings(configure.tlv());
- case DemuxFilterSettings::hidl_discriminator::alp:
- return getAidlAlpSettings(configure.alp());
- default:
- break;
- }
- ALOGE("Wrong DemuxFilterSettings union.");
- return config;
-}
-
-TunerFilterConfiguration FilterClient::getAidlTsSettings(DemuxTsFilterSettings ts) {
- TunerFilterConfiguration config;
- TunerFilterSettings filterSettings;
- switch (ts.filterSettings.getDiscriminator()) {
- case DemuxTsFilterSettings::FilterSettings::hidl_discriminator::av: {
- filterSettings.set<TunerFilterSettings::av>(
- getAidlAvSettings(ts.filterSettings.av()));
- break;
- }
- case DemuxTsFilterSettings::FilterSettings::hidl_discriminator::section: {
- filterSettings.set<TunerFilterSettings::section>(
- getAidlSectionSettings(ts.filterSettings.section()));
- break;
- }
- case DemuxTsFilterSettings::FilterSettings::hidl_discriminator::pesData: {
- filterSettings.set<TunerFilterSettings::pesData>(
- getAidlPesDataSettings(ts.filterSettings.pesData()));
- break;
- }
- case DemuxTsFilterSettings::FilterSettings::hidl_discriminator::record: {
- filterSettings.set<TunerFilterSettings::record>(
- getAidlRecordSettings(ts.filterSettings.record()));
- break;
- }
- default:
- filterSettings.set<TunerFilterSettings::nothing>(true);
- break;
- }
-
- TunerFilterTsConfiguration aidlTs{
- .tpid = static_cast<char16_t>(ts.tpid),
- .filterSettings = filterSettings,
- };
- config.set<TunerFilterConfiguration::ts>(aidlTs);
-
- return config;
-}
-
-TunerFilterConfiguration FilterClient::getAidlMmtpSettings(DemuxMmtpFilterSettings mmtp) {
- TunerFilterConfiguration config;
- TunerFilterSettings filterSettings;
- switch (mmtp.filterSettings.getDiscriminator()) {
- case DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::av: {
- filterSettings.set<TunerFilterSettings::av>(
- getAidlAvSettings(mmtp.filterSettings.av()));
- break;
- }
- case DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::section: {
- filterSettings.set<TunerFilterSettings::section>(
- getAidlSectionSettings(mmtp.filterSettings.section()));
- break;
- }
- case DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::pesData: {
- filterSettings.set<TunerFilterSettings::pesData>(
- getAidlPesDataSettings(mmtp.filterSettings.pesData()));
- break;
- }
- case DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::record: {
- filterSettings.set<TunerFilterSettings::record>(
- getAidlRecordSettings(mmtp.filterSettings.record()));
- break;
- }
- case DemuxMmtpFilterSettings::FilterSettings::hidl_discriminator::download: {
- filterSettings.set<TunerFilterSettings::download>(
- getAidlDownloadSettings(mmtp.filterSettings.download()));
- break;
- }
- default:
- filterSettings.set<TunerFilterSettings::nothing>(true);
- break;
- }
-
- TunerFilterMmtpConfiguration aidlMmtp{
- .mmtpPid = static_cast<char16_t>(mmtp.mmtpPid),
- .filterSettings = filterSettings,
- };
- config.set<TunerFilterConfiguration::mmtp>(aidlMmtp);
-
- return config;
-}
-
-TunerFilterConfiguration FilterClient::getAidlIpSettings(DemuxIpFilterSettings ip) {
- TunerFilterConfiguration config;
- TunerFilterSettings filterSettings;
- switch (ip.filterSettings.getDiscriminator()) {
- case DemuxIpFilterSettings::FilterSettings::hidl_discriminator::section: {
- filterSettings.set<TunerFilterSettings::section>(
- getAidlSectionSettings(ip.filterSettings.section()));
- break;
- }
- case DemuxIpFilterSettings::FilterSettings::hidl_discriminator::bPassthrough: {
- filterSettings.set<TunerFilterSettings::isPassthrough>(
- ip.filterSettings.bPassthrough());
- break;
- }
- default:
- filterSettings.set<TunerFilterSettings::nothing>(true);
- break;
- }
-
- TunerDemuxIpAddressSettings ipAddr{
- .srcPort = static_cast<char16_t>(ip.ipAddr.srcPort),
- .dstPort = static_cast<char16_t>(ip.ipAddr.dstPort),
- };
- getAidlIpAddress(ip.ipAddr, ipAddr.srcIpAddress, ipAddr.dstIpAddress);
-
- TunerFilterIpConfiguration aidlIp{
- .ipAddr = ipAddr,
- .filterSettings = filterSettings,
- };
- config.set<TunerFilterConfiguration::ip>(aidlIp);
-
- return config;
-}
-
-void FilterClient::getAidlIpAddress(DemuxIpAddress ipAddr,
- TunerDemuxIpAddress& srcIpAddress, TunerDemuxIpAddress& dstIpAddress) {
- switch (ipAddr.srcIpAddress.getDiscriminator()) {
- case DemuxIpAddress::SrcIpAddress::hidl_discriminator::v4: {
- int size = ipAddr.srcIpAddress.v4().size();
- srcIpAddress.isIpV6 = false;
- srcIpAddress.addr.resize(size);
- copy(&ipAddr.srcIpAddress.v4()[0], &ipAddr.srcIpAddress.v4()[size],
- srcIpAddress.addr.begin());
- break;
- }
- case DemuxIpAddress::SrcIpAddress::hidl_discriminator::v6: {
- int size = ipAddr.srcIpAddress.v6().size();
- srcIpAddress.isIpV6 = true;
- srcIpAddress.addr.resize(size);
- copy(&ipAddr.srcIpAddress.v6()[0], &ipAddr.srcIpAddress.v6()[size],
- srcIpAddress.addr.begin());
- break;
- }
- }
- switch (ipAddr.dstIpAddress.getDiscriminator()) {
- case DemuxIpAddress::DstIpAddress::hidl_discriminator::v4: {
- int size = ipAddr.dstIpAddress.v4().size();
- dstIpAddress.isIpV6 = false;
- dstIpAddress.addr.resize(size);
- copy(&ipAddr.dstIpAddress.v4()[0], &ipAddr.dstIpAddress.v4()[size],
- dstIpAddress.addr.begin());
- break;
- }
- case DemuxIpAddress::DstIpAddress::hidl_discriminator::v6: {
- int size = ipAddr.dstIpAddress.v6().size();
- dstIpAddress.isIpV6 = true;
- dstIpAddress.addr.resize(size);
- copy(&ipAddr.dstIpAddress.v6()[0], &ipAddr.dstIpAddress.v6()[size],
- dstIpAddress.addr.begin());
- break;
- }
- }
-}
-
-TunerFilterConfiguration FilterClient::getAidlTlvSettings(DemuxTlvFilterSettings tlv) {
- TunerFilterConfiguration config;
- TunerFilterSettings filterSettings;
- switch (tlv.filterSettings.getDiscriminator()) {
- case DemuxTlvFilterSettings::FilterSettings::hidl_discriminator::section: {
- filterSettings.set<TunerFilterSettings::section>(
- getAidlSectionSettings(tlv.filterSettings.section()));
- break;
- }
- case DemuxTlvFilterSettings::FilterSettings::hidl_discriminator::bPassthrough: {
- filterSettings.set<TunerFilterSettings::isPassthrough>(
- tlv.filterSettings.bPassthrough());
- break;
- }
- default:
- filterSettings.set<TunerFilterSettings::nothing>(true);
- break;
- }
-
- TunerFilterTlvConfiguration aidlTlv{
- .packetType = static_cast<int8_t>(tlv.packetType),
- .isCompressedIpPacket = tlv.isCompressedIpPacket,
- .filterSettings = filterSettings,
- };
- config.set<TunerFilterConfiguration::tlv>(aidlTlv);
-
- return config;
-}
-
-TunerFilterConfiguration FilterClient::getAidlAlpSettings(DemuxAlpFilterSettings alp) {
- TunerFilterConfiguration config;
- TunerFilterSettings filterSettings;
- switch (alp.filterSettings.getDiscriminator()) {
- case DemuxAlpFilterSettings::FilterSettings::hidl_discriminator::section: {
- filterSettings.set<TunerFilterSettings::section>(
- getAidlSectionSettings(alp.filterSettings.section()));
- break;
- }
- default:
- filterSettings.set<TunerFilterSettings::nothing>(true);
- break;
- }
-
- TunerFilterAlpConfiguration aidlAlp{
- .packetType = static_cast<int8_t>(alp.packetType),
- .lengthType = static_cast<int8_t>(alp.lengthType),
- .filterSettings = filterSettings,
- };
- config.set<TunerFilterConfiguration::alp>(aidlAlp);
-
- return config;
-}
-
-TunerFilterAvSettings FilterClient::getAidlAvSettings(DemuxFilterAvSettings hidlAv) {
- TunerFilterAvSettings aidlAv{
- .isPassthrough = hidlAv.isPassthrough,
- };
- return aidlAv;
-}
-
-TunerFilterSectionSettings FilterClient::getAidlSectionSettings(
- DemuxFilterSectionSettings hidlSection) {
- TunerFilterSectionSettings aidlSection;
-
- switch (hidlSection.condition.getDiscriminator()) {
- case DemuxFilterSectionSettings::Condition::hidl_discriminator::sectionBits: {
- TunerFilterSectionBits sectionBits;
- auto hidlSectionBits = hidlSection.condition.sectionBits();
- sectionBits.filter.resize(hidlSectionBits.filter.size());
- sectionBits.mask.resize(hidlSectionBits.mask.size());
- sectionBits.mode.resize(hidlSectionBits.mode.size());
- copy(hidlSectionBits.filter.begin(), hidlSectionBits.filter.end(),
- sectionBits.filter.begin());
- copy(hidlSectionBits.mask.begin(), hidlSectionBits.mask.end(),
- sectionBits.mask.begin());
- copy(hidlSectionBits.mode.begin(), hidlSectionBits.mode.end(),
- sectionBits.mode.begin());
- aidlSection.condition.set<TunerFilterSectionCondition::sectionBits>(sectionBits);
- break;
- }
- case DemuxFilterSectionSettings::Condition::hidl_discriminator::tableInfo: {
- TunerFilterSectionTableInfo tableInfo{
- .tableId = static_cast<char16_t>(hidlSection.condition.tableInfo().tableId),
- .version = static_cast<char16_t>(hidlSection.condition.tableInfo().version),
- };
- aidlSection.condition.set<TunerFilterSectionCondition::tableInfo>(tableInfo);
- break;
- }
- }
- aidlSection.isCheckCrc = hidlSection.isCheckCrc;
- aidlSection.isRepeat = hidlSection.isRepeat;
- aidlSection.isRaw = hidlSection.isRaw;
- return aidlSection;
-}
-
-TunerFilterPesDataSettings FilterClient::getAidlPesDataSettings(
- DemuxFilterPesDataSettings hidlPesData) {
- TunerFilterPesDataSettings aidlPesData{
- .streamId = static_cast<char16_t>(hidlPesData.streamId),
- .isRaw = hidlPesData.isRaw,
- };
- return aidlPesData;
-}
-
-TunerFilterRecordSettings FilterClient::getAidlRecordSettings(
- DemuxFilterRecordSettings hidlRecord) {
- TunerFilterScIndexMask mask;
- switch (hidlRecord.scIndexMask.getDiscriminator()) {
- case DemuxFilterRecordSettings::ScIndexMask::hidl_discriminator::sc: {
- mask.set<TunerFilterScIndexMask::sc>(hidlRecord.scIndexMask.sc());
- break;
- }
- case DemuxFilterRecordSettings::ScIndexMask::hidl_discriminator::scHevc: {
- mask.set<TunerFilterScIndexMask::scHevc>(hidlRecord.scIndexMask.scHevc());
- break;
- }
- default:
- break;
- }
- TunerFilterRecordSettings aidlRecord{
- .tsIndexMask = static_cast<int32_t>(hidlRecord.tsIndexMask),
- .scIndexType = static_cast<int32_t>(hidlRecord.scIndexType),
- .scIndexMask = mask,
- };
- return aidlRecord;
-}
-
-TunerFilterDownloadSettings FilterClient::getAidlDownloadSettings(
- DemuxFilterDownloadSettings hidlDownload) {
- TunerFilterDownloadSettings aidlDownload{
- .downloadId = static_cast<int32_t>(hidlDownload.downloadId),
- };
- return aidlDownload;
-}
-
-void TunerFilterCallback::getHidlFilterEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt) {
- switch (filterEvents[0].getTag()) {
- case TunerFilterEvent::media: {
- getHidlMediaEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::section: {
- getHidlSectionEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::pes: {
- getHidlPesEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::tsRecord: {
- getHidlTsRecordEvent(filterEvents, event, eventExt);
- break;
- }
- case TunerFilterEvent::mmtpRecord: {
- getHidlMmtpRecordEvent(filterEvents, event, eventExt);
- break;
- }
- case TunerFilterEvent::download: {
- getHidlDownloadEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::ipPayload: {
- getHidlIpPayloadEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::temi: {
- getHidlTemiEvent(filterEvents, event);
- break;
- }
- case TunerFilterEvent::monitor: {
- getHidlMonitorEvent(filterEvents, eventExt);
- break;
- }
- case TunerFilterEvent::startId: {
- getHidlRestartEvent(filterEvents, eventExt);
- break;
- }
- }
-}
-
-void TunerFilterCallback::getHidlMediaEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- hidl_handle handle = hidl_handle(makeFromAidl(filterEvents[i]
- .get<TunerFilterEvent::media>().avMemory));
- event.events[i].media({
- .avMemory = handle,
- .streamId = static_cast<DemuxStreamId>(filterEvents[i]
- .get<TunerFilterEvent::media>().streamId),
- .isPtsPresent = filterEvents[i]
- .get<TunerFilterEvent::media>().isPtsPresent,
- .pts = static_cast<uint64_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().pts),
- .dataLength = static_cast<uint32_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().dataLength),
- .offset = static_cast<uint32_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().offset),
- .isSecureMemory = filterEvents[i]
- .get<TunerFilterEvent::media>().isSecureMemory,
- .avDataId = static_cast<uint64_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().avDataId),
- .mpuSequenceNumber = static_cast<uint32_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().offset),
- .isPesPrivateData = filterEvents[i]
- .get<TunerFilterEvent::media>().isPesPrivateData,
- });
-
- if (filterEvents[i].get<TunerFilterEvent::media>().isAudioExtraMetaData) {
- event.events[i].media().extraMetaData.audio({
- .adFade = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.adFade),
- .adPan = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.adPan),
- .versionTextTag = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.versionTextTag),
- .adGainCenter = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.adGainCenter),
- .adGainFront = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.adGainFront),
- .adGainSurround = static_cast<uint8_t>(filterEvents[i]
- .get<TunerFilterEvent::media>().audio.adGainSurround),
- });
- } else {
- event.events[i].media().extraMetaData.noinit();
- }
- }
-}
-
-void TunerFilterCallback::getHidlSectionEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto section = filterEvents[i].get<TunerFilterEvent::section>();
- event.events[i].section({
- .tableId = static_cast<uint16_t>(section.tableId),
- .version = static_cast<uint16_t>(section.version),
- .sectionNum = static_cast<uint16_t>(section.sectionNum),
- .dataLength = static_cast<uint16_t>(section.dataLength),
- });
- }
-}
-
-void TunerFilterCallback::getHidlPesEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto pes = filterEvents[i].get<TunerFilterEvent::pes>();
- event.events[i].pes({
- .streamId = static_cast<DemuxStreamId>(pes.streamId),
- .dataLength = static_cast<uint16_t>(pes.dataLength),
- .mpuSequenceNumber = static_cast<uint32_t>(pes.mpuSequenceNumber),
- });
- }
-}
-
-void TunerFilterCallback::getHidlTsRecordEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt) {
- event.events.resize(filterEvents.size());
- eventExt.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto ts = filterEvents[i].get<TunerFilterEvent::tsRecord>();
- event.events[i].tsRecord({
- .tsIndexMask = static_cast<uint32_t>(ts.tsIndexMask),
- .byteNumber = static_cast<uint64_t>(ts.byteNumber),
- });
- event.events[i].tsRecord().pid.tPid(static_cast<DemuxTpid>(ts.pid));
-
- switch (ts.scIndexMask.getTag()) {
- case TunerFilterScIndexMask::sc: {
- event.events[i].tsRecord().scIndexMask.sc(
- ts.scIndexMask.get<TunerFilterScIndexMask::sc>());
- break;
- }
- case TunerFilterScIndexMask::scHevc: {
- event.events[i].tsRecord().scIndexMask.scHevc(
- ts.scIndexMask.get<TunerFilterScIndexMask::scHevc>());
- break;
- }
- default:
- break;
- }
-
- if (ts.isExtended) {
- eventExt.events[i].tsRecord({
- .pts = static_cast<uint64_t>(ts.pts),
- .firstMbInSlice = static_cast<uint32_t>(ts.firstMbInSlice),
- });
- } else {
- eventExt.events[i].noinit();
- }
- }
-}
-
-void TunerFilterCallback::getHidlMmtpRecordEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt) {
- event.events.resize(filterEvents.size());
- eventExt.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto mmtp = filterEvents[i].get<TunerFilterEvent::mmtpRecord>();
- event.events[i].mmtpRecord({
- .scHevcIndexMask = static_cast<uint32_t>(mmtp.scHevcIndexMask),
- .byteNumber = static_cast<uint64_t>(mmtp.byteNumber),
- });
-
- if (mmtp.isExtended) {
- eventExt.events[i].mmtpRecord({
- .pts = static_cast<uint64_t>(mmtp.pts),
- .mpuSequenceNumber = static_cast<uint32_t>(mmtp.mpuSequenceNumber),
- .firstMbInSlice = static_cast<uint32_t>(mmtp.firstMbInSlice),
- .tsIndexMask = static_cast<uint32_t>(mmtp.tsIndexMask),
- });
- } else {
- eventExt.events[i].noinit();
- }
- }
-}
-
-void TunerFilterCallback::getHidlDownloadEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto download = filterEvents[i].get<TunerFilterEvent::download>();
- event.events[i].download({
- .itemId = static_cast<uint32_t>(download.itemId),
- .mpuSequenceNumber = static_cast<uint32_t>(download.mpuSequenceNumber),
- .itemFragmentIndex = static_cast<uint32_t>(download.itemFragmentIndex),
- .lastItemFragmentIndex = static_cast<uint32_t>(download.lastItemFragmentIndex),
- .dataLength = static_cast<uint16_t>(download.dataLength),
- });
- }
-}
-
-void TunerFilterCallback::getHidlIpPayloadEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto ip = filterEvents[i].get<TunerFilterEvent::ipPayload>();
- event.events[i].ipPayload({
- .dataLength = static_cast<uint16_t>(ip.dataLength),
- });
- }
-}
-
-void TunerFilterCallback::getHidlTemiEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event) {
- event.events.resize(filterEvents.size());
- for (int i = 0; i < filterEvents.size(); i++) {
- auto temi = filterEvents[i].get<TunerFilterEvent::temi>();
- event.events[i].temi({
- .pts = static_cast<uint64_t>(temi.pts),
- .descrTag = static_cast<uint8_t>(temi.descrTag),
- });
- hidl_vec<uint8_t> descrData(temi.descrData.begin(), temi.descrData.end());
- event.events[i].temi().descrData = descrData;
- }
-}
-
-void TunerFilterCallback::getHidlMonitorEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEventExt& eventExt) {
- auto monitor = filterEvents[0].get<TunerFilterEvent::monitor>();
- eventExt.events.resize(1);
- DemuxFilterMonitorEvent monitorEvent;
- switch (monitor.getTag()) {
- case TunerFilterMonitorEvent::scramblingStatus: {
- monitorEvent.scramblingStatus(static_cast<ScramblingStatus>(monitor.scramblingStatus));
- eventExt.events[0].monitorEvent(monitorEvent);
- break;
- }
- case TunerFilterMonitorEvent::cid: {
- monitorEvent.cid(static_cast<uint32_t>(monitor.cid));
- eventExt.events[0].monitorEvent(monitorEvent);
- break;
- }
- }
-}
-
-void TunerFilterCallback::getHidlRestartEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEventExt& eventExt) {
- uint32_t startId = filterEvents[0].get<TunerFilterEvent::startId>();
- eventExt.events.resize(1);
- eventExt.events[0].startId(static_cast<uint32_t>(startId));
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
Result FilterClient::getFilterMq() {
@@ -931,39 +224,21 @@
if (mTunerFilter != NULL) {
Status s = mTunerFilter->getQueueDesc(&aidlMqDesc);
- res = ClientHelper::getServiceSpecificErrorCode(s);
- if (res == Result::SUCCESS) {
+ if (s.isOk()) {
mFilterMQ = new (nothrow) AidlMQ(aidlMqDesc, false/*resetPointer*/);
EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag);
}
- return res;
- }
-
- if (mFilter != NULL) {
- MQDescriptorSync<uint8_t> filterMQDesc;
- mFilter->getQueueDesc(
- [&](Result r, const MQDescriptorSync<uint8_t>& desc) {
- filterMQDesc = desc;
- res = r;
- });
- if (res == Result::SUCCESS) {
- AidlMQDesc aidlMQDesc;
- unsafeHidlToAidlMQDescriptor<uint8_t, int8_t, SynchronizedReadWrite>(
- filterMQDesc, &aidlMQDesc);
- mFilterMQ = new (nothrow) AidlMessageQueue(aidlMQDesc, false/*resetPointer*/);
- EventFlag::createEventFlag(mFilterMQ->getEventFlagWord(), &mFilterMQEventFlag);
- }
}
return res;
}
-int FilterClient::copyData(int8_t* buffer, int size) {
- if (mFilterMQ == NULL || mFilterMQEventFlag == NULL) {
+int64_t FilterClient::copyData(int8_t* buffer, int64_t size) {
+ if (mFilterMQ == nullptr || mFilterMQEventFlag == nullptr) {
return -1;
}
- int available = mFilterMQ->availableToRead();
+ int64_t available = mFilterMQ->availableToRead();
size = min(size, available);
if (mFilterMQ->read(buffer, size)) {
@@ -977,16 +252,18 @@
void FilterClient::checkIsMediaFilter(DemuxFilterType type) {
if (type.mainType == DemuxFilterMainType::MMTP) {
- if (type.subType.mmtpFilterType() == DemuxMmtpFilterType::AUDIO ||
- type.subType.mmtpFilterType() == DemuxMmtpFilterType::VIDEO) {
+ if (type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
+ DemuxMmtpFilterType::AUDIO ||
+ type.subType.get<DemuxFilterSubType::Tag::mmtpFilterType>() ==
+ DemuxMmtpFilterType::VIDEO) {
mIsMediaFilter = true;
return;
}
}
if (type.mainType == DemuxFilterMainType::TS) {
- if (type.subType.tsFilterType() == DemuxTsFilterType::AUDIO ||
- type.subType.tsFilterType() == DemuxTsFilterType::VIDEO) {
+ if (type.subType.get<DemuxFilterSubType::Tag::tsFilterType>() == DemuxTsFilterType::AUDIO ||
+ type.subType.get<DemuxFilterSubType::Tag::tsFilterType>() == DemuxTsFilterType::VIDEO) {
mIsMediaFilter = true;
return;
}
@@ -1001,15 +278,19 @@
return;
}
- if (configure.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::ts) {
- if (configure.ts().filterSettings.av().isPassthrough) {
+ if (configure.getTag() == DemuxFilterSettings::Tag::ts) {
+ if (configure.get<DemuxFilterSettings::Tag::ts>()
+ .filterSettings.get<DemuxTsFilterSettingsFilterSettings::Tag::av>()
+ .isPassthrough) {
mIsPassthroughFilter = true;
return;
}
}
- if (configure.getDiscriminator() == DemuxFilterSettings::hidl_discriminator::mmtp) {
- if (configure.mmtp().filterSettings.av().isPassthrough) {
+ if (configure.getTag() == DemuxFilterSettings::Tag::mmtp) {
+ if (configure.get<DemuxFilterSettings::Tag::mmtp>()
+ .filterSettings.get<DemuxMmtpFilterSettingsFilterSettings::Tag::av>()
+ .isPassthrough) {
mIsPassthroughFilter = true;
return;
}
@@ -1019,37 +300,28 @@
}
void FilterClient::handleAvShareMemory() {
- if (mAvSharedHandle != NULL) {
+ if (mAvSharedHandle != nullptr) {
return;
}
- if (mTunerFilter != NULL && mIsMediaFilter && !mIsPassthroughFilter) {
- TunerFilterSharedHandleInfo aidlHandleInfo;
- Status s = mTunerFilter->getAvSharedHandleInfo(&aidlHandleInfo);
- if (ClientHelper::getServiceSpecificErrorCode(s) == Result::SUCCESS) {
- mAvSharedHandle = native_handle_clone(makeFromAidl(aidlHandleInfo.handle));
- mAvSharedMemSize = aidlHandleInfo.size;
+ if (mTunerFilter != nullptr && mIsMediaFilter && !mIsPassthroughFilter) {
+ int64_t size;
+ NativeHandle avMemory;
+ Status s = mTunerFilter->getAvSharedHandle(&avMemory, &size);
+ if (s.isOk()) {
+ mAvSharedHandle = native_handle_clone(makeFromAidl(avMemory));
+ mAvSharedMemSize = size;
}
- return;
- }
-
- if (mFilter_1_1 != NULL && mIsMediaFilter && !mIsPassthroughFilter) {
- mFilter_1_1->getAvSharedHandle([&](Result r, hidl_handle avMemory, uint64_t avMemSize) {
- if (r == Result::SUCCESS) {
- mAvSharedHandle = native_handle_clone(avMemory.getNativeHandle());
- mAvSharedMemSize = avMemSize;
- }
- });
}
}
void FilterClient::closeAvSharedMemory() {
- if (mAvSharedHandle == NULL) {
+ if (mAvSharedHandle == nullptr) {
mAvSharedMemSize = 0;
return;
}
native_handle_close(mAvSharedHandle);
native_handle_delete(mAvSharedHandle);
mAvSharedMemSize = 0;
- mAvSharedHandle = NULL;
+ mAvSharedHandle = nullptr;
}
} // namespace android
diff --git a/media/jni/tuner/FilterClient.h b/media/jni/tuner/FilterClient.h
index 5d78bfd..136d1f5 100644
--- a/media/jni/tuner/FilterClient.h
+++ b/media/jni/tuner/FilterClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,64 +17,30 @@
#ifndef _ANDROID_MEDIA_TV_FILTER_CLIENT_H_
#define _ANDROID_MEDIA_TV_FILTER_CLIENT_H_
-#include <aidl/android/media/tv/tuner/ITunerFilter.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterType.h>
#include <aidl/android/media/tv/tuner/BnTunerFilterCallback.h>
-#include <aidl/android/media/tv/tuner/TunerFilterEvent.h>
-#include <aidl/android/media/tv/tuner/TunerFilterSettings.h>
-#include <aidlcommonsupport/NativeHandle.h>
-#include <android/hardware/tv/tuner/1.1/IFilter.h>
-#include <android/hardware/tv/tuner/1.1/IFilterCallback.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
+#include <aidl/android/media/tv/tuner/ITunerFilter.h>
#include <fmq/AidlMessageQueue.h>
-#include <fmq/MessageQueue.h>
#include "ClientHelper.h"
#include "FilterClientCallback.h"
using Status = ::ndk::ScopedAStatus;
+using ::aidl::android::hardware::common::fmq::MQDescriptor;
using ::aidl::android::hardware::common::fmq::SynchronizedReadWrite;
+using ::aidl::android::hardware::tv::tuner::AvStreamType;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterSettings;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterStatus;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterType;
using ::aidl::android::media::tv::tuner::BnTunerFilterCallback;
using ::aidl::android::media::tv::tuner::ITunerFilter;
-using ::aidl::android::media::tv::tuner::TunerDemuxIpAddress;
-using ::aidl::android::media::tv::tuner::TunerFilterAvSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterConfiguration;
-using ::aidl::android::media::tv::tuner::TunerFilterDownloadSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterEvent;
-using ::aidl::android::media::tv::tuner::TunerFilterPesDataSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterRecordSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterSectionSettings;
-using ::aidl::android::media::tv::tuner::TunerFilterSettings;
-
using ::android::hardware::EventFlag;
-using ::android::hardware::MessageQueue;
-using ::android::hardware::MQDescriptorSync;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::hidl_handle;
-using ::android::hardware::tv::tuner::V1_0::DemuxAlpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxMmtpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterAvSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterDownloadSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterPesDataSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterRecordSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSectionSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterType;
-using ::android::hardware::tv::tuner::V1_0::DemuxIpAddress;
-using ::android::hardware::tv::tuner::V1_0::DemuxIpFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxTlvFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::DemuxTsFilterSettings;
-using ::android::hardware::tv::tuner::V1_0::IFilter;
-using ::android::hardware::tv::tuner::V1_0::Result;
-using ::android::hardware::tv::tuner::V1_1::AvStreamType;
-using ::android::hardware::tv::tuner::V1_1::IFilterCallback;
using namespace std;
namespace android {
-using MQ = MessageQueue<uint8_t, kSynchronizedReadWrite>;
-using MQDesc = MQDescriptorSync<uint8_t>;
using AidlMQ = AidlMessageQueue<int8_t, SynchronizedReadWrite>;
using AidlMQDesc = MQDescriptor<int8_t, SynchronizedReadWrite>;
@@ -84,47 +50,10 @@
};
class TunerFilterCallback : public BnTunerFilterCallback {
-
public:
TunerFilterCallback(sp<FilterClientCallback> filterClientCallback);
- Status onFilterStatus(int status);
- Status onFilterEvent(const vector<TunerFilterEvent>& filterEvents);
-
-private:
- void getHidlFilterEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt);
- void getHidlMediaEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlSectionEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlPesEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlTsRecordEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt);
- void getHidlMmtpRecordEvent(const vector<TunerFilterEvent>& filterEvents,
- DemuxFilterEvent& event, DemuxFilterEventExt& eventExt);
- void getHidlDownloadEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlIpPayloadEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlTemiEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEvent& event);
- void getHidlMonitorEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEventExt& eventExt);
- void getHidlRestartEvent(
- const vector<TunerFilterEvent>& filterEvents, DemuxFilterEventExt& eventExt);
-
- sp<FilterClientCallback> mFilterClientCallback;
-};
-
-struct HidlFilterCallback : public IFilterCallback {
-
-public:
- HidlFilterCallback(sp<FilterClientCallback> filterClientCallback);
- virtual Return<void> onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
- const DemuxFilterEventExt& filterEventExt);
- virtual Return<void> onFilterEvent(const DemuxFilterEvent& filterEvent);
- virtual Return<void> onFilterStatus(const DemuxFilterStatus status);
+ Status onFilterStatus(DemuxFilterStatus status);
+ Status onFilterEvent(const vector<DemuxFilterEvent>& filterEvents);
private:
sp<FilterClientCallback> mFilterClientCallback;
@@ -136,15 +65,12 @@
FilterClient(DemuxFilterType type, shared_ptr<ITunerFilter> tunerFilter);
~FilterClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlFilter(sp<IFilter> filter);
-
/**
* Read size of data from filter FMQ into buffer.
*
* @return the actual reading size. -1 if failed to read.
*/
- int read(int8_t* buffer, int size);
+ int64_t read(int8_t* buffer, int64_t size);
/**
* Get the a/v shared memory handle information
@@ -159,12 +85,12 @@
/**
* Configure the monitor event of the Filter.
*/
- Result configureMonitorEvent(int monitorEventType);
+ Result configureMonitorEvent(int32_t monitorEventType);
/**
* Configure the context id of the IP Filter.
*/
- Result configureIpFilterContextId(int cid);
+ Result configureIpFilterContextId(int32_t cid);
/**
* Configure the stream type of the media Filter.
@@ -189,12 +115,12 @@
/**
* Get the 32-bit filter Id.
*/
- Result getId(uint32_t& id);
+ Result getId(int32_t& id);
/**
* Get the 64-bit filter Id.
*/
- Result getId64Bit(uint64_t& id);
+ Result getId64Bit(int64_t& id);
/**
* Release the handle reported by the HAL for AV memory.
@@ -207,11 +133,6 @@
Result setDataSource(sp<FilterClient> filterClient);
/**
- * Get the Hal filter to build up filter linkage.
- */
- sp<IFilter> getHalFilter() { return mFilter; }
-
- /**
* Get the Aidl filter to build up filter linkage.
*/
shared_ptr<ITunerFilter> getAidlFilter() { return mTunerFilter; }
@@ -222,24 +143,8 @@
Result close();
private:
- TunerFilterConfiguration getAidlFilterSettings(DemuxFilterSettings configure);
-
- TunerFilterConfiguration getAidlTsSettings(DemuxTsFilterSettings configure);
- TunerFilterConfiguration getAidlMmtpSettings(DemuxMmtpFilterSettings mmtp);
- TunerFilterConfiguration getAidlIpSettings(DemuxIpFilterSettings ip);
- TunerFilterConfiguration getAidlTlvSettings(DemuxTlvFilterSettings tlv);
- TunerFilterConfiguration getAidlAlpSettings(DemuxAlpFilterSettings alp);
-
- TunerFilterAvSettings getAidlAvSettings(DemuxFilterAvSettings hidlAv);
- TunerFilterSectionSettings getAidlSectionSettings(DemuxFilterSectionSettings hidlSection);
- TunerFilterPesDataSettings getAidlPesDataSettings(DemuxFilterPesDataSettings hidlPesData);
- TunerFilterRecordSettings getAidlRecordSettings(DemuxFilterRecordSettings hidlRecord);
- TunerFilterDownloadSettings getAidlDownloadSettings(DemuxFilterDownloadSettings hidlDownload);
-
- void getAidlIpAddress(DemuxIpAddress ipAddr,
- TunerDemuxIpAddress& srcIpAddress, TunerDemuxIpAddress& dstIpAddress);
Result getFilterMq();
- int copyData(int8_t* buffer, int size);
+ int64_t copyData(int8_t* buffer, int64_t size);
void checkIsMediaFilter(DemuxFilterType type);
void checkIsPassthroughFilter(DemuxFilterSettings configure);
void handleAvShareMemory();
@@ -251,22 +156,8 @@
*/
shared_ptr<ITunerFilter> mTunerFilter;
- /**
- * A 1.0 Filter HAL interface that is ready before migrating to the TunerFilter.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<IFilter> mFilter;
-
- /**
- * A 1.1 Filter HAL interface that is ready before migrating to the TunerFilter.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<::android::hardware::tv::tuner::V1_1::IFilter> mFilter_1_1;
-
- AidlMQ* mFilterMQ = NULL;
- EventFlag* mFilterMQEventFlag = NULL;
+ AidlMQ* mFilterMQ = nullptr;
+ EventFlag* mFilterMQEventFlag = nullptr;
native_handle_t* mAvSharedHandle;
uint64_t mAvSharedMemSize;
diff --git a/media/jni/tuner/FilterClientCallback.h b/media/jni/tuner/FilterClientCallback.h
index 94b7821..05e7ff0 100644
--- a/media/jni/tuner/FilterClientCallback.h
+++ b/media/jni/tuner/FilterClientCallback.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,20 +17,21 @@
#ifndef _ANDROID_MEDIA_TV_FILTER_CLIENT_CALLBACK_H_
#define _ANDROID_MEDIA_TV_FILTER_CLIENT_CALLBACK_H_
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterEvent;
-using ::android::hardware::tv::tuner::V1_0::DemuxFilterStatus;
-using ::android::hardware::tv::tuner::V1_1::DemuxFilterEventExt;
+#include <aidl/android/hardware/tv/tuner/DemuxFilterEvent.h>
+#include <aidl/android/hardware/tv/tuner/DemuxFilterStatus.h>
+#include <utils/RefBase.h>
+
+using ::aidl::android::hardware::tv::tuner::DemuxFilterEvent;
+using ::aidl::android::hardware::tv::tuner::DemuxFilterStatus;
using namespace std;
namespace android {
struct FilterClientCallback : public RefBase {
- virtual void onFilterEvent_1_1(const DemuxFilterEvent& filterEvent,
- const DemuxFilterEventExt& filterEventExt);
- virtual void onFilterEvent(const DemuxFilterEvent& filterEvent);
+ virtual void onFilterEvent(const vector<DemuxFilterEvent>& filterEvents);
virtual void onFilterStatus(const DemuxFilterStatus status);
};
} // namespace android
-#endif // _ANDROID_MEDIA_TV_FILTER_CLIENT_CALLBACK_H_
\ No newline at end of file
+#endif // _ANDROID_MEDIA_TV_FILTER_CLIENT_CALLBACK_H_
diff --git a/media/jni/tuner/FrontendClient.cpp b/media/jni/tuner/FrontendClient.cpp
index 5d9b12d..70309a0 100644
--- a/media/jni/tuner/FrontendClient.cpp
+++ b/media/jni/tuner/FrontendClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,1235 +16,168 @@
#define LOG_TAG "FrontendClient"
+#include "FrontendClient.h"
+
+#include <aidl/android/hardware/tv/tuner/Constant.h>
#include <android-base/logging.h>
#include <utils/Log.h>
-#include "FrontendClient.h"
-
-using ::aidl::android::media::tv::tuner::TunerFrontendScanAtsc3PlpInfo;
-using ::aidl::android::media::tv::tuner::TunerFrontendUnionSettings;
-
-using ::android::hardware::tv::tuner::V1_0::FrontendAnalogSifStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendAnalogType;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtscModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Bandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3Modulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendAtsc3TimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcAnnex;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbcSpectralInversion;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbsRolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtBandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtGuardInterval;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtHierarchy;
-using ::android::hardware::tv::tuner::V1_0::FrontendDvbtStandard;
-using ::android::hardware::tv::tuner::V1_0::FrontendInnerFec;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbsRolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Modulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbs3Rolloff;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtBandwidth;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtGuardInterval;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtMode;
-using ::android::hardware::tv::tuner::V1_0::FrontendIsdbtModulation;
-using ::android::hardware::tv::tuner::V1_0::FrontendModulationStatus;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanAtsc3PlpInfo;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatusAtsc3PlpInfo;
-using ::android::hardware::tv::tuner::V1_0::LnbVoltage;
-using ::android::hardware::tv::tuner::V1_1::Constant;
-using ::android::hardware::tv::tuner::V1_1::FrontendBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendCableTimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbGuardInterval;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbModulation;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTimeInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbTransmissionMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbcBandwidth;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbtConstellation;
-using ::android::hardware::tv::tuner::V1_1::FrontendDvbtTransmissionMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendGuardInterval;
-using ::android::hardware::tv::tuner::V1_1::FrontendInterleaveMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendModulation;
-using ::android::hardware::tv::tuner::V1_1::FrontendRollOff;
-using ::android::hardware::tv::tuner::V1_1::FrontendSpectralInversion;
-using ::android::hardware::tv::tuner::V1_1::FrontendTransmissionMode;
-using ::android::hardware::tv::tuner::V1_1::FrontendType;
+using ::aidl::android::hardware::tv::tuner::Constant;
namespace android {
-
/////////////// FrontendClient ///////////////////////
-
-FrontendClient::FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, int type) {
+FrontendClient::FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, FrontendType type) {
mTunerFrontend = tunerFrontend;
mType = type;
}
FrontendClient::~FrontendClient() {
- mTunerFrontend = NULL;
- mFrontend = NULL;
- mFrontend_1_1 = NULL;
- mId = -1;
- mType = -1;
+ mTunerFrontend = nullptr;
+ mType = FrontendType::UNDEFINED;
}
Result FrontendClient::setCallback(sp<FrontendClientCallback> frontendClientCallback) {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
shared_ptr<TunerFrontendCallback> aidlCallback =
::ndk::SharedRefBase::make<TunerFrontendCallback>(frontendClientCallback);
- aidlCallback->setFrontendType(mType);
Status s = mTunerFrontend->setCallback(aidlCallback);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- sp<HidlFrontendCallback> hidlCallback = new HidlFrontendCallback(frontendClientCallback);
- return mFrontend->setCallback(hidlCallback);
+ return Result::INVALID_STATE;
}
-void FrontendClient::setHidlFrontend(sp<IFrontend> frontend) {
- mFrontend = frontend;
- mFrontend_1_1 = ::android::hardware::tv::tuner::V1_1::IFrontend::castFrom(mFrontend);
-}
-
-// TODO: move after migration is done
-void FrontendClient::setId(int id) {
- mId = id;
-}
-
-Result FrontendClient::tune(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- if (mTunerFrontend != NULL) {
- TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
- Status s = mTunerFrontend->tune(tunerFeSettings);
+Result FrontendClient::tune(const FrontendSettings& settings) {
+ if (mTunerFrontend != nullptr) {
+ Status s = mTunerFrontend->tune(settings);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- Result result;
- if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
- result = mFrontend_1_1->tune_1_1(settings, settingsExt1_1);
- return result;
- }
-
- if (mFrontend != NULL) {
- result = mFrontend->tune(settings);
- return result;
- }
-
return Result::INVALID_STATE;
}
Result FrontendClient::stopTune() {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->stopTune();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend != NULL) {
- Result result = mFrontend->stopTune();
- return result;
- }
-
return Result::INVALID_STATE;
}
-Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- if (mTunerFrontend != NULL) {
- TunerFrontendSettings tunerFeSettings = getAidlFrontendSettings(settings, settingsExt1_1);
- Status s = mTunerFrontend->scan(tunerFeSettings, (int)type);
+Result FrontendClient::scan(const FrontendSettings& settings, FrontendScanType type) {
+ if (mTunerFrontend != nullptr) {
+ Status s = mTunerFrontend->scan(settings, type);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- Result result;
- if (mFrontend_1_1 != NULL && validateExtendedSettings(settingsExt1_1)) {
- result = mFrontend_1_1->scan_1_1(settings, type, settingsExt1_1);
- return result;
- }
-
- if (mFrontend != NULL) {
- result = mFrontend->scan(settings, type);
- return result;
- }
-
return Result::INVALID_STATE;
}
Result FrontendClient::stopScan() {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->stopScan();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend != NULL) {
- Result result = mFrontend->stopScan();
- return result;
- }
-
return Result::INVALID_STATE;
}
vector<FrontendStatus> FrontendClient::getStatus(vector<FrontendStatusType> statusTypes) {
vector<FrontendStatus> status;
- if (mTunerFrontend != NULL) {
- vector<TunerFrontendStatus> aidlStatus;
- vector<int> types;
- for (auto t : statusTypes) {
- types.push_back((int)t);
- }
- Status s = mTunerFrontend->getStatus(types, &aidlStatus);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return status;
- }
- return getHidlStatus(aidlStatus);
- }
-
- if (mFrontend != NULL && statusTypes.size() > 0) {
- Result res;
- mFrontend->getStatus(statusTypes,
- [&](Result r, const hidl_vec<FrontendStatus>& s) {
- res = r;
- status = s;
- });
- if (res != Result::SUCCESS) {
- status.clear();
- return status;
- }
- }
-
- return status;
-}
-
-vector<FrontendStatusExt1_1> FrontendClient::getStatusExtended_1_1(
- vector<FrontendStatusTypeExt1_1> statusTypes) {
- vector<FrontendStatusExt1_1> status;
-
- if (mTunerFrontend != NULL) {
- vector<TunerFrontendStatus> aidlStatus;
- vector<int> types;
- for (auto t : statusTypes) {
- types.push_back((int)t);
- }
- Status s = mTunerFrontend->getStatusExtended_1_1(types, &aidlStatus);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return status;
- }
- return getHidlStatusExt(aidlStatus);
- }
-
- if (mFrontend_1_1 != NULL && statusTypes.size() > 0) {
- Result res;
- mFrontend_1_1->getStatusExt1_1(statusTypes,
- [&](Result r, const hidl_vec<FrontendStatusExt1_1>& s) {
- res = r;
- status = s;
- });
- if (res != Result::SUCCESS) {
- status.clear();
- return status;
- }
+ if (mTunerFrontend != nullptr) {
+ mTunerFrontend->getStatus(statusTypes, &status);
}
return status;
}
Result FrontendClient::setLnb(sp<LnbClient> lnbClient) {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->setLnb(lnbClient->getAidlLnb());
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend != NULL) {
- Result result = mFrontend->setLnb(lnbClient->getId());
- return result;
- }
-
return Result::INVALID_STATE;
}
Result FrontendClient::setLna(bool bEnable) {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->setLna(bEnable);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend != NULL) {
- Result result = mFrontend->setLna(bEnable);
- return result;
- }
-
return Result::INVALID_STATE;
}
-int FrontendClient::linkCiCamToFrontend(int ciCamId) {
- int ltsId = (int)Constant::INVALID_LTS_ID;
+int32_t FrontendClient::linkCiCamToFrontend(int32_t ciCamId) {
+ int32_t ltsId = static_cast<int32_t>(Constant::INVALID_LTS_ID);
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->linkCiCamToFrontend(ciCamId, <sId);
- if (ClientHelper::getServiceSpecificErrorCode(s) == Result::SUCCESS) {
- return ltsId;
- }
- return (int)Constant::INVALID_LTS_ID;
- }
-
- if (mFrontend_1_1 != NULL) {
- Result res;
- mFrontend_1_1->linkCiCam(static_cast<uint32_t>(ciCamId),
- [&](Result r, uint32_t id) {
- res = r;
- ltsId = id;
- });
- if (res != Result::SUCCESS) {
- return (int)Constant::INVALID_LTS_ID;
+ if (!s.isOk()) {
+ return static_cast<int32_t>(Constant::INVALID_LTS_ID);
}
}
return ltsId;
}
-Result FrontendClient::unlinkCiCamToFrontend(int ciCamId) {
- if (mTunerFrontend != NULL) {
+Result FrontendClient::unlinkCiCamToFrontend(int32_t ciCamId) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->unlinkCiCamToFrontend(ciCamId);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend_1_1 != NULL) {
- return mFrontend_1_1->unlinkCiCam(static_cast<uint32_t>(ciCamId));
- }
-
return Result::INVALID_STATE;
}
Result FrontendClient::close() {
- if (mTunerFrontend != NULL) {
+ if (mTunerFrontend != nullptr) {
Status s = mTunerFrontend->close();
- mTunerFrontend = NULL;
+ mTunerFrontend = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mFrontend != NULL) {
- Result result = mFrontend->close();
- mFrontend = NULL;
- mFrontend_1_1 = NULL;
- return result;
- }
-
return Result::INVALID_STATE;
}
-/////////////// TunerFrontend Helper Methods ///////////////////////
-
shared_ptr<ITunerFrontend> FrontendClient::getAidlFrontend() {
return mTunerFrontend;
}
-int FrontendClient::getId() {
- if (mTunerFrontend != NULL) {
- Status s = mTunerFrontend->getFrontendId(&mId);
- if (ClientHelper::getServiceSpecificErrorCode(s) == Result::SUCCESS) {
- return mId;
- }
- ALOGE("Failed to getFrontendId from Tuner Frontend");
- return -1;
- }
-
- if (mFrontend != NULL) {
- return mId;
- }
-
- return -1;
-}
-
-vector<FrontendStatus> FrontendClient::getHidlStatus(vector<TunerFrontendStatus>& aidlStatus) {
- vector<FrontendStatus> hidlStatus;
- for (TunerFrontendStatus s : aidlStatus) {
- FrontendStatus status = FrontendStatus();
- switch (s.getTag()) {
- case TunerFrontendStatus::isDemodLocked: {
- status.isDemodLocked(s.get<TunerFrontendStatus::isDemodLocked>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::snr: {
- status.snr(s.get<TunerFrontendStatus::snr>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::ber: {
- status.ber((uint32_t)s.get<TunerFrontendStatus::ber>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::per: {
- status.per((uint32_t)s.get<TunerFrontendStatus::per>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::preBer: {
- status.preBer((uint32_t)s.get<TunerFrontendStatus::preBer>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::signalQuality: {
- status.signalQuality((uint32_t)s.get<TunerFrontendStatus::signalQuality>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::signalStrength: {
- status.signalStrength(s.get<TunerFrontendStatus::signalStrength>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::symbolRate: {
- status.symbolRate((uint32_t)s.get<TunerFrontendStatus::symbolRate>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::innerFec: {
- status.innerFec(static_cast<FrontendInnerFec>(
- s.get<TunerFrontendStatus::innerFec>()));
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::modulation: {
- auto aidlMod = s.get<TunerFrontendStatus::modulation>();
- FrontendModulationStatus modulation;
- switch (mType) {
- case (int)FrontendType::DVBC:
- modulation.dvbc(static_cast<FrontendDvbcModulation>(aidlMod));
- status.modulation(modulation);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DVBS:
- modulation.dvbs(static_cast<FrontendDvbsModulation>(aidlMod));
- status.modulation(modulation);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBS:
- modulation.isdbs(static_cast<FrontendIsdbsModulation>(aidlMod));
- status.modulation(modulation);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBS3:
- modulation.isdbs3(static_cast<FrontendIsdbs3Modulation>(aidlMod));
- status.modulation(modulation);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBT:
- modulation.isdbt(static_cast<FrontendIsdbtModulation>(aidlMod));
- status.modulation(modulation);
- hidlStatus.push_back(status);
- break;
- default:
- break;
- }
- break;
- }
- case TunerFrontendStatus::inversion: {
- status.inversion(static_cast<FrontendDvbcSpectralInversion>(
- s.get<TunerFrontendStatus::inversion>()));
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::lnbVoltage: {
- status.lnbVoltage(static_cast<LnbVoltage>(
- s.get<TunerFrontendStatus::lnbVoltage>()));
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::plpId: {
- status.plpId((uint8_t)s.get<TunerFrontendStatus::plpId>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isEWBS: {
- status.isEWBS(s.get<TunerFrontendStatus::isEWBS>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::agc: {
- status.agc((uint8_t)s.get<TunerFrontendStatus::agc>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isLnaOn: {
- status.isLnaOn(s.get<TunerFrontendStatus::isLnaOn>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isLayerError: {
- auto aidlE = s.get<TunerFrontendStatus::isLayerError>();
- hidl_vec<bool> e(aidlE.begin(), aidlE.end());
- status.isLayerError(e);
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::mer: {
- status.mer(s.get<TunerFrontendStatus::mer>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::freqOffset: {
- status.freqOffset(s.get<TunerFrontendStatus::freqOffset>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::hierarchy: {
- status.hierarchy(static_cast<FrontendDvbtHierarchy>(
- s.get<TunerFrontendStatus::hierarchy>()));
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isRfLocked: {
- status.isRfLocked(s.get<TunerFrontendStatus::isRfLocked>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::plpInfo: {
- int size = s.get<TunerFrontendStatus::plpInfo>().size();
- hidl_vec<FrontendStatusAtsc3PlpInfo> info(size);
- for (int i = 0; i < size; i++) {
- auto aidlInfo = s.get<TunerFrontendStatus::plpInfo>()[i];
- info[i] = {
- .plpId = (uint8_t)aidlInfo.plpId,
- .isLocked = aidlInfo.isLocked,
- .uec = (uint32_t)aidlInfo.uec,
- };
- }
- status.plpInfo(info);
- hidlStatus.push_back(status);
- break;
- }
- default:
- break;
+int32_t FrontendClient::getId() {
+ if (mTunerFrontend != nullptr) {
+ int32_t id;
+ Status s = mTunerFrontend->getFrontendId(&id);
+ if (s.isOk()) {
+ return id;
}
}
- return hidlStatus;
-}
-vector<FrontendStatusExt1_1> FrontendClient::getHidlStatusExt(
- vector<TunerFrontendStatus>& aidlStatus) {
- vector<FrontendStatusExt1_1> hidlStatus;
- for (TunerFrontendStatus s : aidlStatus) {
- FrontendStatusExt1_1 status;
- switch (s.getTag()) {
- case TunerFrontendStatus::modulations: {
- vector<FrontendModulation> ms;
- for (auto aidlMod : s.get<TunerFrontendStatus::modulations>()) {
- FrontendModulation m;
- switch (mType) {
- case (int)FrontendType::DVBC:
- m.dvbc(static_cast<FrontendDvbcModulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::DVBS:
- m.dvbs(static_cast<FrontendDvbsModulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::DVBT:
- m.dvbt(static_cast<FrontendDvbtConstellation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::ISDBS:
- m.isdbs(static_cast<FrontendIsdbsModulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::ISDBS3:
- m.isdbs3(static_cast<FrontendIsdbs3Modulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::ISDBT:
- m.isdbt(static_cast<FrontendIsdbtModulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::ATSC:
- m.atsc(static_cast<FrontendAtscModulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::ATSC3:
- m.atsc3(static_cast<FrontendAtsc3Modulation>(aidlMod));
- ms.push_back(m);
- break;
- case (int)FrontendType::DTMB:
- m.dtmb(static_cast<FrontendDtmbModulation>(aidlMod));
- ms.push_back(m);
- break;
- default:
- break;
- }
- }
- if (ms.size() > 0) {
- status.modulations(ms);
- hidlStatus.push_back(status);
- }
- break;
- }
- case TunerFrontendStatus::bers: {
- auto aidlB = s.get<TunerFrontendStatus::bers>();
- hidl_vec<uint32_t> b(aidlB.begin(), aidlB.end());
- status.bers(b);
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::codeRates: {
- vector<hardware::tv::tuner::V1_1::FrontendInnerFec> codeRates;
- for (auto aidlCodeRate : s.get<TunerFrontendStatus::codeRates>()) {
- codeRates.push_back(
- static_cast<hardware::tv::tuner::V1_1::FrontendInnerFec>(aidlCodeRate));
- }
- if (codeRates.size() > 0) {
- status.codeRates(codeRates);
- hidlStatus.push_back(status);
- }
- break;
- }
- case TunerFrontendStatus::bandwidth: {
- auto aidlBand = s.get<TunerFrontendStatus::bandwidth>();
- FrontendBandwidth band;
- switch (mType) {
- case (int)FrontendType::ATSC3:
- band.atsc3(static_cast<FrontendAtsc3Bandwidth>(aidlBand));
- status.bandwidth(band);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DVBC:
- band.dvbc(static_cast<FrontendDvbcBandwidth>(aidlBand));
- status.bandwidth(band);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DVBT:
- band.dvbt(static_cast<FrontendDvbtBandwidth>(aidlBand));
- status.bandwidth(band);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBT:
- band.isdbt(static_cast<FrontendIsdbtBandwidth>(aidlBand));
- status.bandwidth(band);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DTMB:
- band.dtmb(static_cast<FrontendDtmbBandwidth>(aidlBand));
- status.bandwidth(band);
- hidlStatus.push_back(status);
- break;
- default:
- break;
- }
- break;
- }
- case TunerFrontendStatus::interval: {
- auto aidlInter = s.get<TunerFrontendStatus::interval>();
- FrontendGuardInterval inter;
- switch (mType) {
- case (int)FrontendType::DVBT:
- inter.dvbt(static_cast<FrontendDvbtGuardInterval>(aidlInter));
- status.interval(inter);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBT:
- inter.isdbt(static_cast<FrontendIsdbtGuardInterval>(aidlInter));
- status.interval(inter);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DTMB:
- inter.dtmb(static_cast<FrontendDtmbGuardInterval>(aidlInter));
- status.interval(inter);
- hidlStatus.push_back(status);
- break;
- default:
- break;
- }
- break;
- }
- case TunerFrontendStatus::transmissionMode: {
- auto aidlTran = s.get<TunerFrontendStatus::transmissionMode>();
- FrontendTransmissionMode trans;
- switch (mType) {
- case (int)FrontendType::DVBT:
- trans.dvbt(static_cast<FrontendDvbtTransmissionMode>(aidlTran));
- status.transmissionMode(trans);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBT:
- trans.isdbt(static_cast<FrontendIsdbtMode>(aidlTran));
- status.transmissionMode(trans);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::DTMB:
- trans.dtmb(static_cast<FrontendDtmbTransmissionMode>(aidlTran));
- status.transmissionMode(trans);
- hidlStatus.push_back(status);
- break;
- default:
- break;
- }
- break;
- }
- case TunerFrontendStatus::uec: {
- status.uec((uint32_t)s.get<TunerFrontendStatus::uec>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::systemId: {
- status.systemId((uint16_t)s.get<TunerFrontendStatus::systemId>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::interleaving: {
- vector<FrontendInterleaveMode> modes;
- for (auto aidlInter : s.get<TunerFrontendStatus::interleaving>()) {
- FrontendInterleaveMode mode;
- switch (mType) {
- case (int)FrontendType::DVBC:
- mode.dvbc(static_cast<FrontendCableTimeInterleaveMode>(aidlInter));
- modes.push_back(mode);
- break;
- case (int)FrontendType::ATSC3:
- mode.atsc3(static_cast<FrontendAtsc3TimeInterleaveMode>(aidlInter));
- modes.push_back(mode);
- break;
- case (int)FrontendType::DTMB:
- mode.dtmb(static_cast<FrontendDtmbTimeInterleaveMode>(aidlInter));
- modes.push_back(mode);
- break;
- default:
- break;
- }
- }
- if (modes.size() > 0) {
- status.interleaving(modes);
- hidlStatus.push_back(status);
- }
- break;
- }
- case TunerFrontendStatus::isdbtSegment: {
- auto aidlSeg = s.get<TunerFrontendStatus::isdbtSegment>();
- hidl_vec<uint8_t> s(aidlSeg.begin(), aidlSeg.end());
- status.isdbtSegment(s);
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::tsDataRate: {
- auto aidlTs = s.get<TunerFrontendStatus::tsDataRate>();
- hidl_vec<uint32_t> ts(aidlTs.begin(), aidlTs.end());
- status.tsDataRate(ts);
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::rollOff: {
- auto aidlRoll = s.get<TunerFrontendStatus::rollOff>();
- FrontendRollOff roll;
- switch (mType) {
- case (int)FrontendType::DVBS:
- roll.dvbs(static_cast<FrontendDvbsRolloff>(aidlRoll));
- status.rollOff(roll);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBS:
- roll.isdbs(static_cast<FrontendIsdbsRolloff>(aidlRoll));
- status.rollOff(roll);
- hidlStatus.push_back(status);
- break;
- case (int)FrontendType::ISDBS3:
- roll.isdbs3(static_cast<FrontendIsdbs3Rolloff>(aidlRoll));
- status.rollOff(roll);
- hidlStatus.push_back(status);
- break;
- default:
- break;
- }
- break;
- }
- case TunerFrontendStatus::isMiso: {
- status.isMiso(s.get<TunerFrontendStatus::isMiso>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isLinear: {
- status.isLinear(s.get<TunerFrontendStatus::isLinear>());
- hidlStatus.push_back(status);
- break;
- }
- case TunerFrontendStatus::isShortFrames: {
- status.isShortFrames(s.get<TunerFrontendStatus::isShortFrames>());
- hidlStatus.push_back(status);
- break;
- }
- default:
- break;
- }
- }
- return hidlStatus;
-}
-
-TunerFrontendSettings FrontendClient::getAidlFrontendSettings(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- bool isExtended = validateExtendedSettings(settingsExt1_1);
- TunerFrontendSettings s{
- .isExtended = isExtended,
- .endFrequency = (int) settingsExt1_1.endFrequency,
- .inversion = (int) settingsExt1_1.inversion,
- };
-
- if (settingsExt1_1.settingExt.getDiscriminator()
- == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dtmb) {
- s.settings.set<TunerFrontendUnionSettings::dtmb>(getAidlDtmbSettings(settingsExt1_1));
- return s;
- }
-
- switch (settings.getDiscriminator()) {
- case FrontendSettings::hidl_discriminator::analog: {
- s.settings.set<TunerFrontendUnionSettings::analog>(
- getAidlAnalogSettings(settings, settingsExt1_1));
- break;
- }
- case FrontendSettings::hidl_discriminator::atsc: {
- s.settings.set<TunerFrontendUnionSettings::atsc>(getAidlAtscSettings(settings));
- break;
- }
- case FrontendSettings::hidl_discriminator::atsc3: {
- s.settings.set<TunerFrontendUnionSettings::atsc3>(getAidlAtsc3Settings(settings));
- break;
- }
- case FrontendSettings::hidl_discriminator::dvbs: {
- s.settings.set<TunerFrontendUnionSettings::dvbs>(
- getAidlDvbsSettings(settings, settingsExt1_1));
- break;
- }
- case FrontendSettings::hidl_discriminator::dvbc: {
- s.settings.set<TunerFrontendUnionSettings::cable>(
- getAidlCableSettings(settings, settingsExt1_1));
- break;
- }
- case FrontendSettings::hidl_discriminator::dvbt: {
- s.settings.set<TunerFrontendUnionSettings::dvbt>(
- getAidlDvbtSettings(settings, settingsExt1_1));
- break;
- }
- case FrontendSettings::hidl_discriminator::isdbs: {
- s.settings.set<TunerFrontendUnionSettings::isdbs>(getAidlIsdbsSettings(settings));
- break;
- }
- case FrontendSettings::hidl_discriminator::isdbs3: {
- s.settings.set<TunerFrontendUnionSettings::isdbs3>(getAidlIsdbs3Settings(settings));
- break;
- }
- case FrontendSettings::hidl_discriminator::isdbt: {
- s.settings.set<TunerFrontendUnionSettings::isdbt>(getAidlIsdbtSettings(settings));
- break;
- }
- default:
- break;
- }
- return s;
-}
-
-TunerFrontendAnalogSettings FrontendClient::getAidlAnalogSettings(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- TunerFrontendAnalogSettings analogSettings{
- .frequency = (int)settings.analog().frequency,
- .signalType = (int)settings.analog().type,
- .sifStandard = (int)settings.analog().sifStandard,
- };
- if (settingsExt1_1.settingExt.getDiscriminator()
- == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::analog) {
- analogSettings.isExtended = true;
- analogSettings.aftFlag = (int)settingsExt1_1.settingExt.analog().aftFlag;
- } else {
- analogSettings.isExtended = false;
- }
- return analogSettings;
-}
-
-TunerFrontendDvbsSettings FrontendClient::getAidlDvbsSettings(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- TunerFrontendDvbsSettings dvbsSettings{
- .frequency = (int)settings.dvbs().frequency,
- .modulation = (int)settings.dvbs().modulation,
- .codeRate = {
- .fec = (long)settings.dvbs().coderate.fec,
- .isLinear = settings.dvbs().coderate.isLinear,
- .isShortFrames = settings.dvbs().coderate.isShortFrames,
- .bitsPer1000Symbol = (int)settings.dvbs().coderate.bitsPer1000Symbol,
- },
- .symbolRate = (int)settings.dvbs().symbolRate,
- .rolloff = (int)settings.dvbs().rolloff,
- .pilot = (int)settings.dvbs().pilot,
- .inputStreamId = (int)settings.dvbs().inputStreamId,
- .standard = (int)settings.dvbs().standard,
- .vcm = (int)settings.dvbs().vcmMode,
- };
- if (settingsExt1_1.settingExt.getDiscriminator()
- == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbs) {
- dvbsSettings.isExtended = true;
- dvbsSettings.scanType = (int)settingsExt1_1.settingExt.dvbs().scanType;
- dvbsSettings.isDiseqcRxMessage = settingsExt1_1.settingExt.dvbs().isDiseqcRxMessage;
- } else {
- dvbsSettings.isExtended = false;
- }
- return dvbsSettings;
-}
-
-TunerFrontendCableSettings FrontendClient::getAidlCableSettings(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- TunerFrontendCableSettings cableSettings{
- .frequency = (int)settings.dvbc().frequency,
- .modulation = (int)settings.dvbc().modulation,
- .innerFec = (long)settings.dvbc().fec,
- .symbolRate = (int)settings.dvbc().symbolRate,
- .outerFec = (int)settings.dvbc().outerFec,
- .annex = (int)settings.dvbc().annex,
- .spectralInversion = (int)settings.dvbc().spectralInversion,
- };
- if (settingsExt1_1.settingExt.getDiscriminator()
- == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbc) {
- cableSettings.isExtended = true;
- cableSettings.interleaveMode = (int)settingsExt1_1.settingExt.dvbc().interleaveMode;
- cableSettings.bandwidth = (int)settingsExt1_1.settingExt.dvbc().bandwidth;
- } else {
- cableSettings.isExtended = false;
- }
- return cableSettings;
-}
-
-TunerFrontendDvbtSettings FrontendClient::getAidlDvbtSettings(const FrontendSettings& settings,
- const FrontendSettingsExt1_1& settingsExt1_1) {
- TunerFrontendDvbtSettings dvbtSettings{
- .frequency = (int)settings.dvbt().frequency,
- .transmissionMode = (int)settings.dvbt().transmissionMode,
- .bandwidth = (int)settings.dvbt().bandwidth,
- .constellation = (int)settings.dvbt().constellation,
- .hierarchy = (int)settings.dvbt().hierarchy,
- .hpCodeRate = (int)settings.dvbt().hpCoderate,
- .lpCodeRate = (int)settings.dvbt().lpCoderate,
- .guardInterval = (int)settings.dvbt().guardInterval,
- .isHighPriority = settings.dvbt().isHighPriority,
- .standard = (int)settings.dvbt().standard,
- .isMiso = settings.dvbt().isMiso,
- .plpMode = (int)settings.dvbt().plpMode,
- .plpId = (int)settings.dvbt().plpId,
- .plpGroupId = (int)settings.dvbt().plpGroupId,
- };
- if (settingsExt1_1.settingExt.getDiscriminator()
- == FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::dvbt) {
- dvbtSettings.isExtended = true;
- dvbtSettings.constellation = (int)settingsExt1_1.settingExt.dvbt().constellation;
- dvbtSettings.transmissionMode =
- (int)settingsExt1_1.settingExt.dvbt().transmissionMode;
- } else {
- dvbtSettings.isExtended = false;
- }
- return dvbtSettings;
-}
-
-TunerFrontendDtmbSettings FrontendClient::getAidlDtmbSettings(
- const FrontendSettingsExt1_1& settingsExt1_1) {
- TunerFrontendDtmbSettings dtmbSettings{
- .frequency = (int)settingsExt1_1.settingExt.dtmb().frequency,
- .transmissionMode = (int)settingsExt1_1.settingExt.dtmb().transmissionMode,
- .bandwidth = (int)settingsExt1_1.settingExt.dtmb().bandwidth,
- .modulation = (int)settingsExt1_1.settingExt.dtmb().modulation,
- .codeRate = (int)settingsExt1_1.settingExt.dtmb().codeRate,
- .guardInterval = (int)settingsExt1_1.settingExt.dtmb().guardInterval,
- .interleaveMode = (int)settingsExt1_1.settingExt.dtmb().interleaveMode,
- };
- return dtmbSettings;
-}
-
-TunerFrontendAtscSettings FrontendClient::getAidlAtscSettings(const FrontendSettings& settings) {
- TunerFrontendAtscSettings atscSettings{
- .frequency = (int)settings.atsc().frequency,
- .modulation = (int)settings.atsc().modulation,
- };
- return atscSettings;
-}
-
-TunerFrontendAtsc3Settings FrontendClient::getAidlAtsc3Settings(const FrontendSettings& settings) {
- TunerFrontendAtsc3Settings atsc3Settings{
- .frequency = (int)settings.atsc3().frequency,
- .bandwidth = (int)settings.atsc3().bandwidth,
- .demodOutputFormat = (int)settings.atsc3().demodOutputFormat,
- };
- atsc3Settings.plpSettings.resize(settings.atsc3().plpSettings.size());
- for (auto plpSetting : settings.atsc3().plpSettings) {
- atsc3Settings.plpSettings.push_back({
- .plpId = (int)plpSetting.plpId,
- .modulation = (int)plpSetting.modulation,
- .interleaveMode = (int)plpSetting.interleaveMode,
- .codeRate = (int)plpSetting.codeRate,
- .fec = (int)plpSetting.fec,
- });
- }
- return atsc3Settings;
-}
-
-TunerFrontendIsdbsSettings FrontendClient::getAidlIsdbsSettings(const FrontendSettings& settings) {
- TunerFrontendIsdbsSettings isdbsSettings{
- .frequency = (int)settings.isdbs().frequency,
- .streamId = (char16_t)settings.isdbs().streamId,
- .streamIdType = (int)settings.isdbs().streamIdType,
- .modulation = (int)settings.isdbs().modulation,
- .codeRate = (int)settings.isdbs().coderate,
- .symbolRate = (int)settings.isdbs().symbolRate,
- .rolloff = (int)settings.isdbs().rolloff,
- };
- return isdbsSettings;
-}
-
-TunerFrontendIsdbs3Settings FrontendClient::getAidlIsdbs3Settings(
- const FrontendSettings& settings) {
- TunerFrontendIsdbs3Settings isdbs3Settings{
- .frequency = (int)settings.isdbs3().frequency,
- .streamId = (char16_t)settings.isdbs3().streamId,
- .streamIdType = (int)settings.isdbs3().streamIdType,
- .modulation = (int)settings.isdbs3().modulation,
- .codeRate = (int)settings.isdbs3().coderate,
- .symbolRate = (int)settings.isdbs3().symbolRate,
- .rolloff = (int)settings.isdbs3().rolloff,
- };
- return isdbs3Settings;
-}
-
-TunerFrontendIsdbtSettings FrontendClient::getAidlIsdbtSettings(const FrontendSettings& settings) {
- TunerFrontendIsdbtSettings isdbtSettings{
- .frequency = (int)settings.isdbt().frequency,
- .modulation = (int)settings.isdbt().modulation,
- .bandwidth = (int)settings.isdbt().bandwidth,
- .mode = (int)settings.isdbt().mode,
- .codeRate = (int)settings.isdbt().coderate,
- .guardInterval = (int)settings.isdbt().guardInterval,
- .serviceAreaId = (int)settings.isdbt().serviceAreaId,
- };
- return isdbtSettings;
-}
-
-bool FrontendClient::validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1) {
- return settingsExt1_1.endFrequency != (uint32_t)Constant::INVALID_FRONTEND_SETTING_FREQUENCY
- || settingsExt1_1.inversion != FrontendSpectralInversion::UNDEFINED
- || settingsExt1_1.settingExt.getDiscriminator()
- != FrontendSettingsExt1_1::SettingsExt::hidl_discriminator::noinit;
-}
-
-/////////////// TunerFrontendCallback ///////////////////////
-
-TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
- : mFrontendClientCallback(frontendClientCallback) {}
-
-Status TunerFrontendCallback::onEvent(int frontendEventType) {
- if (mFrontendClientCallback != NULL) {
- mFrontendClientCallback->onEvent(static_cast<FrontendEventType>(frontendEventType));
- return Status::ok();
- }
- return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
-}
-
-Status TunerFrontendCallback::onScanMessage(int messageType,
- const TunerFrontendScanMessage& message) {
- if (mFrontendClientCallback != NULL) {
- if (!is1_1ExtendedScanMessage(messageType)) {
- mFrontendClientCallback->onScanMessage(
- static_cast<FrontendScanMessageType>(messageType),
- getHalScanMessage(messageType, message));
- } else {
- mFrontendClientCallback->onScanMessageExt1_1(
- static_cast<FrontendScanMessageTypeExt1_1>(messageType),
- getHalScanMessageExt1_1(messageType, message));
- }
- return Status::ok();
- }
- return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
+ return static_cast<int32_t>(Constant::INVALID_FRONTEND_ID);
}
/////////////// IFrontendCallback ///////////////////////
-
-HidlFrontendCallback::HidlFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
+TunerFrontendCallback::TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback)
: mFrontendClientCallback(frontendClientCallback) {}
-Return<void> HidlFrontendCallback::onEvent(FrontendEventType frontendEventType) {
- if (mFrontendClientCallback != NULL) {
+Status TunerFrontendCallback::onEvent(FrontendEventType frontendEventType) {
+ if (mFrontendClientCallback != nullptr) {
mFrontendClientCallback->onEvent(frontendEventType);
+ return Status::ok();
}
- return Void();
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
-Return<void> HidlFrontendCallback::onScanMessage(FrontendScanMessageType type,
- const FrontendScanMessage& message) {
- if (mFrontendClientCallback != NULL) {
- mFrontendClientCallback->onScanMessage(type, message);
+Status TunerFrontendCallback::onScanMessage(FrontendScanMessageType messageType,
+ const FrontendScanMessage& message) {
+ if (mFrontendClientCallback != nullptr) {
+ mFrontendClientCallback->onScanMessage(messageType, message);
+ return Status::ok();
}
- return Void();
+ return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
-Return<void> HidlFrontendCallback::onScanMessageExt1_1(FrontendScanMessageTypeExt1_1 type,
- const FrontendScanMessageExt1_1& message) {
- if (mFrontendClientCallback != NULL) {
- mFrontendClientCallback->onScanMessageExt1_1(type, message);
- }
- return Void();
-}
-
-/////////////// FrontendClientCallback Helper Methods ///////////////////////
-
-FrontendScanMessage TunerFrontendCallback::getHalScanMessage(
- int messageType, const TunerFrontendScanMessage& message) {
- FrontendScanMessage scanMessage;
- switch (messageType) {
- case (int) FrontendScanMessageType::LOCKED:
- scanMessage.isLocked(message.get<TunerFrontendScanMessage::isLocked>());
- break;
- case (int) FrontendScanMessageType::END:
- scanMessage.isEnd(message.get<TunerFrontendScanMessage::isEnd>());
- break;
- case (int) FrontendScanMessageType::PROGRESS_PERCENT:
- scanMessage.progressPercent(message.get<TunerFrontendScanMessage::progressPercent>());
- break;
- case (int) FrontendScanMessageType::FREQUENCY: {
- vector<int> f = message.get<TunerFrontendScanMessage::frequencies>();
- hidl_vec<uint32_t> frequencies(begin(f), end(f));
- scanMessage.frequencies(frequencies);
- break;
- }
- case (int) FrontendScanMessageType::SYMBOL_RATE: {
- vector<int> s = message.get<TunerFrontendScanMessage::symbolRates>();
- hidl_vec<uint32_t> symbolRates(begin(s), end(s));
- scanMessage.symbolRates(symbolRates);
- break;
- }
- case (int) FrontendScanMessageType::HIERARCHY:
- scanMessage.hierarchy(static_cast<FrontendDvbtHierarchy>(
- message.get<TunerFrontendScanMessage::hierarchy>()));
- break;
- case (int) FrontendScanMessageType::ANALOG_TYPE:
- scanMessage.analogType(static_cast<FrontendAnalogType>(
- message.get<TunerFrontendScanMessage::analogType>()));
- break;
- case (int) FrontendScanMessageType::PLP_IDS: {
- vector<uint8_t> p = message.get<TunerFrontendScanMessage::plpIds>();
- hidl_vec<uint8_t> plpIds(begin(p), end(p));
- scanMessage.plpIds(plpIds);
- break;
- }
- case (int) FrontendScanMessageType::GROUP_IDS: {
- vector<uint8_t> g = message.get<TunerFrontendScanMessage::groupIds>();
- hidl_vec<uint8_t> groupIds(begin(g), end(g));
- scanMessage.groupIds(groupIds);
- break;
- }
- case (int) FrontendScanMessageType::INPUT_STREAM_IDS: {
- vector<char16_t> i = message.get<TunerFrontendScanMessage::inputStreamIds>();
- hidl_vec<uint16_t> inputStreamIds(begin(i), end(i));
- scanMessage.inputStreamIds(inputStreamIds);
- break;
- }
- case (int) FrontendScanMessageType::STANDARD: {
- FrontendScanMessage::Standard std;
- int standard = message.get<TunerFrontendScanMessage::std>();
- switch (mType) {
- case (int) FrontendType::DVBS:
- std.sStd(static_cast<FrontendDvbsStandard>(standard));
- scanMessage.std(std);
- break;
- case (int) FrontendType::DVBT:
- std.tStd(static_cast<FrontendDvbtStandard>(standard));
- scanMessage.std(std);
- break;
- case (int) FrontendType::ANALOG:
- std.sifStd(static_cast<FrontendAnalogSifStandard>(standard));
- scanMessage.std(std);
- break;
- default:
- break;
- }
- break;
- }
- case (int) FrontendScanMessageType::ATSC3_PLP_INFO: {
- vector<TunerFrontendScanAtsc3PlpInfo> plp =
- message.get<TunerFrontendScanMessage::atsc3PlpInfos>();
- hidl_vec<FrontendScanAtsc3PlpInfo> plpInfo;
- int size = plp.size();
- plpInfo.resize(size);
- for (int i = 0; i < size; i++) {
- auto info = message.get<TunerFrontendScanMessage::atsc3PlpInfos>()[i];
- FrontendScanAtsc3PlpInfo p{
- .plpId = static_cast<uint8_t>(info.plpId),
- .bLlsFlag = info.llsFlag,
- };
- plpInfo[i] = p;
- }
- scanMessage.atsc3PlpInfos(plpInfo);
- break;
- }
- default:
- break;
- }
- return scanMessage;
-}
-
-FrontendScanMessageExt1_1 TunerFrontendCallback::getHalScanMessageExt1_1(
- int messageType, const TunerFrontendScanMessage& message) {
- FrontendScanMessageExt1_1 scanMessage;
- switch (messageType) {
- case (int) FrontendScanMessageTypeExt1_1::HIGH_PRIORITY:
- scanMessage.isHighPriority(message.get<TunerFrontendScanMessage::isHighPriority>());
- break;
- case (int) FrontendScanMessageTypeExt1_1::DVBC_ANNEX:
- scanMessage.annex(static_cast<FrontendDvbcAnnex>(
- message.get<TunerFrontendScanMessage::annex>()));
- break;
- case (int) FrontendScanMessageTypeExt1_1::MODULATION: {
- FrontendModulation m;
- int modulation = message.get<TunerFrontendScanMessage::modulation>();
- switch (mType) {
- case (int) FrontendType::DVBC:
- m.dvbc(static_cast<FrontendDvbcModulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::DVBS:
- m.dvbs(static_cast<FrontendDvbsModulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::DVBT:
- m.dvbt(static_cast<FrontendDvbtConstellation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::ISDBS:
- m.isdbs(static_cast<FrontendIsdbsModulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::ISDBS3:
- m.isdbs3(static_cast<FrontendIsdbs3Modulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::ISDBT:
- m.isdbt(static_cast<FrontendIsdbtModulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::ATSC:
- m.atsc(static_cast<FrontendAtscModulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) FrontendType::ATSC3:
- m.atsc3(static_cast<FrontendAtsc3Modulation>(modulation));
- scanMessage.modulation(m);
- break;
- case (int) hardware::tv::tuner::V1_1::FrontendType::DTMB:
- m.dtmb(static_cast<FrontendDtmbModulation>(modulation));
- scanMessage.modulation(m);
- break;
- default:
- break;
- }
- break;
- }
- default:
- break;
- }
- return scanMessage;
-}
-
-bool TunerFrontendCallback::is1_1ExtendedScanMessage(int messageType) {
- return messageType >= (int)FrontendScanMessageTypeExt1_1::MODULATION
- && messageType <= (int)FrontendScanMessageTypeExt1_1::HIGH_PRIORITY;
-}
} // namespace android
diff --git a/media/jni/tuner/FrontendClient.h b/media/jni/tuner/FrontendClient.h
index 1dd950e..08c0b20 100644
--- a/media/jni/tuner/FrontendClient.h
+++ b/media/jni/tuner/FrontendClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,53 +17,29 @@
#ifndef _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
#define _ANDROID_MEDIA_TV_FRONTEND_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/DemuxFilterSettings.h>
+#include <aidl/android/hardware/tv/tuner/FrontendType.h>
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <aidl/android/media/tv/tuner/BnTunerFrontendCallback.h>
#include <aidl/android/media/tv/tuner/ITunerFrontend.h>
-#include <android/hardware/tv/tuner/1.1/IFrontend.h>
-#include <android/hardware/tv/tuner/1.1/IFrontendCallback.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
+#include <utils/RefBase.h>
#include "ClientHelper.h"
#include "FrontendClientCallback.h"
#include "LnbClient.h"
using Status = ::ndk::ScopedAStatus;
-
+using ::aidl::android::hardware::tv::tuner::FrontendEventType;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessage;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessageType;
+using ::aidl::android::hardware::tv::tuner::FrontendScanType;
+using ::aidl::android::hardware::tv::tuner::FrontendSettings;
+using ::aidl::android::hardware::tv::tuner::FrontendStatus;
+using ::aidl::android::hardware::tv::tuner::FrontendStatusType;
+using ::aidl::android::hardware::tv::tuner::FrontendType;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::aidl::android::media::tv::tuner::BnTunerFrontendCallback;
using ::aidl::android::media::tv::tuner::ITunerFrontend;
-using ::aidl::android::media::tv::tuner::TunerFrontendAnalogSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendAtscSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendAtsc3Settings;
-using ::aidl::android::media::tv::tuner::TunerFrontendCableSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendDvbsSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendDvbtSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendDtmbSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendIsdbsSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendIsdbs3Settings;
-using ::aidl::android::media::tv::tuner::TunerFrontendIsdbtSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendScanMessage;
-using ::aidl::android::media::tv::tuner::TunerFrontendSettings;
-using ::aidl::android::media::tv::tuner::TunerFrontendStatus;
-
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::tv::tuner::V1_0::FrontendInfo;
-using ::android::hardware::tv::tuner::V1_0::FrontendEventType;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanType;
-using ::android::hardware::tv::tuner::V1_0::FrontendSettings;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatus;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatusType;
-using ::android::hardware::tv::tuner::V1_0::IFrontend;
-using ::android::hardware::tv::tuner::V1_0::Result;
-
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendSettingsExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendStatusExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendStatusTypeExt1_1;
-using ::android::hardware::tv::tuner::V1_1::IFrontendCallback;
using namespace std;
@@ -74,32 +50,8 @@
public:
TunerFrontendCallback(sp<FrontendClientCallback> frontendClientCallback);
- Status onEvent(int frontendEventType);
-
- Status onScanMessage(int messageType, const TunerFrontendScanMessage& message);
-
- void setFrontendType(int frontendType) { mType = frontendType; }
-
-private:
- FrontendScanMessage getHalScanMessage(int messageType, const TunerFrontendScanMessage& message);
- FrontendScanMessageExt1_1 getHalScanMessageExt1_1(int messageType,
- const TunerFrontendScanMessage& message);
- bool is1_1ExtendedScanMessage(int messageType);
-
- sp<FrontendClientCallback> mFrontendClientCallback;
- int mType;
-};
-
-struct HidlFrontendCallback : public IFrontendCallback {
-
-public:
- HidlFrontendCallback(sp<FrontendClientCallback> frontendClientCallback);
-
- virtual Return<void> onEvent(FrontendEventType frontendEventType);
- virtual Return<void> onScanMessage(
- FrontendScanMessageType type, const FrontendScanMessage& message);
- virtual Return<void> onScanMessageExt1_1(
- FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt);
+ Status onEvent(FrontendEventType frontendEventType);
+ Status onScanMessage(FrontendScanMessageType messageType, const FrontendScanMessage& message);
private:
sp<FrontendClientCallback> mFrontendClientCallback;
@@ -108,7 +60,7 @@
struct FrontendClient : public RefBase {
public:
- FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, int type);
+ FrontendClient(shared_ptr<ITunerFrontend> tunerFrontend, FrontendType type);
~FrontendClient();
/**
@@ -116,13 +68,10 @@
*/
Result setCallback(sp<FrontendClientCallback> frontendClientCallback);
- // TODO: remove after migration to Tuner Service is done.
- void setHidlFrontend(sp<IFrontend> frontend);
-
/**
* Tuner Frontend with Frontend Settings.
*/
- Result tune(const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
+ Result tune(const FrontendSettings& settings);
/**
* Stop tune Frontend.
@@ -132,8 +81,7 @@
/**
* Scan the frontend to use the settings given.
*/
- Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType,
- const FrontendSettingsExt1_1& settingsExt1_1);
+ Result scan(const FrontendSettings& settings, FrontendScanType frontendScanType);
/**
* Stop the previous scanning.
@@ -146,12 +94,6 @@
vector<FrontendStatus> getStatus(vector<FrontendStatusType> statusTypes);
/**
- * Gets the 1.1 extended statuses of the frontend.
- */
- vector<FrontendStatusExt1_1> getStatusExtended_1_1(
- vector<FrontendStatusTypeExt1_1> statusTypes);
-
- /**
* Sets Low-Noise Block downconverter (LNB) for satellite frontend.
*/
Result setLnb(sp<LnbClient> lnbClient);
@@ -166,68 +108,28 @@
*
* @return lts id
*/
- int linkCiCamToFrontend(int ciCamId);
+ int32_t linkCiCamToFrontend(int32_t ciCamId);
/**
* Unink Frontend to the cicam with given id.
*/
- Result unlinkCiCamToFrontend(int ciCamId);
+ Result unlinkCiCamToFrontend(int32_t ciCamId);
/**
* Close Frontend.
*/
Result close();
+ int32_t getId();
shared_ptr<ITunerFrontend> getAidlFrontend();
-
- void setId(int id);
- int getId();
-
private:
- vector<FrontendStatus> getHidlStatus(vector<TunerFrontendStatus>& aidlStatus);
- vector<FrontendStatusExt1_1> getHidlStatusExt(vector<TunerFrontendStatus>& aidlStatus);
-
- TunerFrontendSettings getAidlFrontendSettings(
- const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendAnalogSettings getAidlAnalogSettings(
- const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendDvbsSettings getAidlDvbsSettings(
- const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendCableSettings getAidlCableSettings(
- const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendDvbtSettings getAidlDvbtSettings(
- const FrontendSettings& settings, const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendDtmbSettings getAidlDtmbSettings(const FrontendSettingsExt1_1& settingsExt1_1);
- TunerFrontendAtscSettings getAidlAtscSettings(const FrontendSettings& settings);
- TunerFrontendAtsc3Settings getAidlAtsc3Settings(const FrontendSettings& settings);
- TunerFrontendIsdbsSettings getAidlIsdbsSettings(const FrontendSettings& settings);
- TunerFrontendIsdbs3Settings getAidlIsdbs3Settings(const FrontendSettings& settings);
- TunerFrontendIsdbtSettings getAidlIsdbtSettings(const FrontendSettings& settings);
-
- bool validateExtendedSettings(const FrontendSettingsExt1_1& settingsExt1_1);
-
/**
* An AIDL Tuner Frontend Singleton assigned at the first time when the Tuner Client
* opens a frontend cient. Default null when the service does not exist.
*/
shared_ptr<ITunerFrontend> mTunerFrontend;
- /**
- * A Frontend 1.0 HAL interface as a fall back interface when the Tuner Service does not exist.
- * This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
- * Default null.
- */
- sp<IFrontend> mFrontend;
-
- /**
- * A Frontend 1.1 HAL interface as a fall back interface when the Tuner Service does not exist.
- * This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
- * Default null.
- */
- sp<::android::hardware::tv::tuner::V1_1::IFrontend> mFrontend_1_1;
-
- int mId;
- int mType;
+ FrontendType mType;
};
} // namespace android
diff --git a/media/jni/tuner/FrontendClientCallback.h b/media/jni/tuner/FrontendClientCallback.h
index 94f8c40..15b08ef 100644
--- a/media/jni/tuner/FrontendClientCallback.h
+++ b/media/jni/tuner/FrontendClientCallback.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,11 +17,11 @@
#ifndef _ANDROID_MEDIA_TV_FRONTEND_CLIENT_CALLBACK_H_
#define _ANDROID_MEDIA_TV_FRONTEND_CLIENT_CALLBACK_H_
-using ::android::hardware::tv::tuner::V1_0::FrontendEventType;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessage;
-using ::android::hardware::tv::tuner::V1_0::FrontendScanMessageType;
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageExt1_1;
-using ::android::hardware::tv::tuner::V1_1::FrontendScanMessageTypeExt1_1;
+#include <utils/RefBase.h>
+
+using ::aidl::android::hardware::tv::tuner::FrontendEventType;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessage;
+using ::aidl::android::hardware::tv::tuner::FrontendScanMessageType;
using namespace std;
@@ -30,8 +30,6 @@
struct FrontendClientCallback : public RefBase {
virtual void onEvent(FrontendEventType frontendEventType);
virtual void onScanMessage(FrontendScanMessageType type, const FrontendScanMessage& message);
- virtual void onScanMessageExt1_1(
- FrontendScanMessageTypeExt1_1 type, const FrontendScanMessageExt1_1& messageExt);
};
} // namespace android
diff --git a/media/jni/tuner/LnbClient.cpp b/media/jni/tuner/LnbClient.cpp
index 073c49a..43198e3 100644
--- a/media/jni/tuner/LnbClient.cpp
+++ b/media/jni/tuner/LnbClient.cpp
@@ -21,148 +21,89 @@
#include "LnbClient.h"
-using ::android::hardware::tv::tuner::V1_0::Result;
-
namespace android {
/////////////// LnbClient ///////////////////////
-
LnbClient::LnbClient(shared_ptr<ITunerLnb> tunerLnb) {
mTunerLnb = tunerLnb;
- mId = -1;
}
LnbClient::~LnbClient() {
- mTunerLnb = NULL;
- mLnb = NULL;
- mId = -1;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-void LnbClient::setHidlLnb(sp<ILnb> lnb) {
- mLnb = lnb;
+ mTunerLnb = nullptr;
}
Result LnbClient::setCallback(sp<LnbClientCallback> cb) {
- if (mTunerLnb != NULL) {
+ if (mTunerLnb != nullptr) {
shared_ptr<TunerLnbCallback> aidlCallback =
::ndk::SharedRefBase::make<TunerLnbCallback>(cb);
Status s = mTunerLnb->setCallback(aidlCallback);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- sp<HidlLnbCallback> hidlCallback = new HidlLnbCallback(cb);
- return mLnb->setCallback(hidlCallback);
- }
-
return Result::INVALID_STATE;
}
Result LnbClient::setVoltage(LnbVoltage voltage) {
- if (mTunerLnb != NULL) {
- Status s = mTunerLnb->setVoltage((int)voltage);
+ if (mTunerLnb != nullptr) {
+ Status s = mTunerLnb->setVoltage(voltage);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- return mLnb->setVoltage(voltage);
- }
-
return Result::INVALID_STATE;
}
Result LnbClient::setTone(LnbTone tone) {
- if (mTunerLnb != NULL) {
- Status s = mTunerLnb->setTone((int)tone);
+ if (mTunerLnb != nullptr) {
+ Status s = mTunerLnb->setTone(tone);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- return mLnb->setTone(tone);
- }
-
return Result::INVALID_STATE;
}
Result LnbClient::setSatellitePosition(LnbPosition position) {
- if (mTunerLnb != NULL) {
- Status s = mTunerLnb->setSatellitePosition((int)position);
+ if (mTunerLnb != nullptr) {
+ Status s = mTunerLnb->setSatellitePosition(position);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- return mLnb->setSatellitePosition(position);
- }
-
return Result::INVALID_STATE;
}
Result LnbClient::sendDiseqcMessage(vector<uint8_t> diseqcMessage) {
- if (mTunerLnb != NULL) {
+ if (mTunerLnb != nullptr) {
Status s = mTunerLnb->sendDiseqcMessage(diseqcMessage);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- return mLnb->sendDiseqcMessage(diseqcMessage);
- }
-
return Result::INVALID_STATE;
}
Result LnbClient::close() {
- if (mTunerLnb != NULL) {
+ if (mTunerLnb != nullptr) {
Status s = mTunerLnb->close();
- mTunerLnb = NULL;
+ mTunerLnb = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mLnb != NULL) {
- Result res = mLnb->close();
- mLnb = NULL;
- return res;
- }
-
return Result::INVALID_STATE;
}
-/////////////// ILnbCallback ///////////////////////
-
-HidlLnbCallback::HidlLnbCallback(sp<LnbClientCallback> lnbClientCallback)
- : mLnbClientCallback(lnbClientCallback) {}
-
-Return<void> HidlLnbCallback::onEvent(const LnbEventType lnbEventType) {
- if (mLnbClientCallback != NULL) {
- mLnbClientCallback->onEvent(lnbEventType);
- }
- return Void();
-}
-
-Return<void> HidlLnbCallback::onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage) {
- if (mLnbClientCallback != NULL) {
- mLnbClientCallback->onDiseqcMessage(diseqcMessage);
- }
- return Void();
-}
-
/////////////// TunerLnbCallback ///////////////////////
-
TunerLnbCallback::TunerLnbCallback(sp<LnbClientCallback> lnbClientCallback)
: mLnbClientCallback(lnbClientCallback) {}
-Status TunerLnbCallback::onEvent(int lnbEventType) {
- if (mLnbClientCallback != NULL) {
- mLnbClientCallback->onEvent(static_cast<LnbEventType>(lnbEventType));
+Status TunerLnbCallback::onEvent(LnbEventType lnbEventType) {
+ if (mLnbClientCallback != nullptr) {
+ mLnbClientCallback->onEvent(lnbEventType);
return Status::ok();
}
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
}
Status TunerLnbCallback::onDiseqcMessage(const vector<uint8_t>& diseqcMessage) {
- if (mLnbClientCallback != NULL) {
- hidl_vec<uint8_t> msg(begin(diseqcMessage), end(diseqcMessage));
- mLnbClientCallback->onDiseqcMessage(msg);
+ if (mLnbClientCallback != nullptr) {
+ mLnbClientCallback->onDiseqcMessage(diseqcMessage);
return Status::ok();
}
return Status::fromServiceSpecificError(static_cast<int32_t>(Result::INVALID_STATE));
diff --git a/media/jni/tuner/LnbClient.h b/media/jni/tuner/LnbClient.h
index 7c6118c..86e3f67 100644
--- a/media/jni/tuner/LnbClient.h
+++ b/media/jni/tuner/LnbClient.h
@@ -17,31 +17,24 @@
#ifndef _ANDROID_MEDIA_TV_LNB_CLIENT_H_
#define _ANDROID_MEDIA_TV_LNB_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/LnbPosition.h>
+#include <aidl/android/hardware/tv/tuner/LnbTone.h>
+#include <aidl/android/hardware/tv/tuner/LnbVoltage.h>
#include <aidl/android/media/tv/tuner/BnTunerLnbCallback.h>
#include <aidl/android/media/tv/tuner/ITunerLnb.h>
-#include <android/hardware/tv/tuner/1.0/ILnb.h>
-#include <android/hardware/tv/tuner/1.0/ILnbCallback.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
+#include <utils/RefBase.h>
#include "ClientHelper.h"
#include "LnbClientCallback.h"
using Status = ::ndk::ScopedAStatus;
+using ::aidl::android::hardware::tv::tuner::LnbPosition;
+using ::aidl::android::hardware::tv::tuner::LnbTone;
+using ::aidl::android::hardware::tv::tuner::LnbVoltage;
using ::aidl::android::media::tv::tuner::BnTunerLnbCallback;
using ::aidl::android::media::tv::tuner::ITunerLnb;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::tv::tuner::V1_0::ILnb;
-using ::android::hardware::tv::tuner::V1_0::ILnbCallback;
-using ::android::hardware::tv::tuner::V1_0::LnbId;
-using ::android::hardware::tv::tuner::V1_0::LnbPosition;
-using ::android::hardware::tv::tuner::V1_0::LnbTone;
-using ::android::hardware::tv::tuner::V1_0::LnbVoltage;
-using ::android::hardware::tv::tuner::V1_0::Result;
-
using namespace std;
namespace android {
@@ -51,33 +44,19 @@
public:
TunerLnbCallback(sp<LnbClientCallback> lnbClientCallback);
- Status onEvent(int lnbEventType);
+ Status onEvent(LnbEventType lnbEventType);
Status onDiseqcMessage(const vector<uint8_t>& diseqcMessage);
private:
sp<LnbClientCallback> mLnbClientCallback;
};
-struct HidlLnbCallback : public ILnbCallback {
-
-public:
- HidlLnbCallback(sp<LnbClientCallback> lnbClientCallback);
- virtual Return<void> onEvent(const LnbEventType lnbEventType);
- virtual Return<void> onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage);
-
-private:
- sp<LnbClientCallback> mLnbClientCallback;
-};
-
struct LnbClient : public RefBase {
public:
LnbClient(shared_ptr<ITunerLnb> tunerLnb);
~LnbClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlLnb(sp<ILnb> lnb);
-
/**
* Set the lnb callback.
*/
@@ -109,8 +88,6 @@
Result close();
shared_ptr<ITunerLnb> getAidlLnb() { return mTunerLnb; }
- void setId(LnbId id) { mId = id; }
- LnbId getId() { return mId; }
private:
/**
@@ -118,15 +95,6 @@
* opens an Lnb. Default null when lnb is not opened.
*/
shared_ptr<ITunerLnb> mTunerLnb;
-
- /**
- * A Lnb HAL interface that is ready before migrating to the TunerLnb.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<ILnb> mLnb;
-
- LnbId mId;
};
} // namespace android
diff --git a/media/jni/tuner/LnbClientCallback.h b/media/jni/tuner/LnbClientCallback.h
index 253d7ef..612514f 100644
--- a/media/jni/tuner/LnbClientCallback.h
+++ b/media/jni/tuner/LnbClientCallback.h
@@ -17,8 +17,9 @@
#ifndef _ANDROID_MEDIA_TV_LNB_CLIENT_CALLBACK_H_
#define _ANDROID_MEDIA_TV_LNB_CLIENT_CALLBACK_H_
-using ::android::hardware::hidl_vec;
-using ::android::hardware::tv::tuner::V1_0::LnbEventType;
+#include <utils/RefBase.h>
+
+using ::aidl::android::hardware::tv::tuner::LnbEventType;
using namespace std;
@@ -26,8 +27,8 @@
struct LnbClientCallback : public RefBase {
virtual void onEvent(const LnbEventType lnbEventType);
- virtual void onDiseqcMessage(const hidl_vec<uint8_t>& diseqcMessage);
+ virtual void onDiseqcMessage(const vector<uint8_t>& diseqcMessage);
};
} // namespace android
-#endif // _ANDROID_MEDIA_TV_LNB_CLIENT_CALLBACK_H_
\ No newline at end of file
+#endif // _ANDROID_MEDIA_TV_LNB_CLIENT_CALLBACK_H_
diff --git a/media/jni/tuner/TimeFilterClient.cpp b/media/jni/tuner/TimeFilterClient.cpp
index e123c9f..40dba8b 100644
--- a/media/jni/tuner/TimeFilterClient.cpp
+++ b/media/jni/tuner/TimeFilterClient.cpp
@@ -16,14 +16,15 @@
#define LOG_TAG "TimeFilterClient"
+#include "TimeFilterClient.h"
+
+#include <aidl/android/hardware/tv/tuner/Constant64Bit.h>
#include <android-base/logging.h>
#include <utils/Log.h>
#include "ClientHelper.h"
-#include "TimeFilterClient.h"
-using ::android::hardware::tv::tuner::V1_0::Result;
-using ::android::hardware::tv::tuner::V1_1::Constant64Bit;
+using ::aidl::android::hardware::tv::tuner::Constant64Bit;
namespace android {
@@ -34,108 +35,60 @@
}
TimeFilterClient::~TimeFilterClient() {
- mTunerTimeFilter = NULL;
- mTimeFilter = NULL;
+ mTunerTimeFilter = nullptr;
}
-// TODO: remove after migration to Tuner Service is done.
-void TimeFilterClient::setHidlTimeFilter(sp<ITimeFilter> timeFilter) {
- mTimeFilter = timeFilter;
-}
-
-Result TimeFilterClient::setTimeStamp(long timeStamp) {
- if (mTunerTimeFilter != NULL) {
+Result TimeFilterClient::setTimeStamp(int64_t timeStamp) {
+ if (mTunerTimeFilter != nullptr) {
Status s = mTunerTimeFilter->setTimeStamp(timeStamp);
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mTimeFilter != NULL) {
- return mTimeFilter->setTimeStamp(timeStamp);
- }
-
return Result::INVALID_STATE;
}
Result TimeFilterClient::clearTimeStamp() {
- if (mTunerTimeFilter != NULL) {
+ if (mTunerTimeFilter != nullptr) {
Status s = mTunerTimeFilter->clearTimeStamp();
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mTimeFilter != NULL) {
- return mTimeFilter->clearTimeStamp();
- }
-
return Result::INVALID_STATE;
}
-long TimeFilterClient::getTimeStamp() {
- if (mTunerTimeFilter != NULL) {
+int64_t TimeFilterClient::getTimeStamp() {
+ if (mTunerTimeFilter != nullptr) {
int64_t timeStamp;
Status s = mTunerTimeFilter->getTimeStamp(&timeStamp);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ if (!s.isOk()) {
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
return timeStamp;
}
- if (mTimeFilter != NULL) {
- Result res;
- long timestamp;
- mTimeFilter->getTimeStamp(
- [&](Result r, uint64_t t) {
- res = r;
- timestamp = t;
- });
- if (res != Result::SUCCESS) {
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
- }
- return timestamp;
- }
-
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
-long TimeFilterClient::getSourceTime() {
- if (mTunerTimeFilter != NULL) {
+int64_t TimeFilterClient::getSourceTime() {
+ if (mTunerTimeFilter != nullptr) {
int64_t sourceTime;
Status s = mTunerTimeFilter->getTimeStamp(&sourceTime);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ if (!s.isOk()) {
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
return sourceTime;
}
- if (mTimeFilter != NULL) {
- Result res;
- long sourceTime;
- mTimeFilter->getSourceTime(
- [&](Result r, uint64_t t) {
- res = r;
- sourceTime = t;
- });
- if (res != Result::SUCCESS) {
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
- }
- return sourceTime;
- }
-
- return (long)Constant64Bit::INVALID_PRESENTATION_TIME_STAMP;
+ return static_cast<int64_t>(Constant64Bit::INVALID_PRESENTATION_TIME_STAMP);
}
Result TimeFilterClient::close() {
- if (mTunerTimeFilter != NULL) {
+ if (mTunerTimeFilter != nullptr) {
Status s = mTunerTimeFilter->close();
- mTunerTimeFilter = NULL;
+ mTunerTimeFilter = nullptr;
return ClientHelper::getServiceSpecificErrorCode(s);
}
- if (mTimeFilter != NULL) {
- Result res = mTimeFilter->close();
- mTimeFilter = NULL;
- return res;
- }
-
return Result::INVALID_STATE;
}
} // namespace android
diff --git a/media/jni/tuner/TimeFilterClient.h b/media/jni/tuner/TimeFilterClient.h
index 56ddd68..46f33be 100644
--- a/media/jni/tuner/TimeFilterClient.h
+++ b/media/jni/tuner/TimeFilterClient.h
@@ -17,18 +17,14 @@
#ifndef _ANDROID_MEDIA_TV_TIME_FILTER_CLIENT_H_
#define _ANDROID_MEDIA_TV_TIME_FILTER_CLIENT_H_
+#include <aidl/android/hardware/tv/tuner/Result.h>
#include <aidl/android/media/tv/tuner/ITunerTimeFilter.h>
-#include <android/hardware/tv/tuner/1.0/ITimeFilter.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
-
-using ::aidl::android::media::tv::tuner::ITunerTimeFilter;
+#include <utils/RefBase.h>
using Status = ::ndk::ScopedAStatus;
-using ::android::hardware::Return;
-using ::android::hardware::Void;
-using ::android::hardware::hidl_vec;
-using ::android::hardware::tv::tuner::V1_0::ITimeFilter;
-using ::android::hardware::tv::tuner::V1_0::Result;
+
+using ::aidl::android::hardware::tv::tuner::Result;
+using ::aidl::android::media::tv::tuner::ITunerTimeFilter;
using namespace std;
@@ -40,13 +36,10 @@
TimeFilterClient(shared_ptr<ITunerTimeFilter> tunerTimeFilter);
~TimeFilterClient();
- // TODO: remove after migration to Tuner Service is done.
- void setHidlTimeFilter(sp<ITimeFilter> timeFilter);
-
/**
* Set time stamp for time based filter.
*/
- Result setTimeStamp(long timeStamp);
+ Result setTimeStamp(int64_t timeStamp);
/**
* Clear the time stamp in the time filter.
@@ -56,12 +49,12 @@
/**
* Get the current time in the time filter.
*/
- long getTimeStamp();
+ int64_t getTimeStamp();
/**
* Get the time from the beginning of current data source.
*/
- long getSourceTime();
+ int64_t getSourceTime();
/**
* Releases the Time Filter instance.
@@ -74,13 +67,6 @@
* opens an TimeFilter. Default null when time filter is not opened.
*/
shared_ptr<ITunerTimeFilter> mTunerTimeFilter;
-
- /**
- * A TimeFilter HAL interface that is ready before migrating to the TunerTimeFilter.
- * This is a temprary interface before Tuner Framework migrates to use TunerService.
- * Default null when the HAL service does not exist.
- */
- sp<ITimeFilter> mTimeFilter;
};
} // namespace android
diff --git a/media/jni/tuner/TunerClient.cpp b/media/jni/tuner/TunerClient.cpp
index e05dba6..d19ee0d4 100644
--- a/media/jni/tuner/TunerClient.cpp
+++ b/media/jni/tuner/TunerClient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -22,31 +22,20 @@
#include "TunerClient.h"
-using ::aidl::android::media::tv::tuner::TunerFrontendCapabilities;
-using ::aidl::android::media::tv::tuner::TunerFrontendDtmbCapabilities;
-using ::android::hardware::tv::tuner::V1_0::FrontendId;
-using ::android::hardware::tv::tuner::V1_0::FrontendStatusType;
-using ::android::hardware::tv::tuner::V1_0::FrontendType;
+using ::aidl::android::hardware::tv::tuner::FrontendStatusType;
+using ::aidl::android::hardware::tv::tuner::FrontendType;
namespace android {
-sp<ITuner> TunerClient::mTuner;
-sp<::android::hardware::tv::tuner::V1_1::ITuner> TunerClient::mTuner_1_1;
shared_ptr<ITunerService> TunerClient::mTunerService;
-int TunerClient::mTunerVersion;
+int32_t TunerClient::mTunerVersion;
/////////////// TunerClient ///////////////////////
TunerClient::TunerClient() {
- // Get HIDL Tuner in migration stage.
- getHidlTuner();
- if (mTuner != NULL) {
- updateTunerResources();
- }
- // Connect with Tuner Service.
::ndk::SpAIBinder binder(AServiceManager_getService("media.tuner"));
mTunerService = ITunerService::fromBinder(binder);
- if (mTunerService == NULL) {
+ if (mTunerService == nullptr) {
ALOGE("Failed to get tuner service");
} else {
mTunerService->getTunerHalVersion(&mTunerVersion);
@@ -54,575 +43,124 @@
}
TunerClient::~TunerClient() {
- mTuner = NULL;
- mTuner_1_1 = NULL;
mTunerVersion = 0;
- mTunerService = NULL;
+ mTunerService = nullptr;
}
-vector<FrontendId> TunerClient::getFrontendIds() {
- vector<FrontendId> ids;
+vector<int32_t> TunerClient::getFrontendIds() {
+ vector<int32_t> ids;
- if (mTunerService != NULL) {
- vector<int32_t> v;
- Status s = mTunerService->getFrontendIds(&v);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS || v.size() == 0) {
+ if (mTunerService != nullptr) {
+ Status s = mTunerService->getFrontendIds(&ids);
+ if (!s.isOk()) {
ids.clear();
- return ids;
}
- for (int32_t id : v) {
- ids.push_back(static_cast<FrontendId>(id));
- }
- return ids;
- }
-
- if (mTuner != NULL) {
- Result res;
- mTuner->getFrontendIds([&](Result r, const hardware::hidl_vec<FrontendId>& frontendIds) {
- res = r;
- ids = frontendIds;
- });
- if (res != Result::SUCCESS || ids.size() == 0) {
- ALOGW("Frontend ids not available");
- ids.clear();
- return ids;
- }
- return ids;
}
return ids;
}
-
-sp<FrontendClient> TunerClient::openFrontend(int frontendHandle) {
- if (mTunerService != NULL) {
+sp<FrontendClient> TunerClient::openFrontend(int32_t frontendHandle) {
+ if (mTunerService != nullptr) {
shared_ptr<ITunerFrontend> tunerFrontend;
Status s = mTunerService->openFrontend(frontendHandle, &tunerFrontend);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS
- || tunerFrontend == NULL) {
- return NULL;
+ if (!s.isOk() || tunerFrontend == nullptr) {
+ return nullptr;
}
- int id;
+ int32_t id;
s = tunerFrontend->getFrontendId(&id);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ tunerFrontend->close();
+ return nullptr;
}
- TunerFrontendInfo aidlFrontendInfo;
- s = mTunerService->getFrontendInfo(id, &aidlFrontendInfo);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ FrontendInfo frontendInfo;
+ s = mTunerService->getFrontendInfo(id, &frontendInfo);
+ if (!s.isOk()) {
+ tunerFrontend->close();
+ return nullptr;
}
- return new FrontendClient(tunerFrontend, aidlFrontendInfo.type);
+ return new FrontendClient(tunerFrontend, frontendInfo.type);
}
- if (mTuner != NULL) {
- int id = getResourceIdFromHandle(frontendHandle, FRONTEND);
- sp<IFrontend> hidlFrontend = openHidlFrontendById(id);
- if (hidlFrontend != NULL) {
- FrontendInfo hidlInfo;
- Result res = getHidlFrontendInfo(id, hidlInfo);
- if (res != Result::SUCCESS) {
- return NULL;
- }
- sp<FrontendClient> frontendClient = new FrontendClient(
- NULL, (int)hidlInfo.type);
- frontendClient->setHidlFrontend(hidlFrontend);
- frontendClient->setId(id);
- return frontendClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
-shared_ptr<FrontendInfo> TunerClient::getFrontendInfo(int id) {
- if (mTunerService != NULL) {
- TunerFrontendInfo aidlFrontendInfo;
+shared_ptr<FrontendInfo> TunerClient::getFrontendInfo(int32_t id) {
+ if (mTunerService != nullptr) {
+ FrontendInfo aidlFrontendInfo;
Status s = mTunerService->getFrontendInfo(id, &aidlFrontendInfo);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
- return make_shared<FrontendInfo>(frontendInfoAidlToHidl(aidlFrontendInfo));
+ return make_shared<FrontendInfo>(aidlFrontendInfo);
}
- if (mTuner != NULL) {
- FrontendInfo hidlInfo;
- Result res = getHidlFrontendInfo(id, hidlInfo);
- if (res != Result::SUCCESS) {
- return NULL;
- }
- return make_shared<FrontendInfo>(hidlInfo);
- }
-
- return NULL;
+ return nullptr;
}
-shared_ptr<FrontendDtmbCapabilities> TunerClient::getFrontendDtmbCapabilities(int id) {
- if (mTunerService != NULL) {
- TunerFrontendDtmbCapabilities dtmbCaps;
- Status s = mTunerService->getFrontendDtmbCapabilities(id, &dtmbCaps);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
- }
- FrontendDtmbCapabilities hidlCaps{
- .transmissionModeCap = static_cast<uint32_t>(dtmbCaps.transmissionModeCap),
- .bandwidthCap = static_cast<uint32_t>(dtmbCaps.bandwidthCap),
- .modulationCap = static_cast<uint32_t>(dtmbCaps.modulationCap),
- .codeRateCap = static_cast<uint32_t>(dtmbCaps.codeRateCap),
- .guardIntervalCap = static_cast<uint32_t>(dtmbCaps.guardIntervalCap),
- .interleaveModeCap = static_cast<uint32_t>(dtmbCaps.interleaveModeCap),
- };
- return make_shared<FrontendDtmbCapabilities>(hidlCaps);
- }
-
- if (mTuner_1_1 != NULL) {
- Result result;
- FrontendDtmbCapabilities dtmbCaps;
- mTuner_1_1->getFrontendDtmbCapabilities(id,
- [&](Result r, const FrontendDtmbCapabilities& caps) {
- dtmbCaps = caps;
- result = r;
- });
- if (result == Result::SUCCESS) {
- return make_shared<FrontendDtmbCapabilities>(dtmbCaps);
- }
- }
-
- return NULL;
-}
-
-sp<DemuxClient> TunerClient::openDemux(int demuxHandle) {
- if (mTunerService != NULL) {
+sp<DemuxClient> TunerClient::openDemux(int32_t demuxHandle) {
+ if (mTunerService != nullptr) {
shared_ptr<ITunerDemux> tunerDemux;
Status s = mTunerService->openDemux(demuxHandle, &tunerDemux);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
return new DemuxClient(tunerDemux);
}
- if (mTuner != NULL) {
- sp<DemuxClient> demuxClient = new DemuxClient(NULL);
- int demuxId;
- sp<IDemux> hidlDemux = openHidlDemux(demuxId);
- if (hidlDemux != NULL) {
- demuxClient->setHidlDemux(hidlDemux);
- demuxClient->setId(demuxId);
- return demuxClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
shared_ptr<DemuxCapabilities> TunerClient::getDemuxCaps() {
- if (mTunerService != NULL) {
- TunerDemuxCapabilities aidlCaps;
+ if (mTunerService != nullptr) {
+ DemuxCapabilities aidlCaps;
Status s = mTunerService->getDemuxCaps(&aidlCaps);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
- return make_shared<DemuxCapabilities>(getHidlDemuxCaps(aidlCaps));
+ return make_shared<DemuxCapabilities>(aidlCaps);
}
- if (mTuner != NULL) {
- Result res;
- DemuxCapabilities caps;
- mTuner->getDemuxCaps([&](Result r, const DemuxCapabilities& demuxCaps) {
- caps = demuxCaps;
- res = r;
- });
- if (res == Result::SUCCESS) {
- return make_shared<DemuxCapabilities>(caps);
- }
- }
-
- return NULL;
+ return nullptr;
}
-sp<DescramblerClient> TunerClient::openDescrambler(int descramblerHandle) {
- if (mTunerService != NULL) {
+sp<DescramblerClient> TunerClient::openDescrambler(int32_t descramblerHandle) {
+ if (mTunerService != nullptr) {
shared_ptr<ITunerDescrambler> tunerDescrambler;
Status s = mTunerService->openDescrambler(descramblerHandle, &tunerDescrambler);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
return new DescramblerClient(tunerDescrambler);
}
- if (mTuner != NULL) {
- sp<DescramblerClient> descramblerClient = new DescramblerClient(NULL);
- sp<IDescrambler> hidlDescrambler = openHidlDescrambler();
- if (hidlDescrambler != NULL) {
- descramblerClient->setHidlDescrambler(hidlDescrambler);
- return descramblerClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
-sp<LnbClient> TunerClient::openLnb(int lnbHandle) {
- if (mTunerService != NULL) {
+sp<LnbClient> TunerClient::openLnb(int32_t lnbHandle) {
+ if (mTunerService != nullptr) {
shared_ptr<ITunerLnb> tunerLnb;
Status s = mTunerService->openLnb(lnbHandle, &tunerLnb);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
return new LnbClient(tunerLnb);
}
- if (mTuner != NULL) {
- int id = getResourceIdFromHandle(lnbHandle, LNB);
- sp<LnbClient> lnbClient = new LnbClient(NULL);
- sp<ILnb> hidlLnb = openHidlLnbById(id);
- if (hidlLnb != NULL) {
- lnbClient->setHidlLnb(hidlLnb);
- lnbClient->setId(id);
- return lnbClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
sp<LnbClient> TunerClient::openLnbByName(string lnbName) {
- if (mTunerService != NULL) {
+ if (mTunerService != nullptr) {
shared_ptr<ITunerLnb> tunerLnb;
Status s = mTunerService->openLnbByName(lnbName, &tunerLnb);
- if (ClientHelper::getServiceSpecificErrorCode(s) != Result::SUCCESS) {
- return NULL;
+ if (!s.isOk()) {
+ return nullptr;
}
return new LnbClient(tunerLnb);
}
- if (mTuner != NULL) {
- sp<LnbClient> lnbClient = new LnbClient(NULL);
- LnbId id;
- sp<ILnb> hidlLnb = openHidlLnbByName(lnbName, id);
- if (hidlLnb != NULL) {
- lnbClient->setHidlLnb(hidlLnb);
- lnbClient->setId(id);
- return lnbClient;
- }
- }
-
- return NULL;
+ return nullptr;
}
-/////////////// TunerClient Helper Methods ///////////////////////
-
-void TunerClient::updateTunerResources() {
- if (mTuner == NULL) {
- return;
- }
-
- // Connect with Tuner Resource Manager.
- ::ndk::SpAIBinder binder(AServiceManager_getService("tv_tuner_resource_mgr"));
- mTunerResourceManager = ITunerResourceManager::fromBinder(binder);
-
- updateFrontendResources();
- updateLnbResources();
- // TODO: update Demux, Descrambler.
-}
-
-// TODO: remove after migration to Tuner Service is done.
-void TunerClient::updateFrontendResources() {
- vector<FrontendId> ids = getFrontendIds();
- if (ids.size() == 0) {
- return;
- }
- vector<TunerFrontendInfo> infos;
- for (int i = 0; i < ids.size(); i++) {
- shared_ptr<FrontendInfo> frontendInfo = getFrontendInfo((int)ids[i]);
- if (frontendInfo == NULL) {
- continue;
- }
- TunerFrontendInfo tunerFrontendInfo{
- .handle = getResourceHandleFromId((int)ids[i], FRONTEND),
- .type = static_cast<int>(frontendInfo->type),
- .exclusiveGroupId = static_cast<int>(frontendInfo->exclusiveGroupId),
- };
- infos.push_back(tunerFrontendInfo);
- }
- mTunerResourceManager->setFrontendInfoList(infos);
-}
-
-void TunerClient::updateLnbResources() {
- vector<int> handles = getLnbHandles();
- if (handles.size() == 0) {
- return;
- }
- mTunerResourceManager->setLnbInfoList(handles);
-}
-
-sp<ITuner> TunerClient::getHidlTuner() {
- if (mTuner == NULL) {
- mTunerVersion = TUNER_HAL_VERSION_UNKNOWN;
- mTuner_1_1 = ::android::hardware::tv::tuner::V1_1::ITuner::getService();
-
- if (mTuner_1_1 == NULL) {
- ALOGW("Failed to get tuner 1.1 service.");
- mTuner = ITuner::getService();
- if (mTuner == NULL) {
- ALOGW("Failed to get tuner 1.0 service.");
- } else {
- mTunerVersion = TUNER_HAL_VERSION_1_0;
- }
- } else {
- mTuner = static_cast<sp<ITuner>>(mTuner_1_1);
- mTunerVersion = TUNER_HAL_VERSION_1_1;
- }
- }
- return mTuner;
-}
-
-sp<IFrontend> TunerClient::openHidlFrontendById(int id) {
- sp<IFrontend> fe;
- Result res;
- mTuner->openFrontendById(id, [&](Result r, const sp<IFrontend>& frontend) {
- fe = frontend;
- res = r;
- });
- if (res != Result::SUCCESS || fe == nullptr) {
- ALOGE("Failed to open frontend");
- return NULL;
- }
- return fe;
-}
-
-Result TunerClient::getHidlFrontendInfo(int id, FrontendInfo& feInfo) {
- Result res;
- mTuner->getFrontendInfo(id, [&](Result r, const FrontendInfo& info) {
- feInfo = info;
- res = r;
- });
- return res;
-}
-
-sp<IDemux> TunerClient::openHidlDemux(int& demuxId) {
- sp<IDemux> demux;
- Result res;
-
- mTuner->openDemux([&](Result result, uint32_t id, const sp<IDemux>& demuxSp) {
- demux = demuxSp;
- demuxId = id;
- res = result;
- });
- if (res != Result::SUCCESS || demux == nullptr) {
- ALOGE("Failed to open demux");
- return NULL;
- }
- return demux;
-}
-
-sp<ILnb> TunerClient::openHidlLnbById(int id) {
- sp<ILnb> lnb;
- Result res;
-
- mTuner->openLnbById(id, [&](Result r, const sp<ILnb>& lnbSp) {
- res = r;
- lnb = lnbSp;
- });
- if (res != Result::SUCCESS || lnb == nullptr) {
- ALOGE("Failed to open lnb by id");
- return NULL;
- }
- return lnb;
-}
-
-sp<ILnb> TunerClient::openHidlLnbByName(string name, LnbId& lnbId) {
- sp<ILnb> lnb;
- Result res;
-
- mTuner->openLnbByName(name, [&](Result r, LnbId id, const sp<ILnb>& lnbSp) {
- res = r;
- lnb = lnbSp;
- lnbId = id;
- });
- if (res != Result::SUCCESS || lnb == nullptr) {
- ALOGE("Failed to open lnb by name");
- return NULL;
- }
- return lnb;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-vector<int> TunerClient::getLnbHandles() {
- vector<int> lnbHandles;
- if (mTuner != NULL) {
- Result res;
- vector<LnbId> lnbIds;
- mTuner->getLnbIds([&](Result r, const hardware::hidl_vec<LnbId>& ids) {
- lnbIds = ids;
- res = r;
- });
- if (res != Result::SUCCESS || lnbIds.size() == 0) {
- ALOGW("Lnb isn't available");
- } else {
- for (int i = 0; i < lnbIds.size(); i++) {
- lnbHandles.push_back(getResourceHandleFromId((int)lnbIds[i], LNB));
- }
- }
- }
-
- return lnbHandles;
-}
-
-sp<IDescrambler> TunerClient::openHidlDescrambler() {
- sp<IDescrambler> descrambler;
- Result res;
-
- mTuner->openDescrambler([&](Result r, const sp<IDescrambler>& descramblerSp) {
- res = r;
- descrambler = descramblerSp;
- });
-
- if (res != Result::SUCCESS || descrambler == NULL) {
- return NULL;
- }
-
- return descrambler;
-}
-
-DemuxCapabilities TunerClient::getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps) {
- DemuxCapabilities caps{
- .numDemux = (uint32_t)aidlCaps.numDemux,
- .numRecord = (uint32_t)aidlCaps.numRecord,
- .numPlayback = (uint32_t)aidlCaps.numPlayback,
- .numTsFilter = (uint32_t)aidlCaps.numTsFilter,
- .numSectionFilter = (uint32_t)aidlCaps.numSectionFilter,
- .numAudioFilter = (uint32_t)aidlCaps.numAudioFilter,
- .numVideoFilter = (uint32_t)aidlCaps.numVideoFilter,
- .numPesFilter = (uint32_t)aidlCaps.numPesFilter,
- .numPcrFilter = (uint32_t)aidlCaps.numPcrFilter,
- .numBytesInSectionFilter = (uint32_t)aidlCaps.numBytesInSectionFilter,
- .filterCaps = (uint32_t)aidlCaps.filterCaps,
- .bTimeFilter = aidlCaps.bTimeFilter,
- };
- caps.linkCaps.resize(aidlCaps.linkCaps.size());
- copy(aidlCaps.linkCaps.begin(), aidlCaps.linkCaps.end(), caps.linkCaps.begin());
- return caps;
-}
-
-FrontendInfo TunerClient::frontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo) {
- FrontendInfo hidlFrontendInfo {
- .type = static_cast<FrontendType>(aidlFrontendInfo.type),
- .minFrequency = static_cast<uint32_t>(aidlFrontendInfo.minFrequency),
- .maxFrequency = static_cast<uint32_t>(aidlFrontendInfo.maxFrequency),
- .minSymbolRate = static_cast<uint32_t>(aidlFrontendInfo.minSymbolRate),
- .maxSymbolRate = static_cast<uint32_t>(aidlFrontendInfo.maxSymbolRate),
- .acquireRange = static_cast<uint32_t>(aidlFrontendInfo.acquireRange),
- .exclusiveGroupId = static_cast<uint32_t>(aidlFrontendInfo.exclusiveGroupId),
- };
-
- int size = aidlFrontendInfo.statusCaps.size();
- hidlFrontendInfo.statusCaps.resize(size);
- for (int i = 0; i < size; i++) {
- hidlFrontendInfo.statusCaps[i] =
- static_cast<FrontendStatusType>(aidlFrontendInfo.statusCaps[i]);
- }
-
- switch (aidlFrontendInfo.caps.getTag()) {
- case TunerFrontendCapabilities::analogCaps: {
- auto analog = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::analogCaps>();
- hidlFrontendInfo.frontendCaps.analogCaps({
- .typeCap = static_cast<uint32_t>(analog.typeCap),
- .sifStandardCap = static_cast<uint32_t>(analog.sifStandardCap),
- });
- break;
- }
- case TunerFrontendCapabilities::atscCaps: {
- auto atsc = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::atscCaps>();
- hidlFrontendInfo.frontendCaps.atscCaps({
- .modulationCap = static_cast<uint32_t>(atsc.modulationCap),
- });
- break;
- }
- case TunerFrontendCapabilities::atsc3Caps: {
- auto atsc3 = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::atsc3Caps>();
- hidlFrontendInfo.frontendCaps.atsc3Caps({
- .bandwidthCap = static_cast<uint32_t>(atsc3.bandwidthCap),
- .modulationCap = static_cast<uint32_t>(atsc3.modulationCap),
- .timeInterleaveModeCap = static_cast<uint32_t>(atsc3.timeInterleaveModeCap),
- .codeRateCap = static_cast<uint32_t>(atsc3.codeRateCap),
- .fecCap = static_cast<uint32_t>(atsc3.fecCap),
- .demodOutputFormatCap = static_cast<uint8_t>(atsc3.demodOutputFormatCap),
- });
- break;
- }
- case TunerFrontendCapabilities::cableCaps: {
- auto cable = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::cableCaps>();
- hidlFrontendInfo.frontendCaps.dvbcCaps({
- .modulationCap = static_cast<uint32_t>(cable.modulationCap),
- .fecCap = static_cast<uint64_t>(cable.codeRateCap),
- .annexCap = static_cast<uint8_t>(cable.annexCap),
- });
- break;
- }
- case TunerFrontendCapabilities::dvbsCaps: {
- auto dvbs = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::dvbsCaps>();
- hidlFrontendInfo.frontendCaps.dvbsCaps({
- .modulationCap = static_cast<int32_t>(dvbs.modulationCap),
- .innerfecCap = static_cast<uint64_t>(dvbs.codeRateCap),
- .standard = static_cast<uint8_t>(dvbs.standard),
- });
- break;
- }
- case TunerFrontendCapabilities::dvbtCaps: {
- auto dvbt = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::dvbtCaps>();
- hidlFrontendInfo.frontendCaps.dvbtCaps({
- .transmissionModeCap = static_cast<uint32_t>(dvbt.transmissionModeCap),
- .bandwidthCap = static_cast<uint32_t>(dvbt.bandwidthCap),
- .constellationCap = static_cast<uint32_t>(dvbt.constellationCap),
- .coderateCap = static_cast<uint32_t>(dvbt.codeRateCap),
- .hierarchyCap = static_cast<uint32_t>(dvbt.hierarchyCap),
- .guardIntervalCap = static_cast<uint32_t>(dvbt.guardIntervalCap),
- .isT2Supported = dvbt.isT2Supported,
- .isMisoSupported = dvbt.isMisoSupported,
- });
- break;
- }
- case TunerFrontendCapabilities::isdbsCaps: {
- auto isdbs = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::isdbsCaps>();
- hidlFrontendInfo.frontendCaps.isdbsCaps({
- .modulationCap = static_cast<uint32_t>(isdbs.modulationCap),
- .coderateCap = static_cast<uint32_t>(isdbs.codeRateCap),
- });
- break;
- }
- case TunerFrontendCapabilities::isdbs3Caps: {
- auto isdbs3 = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::isdbs3Caps>();
- hidlFrontendInfo.frontendCaps.isdbs3Caps({
- .modulationCap = static_cast<uint32_t>(isdbs3.modulationCap),
- .coderateCap = static_cast<uint32_t>(isdbs3.codeRateCap),
- });
- break;
- }
- case TunerFrontendCapabilities::isdbtCaps: {
- auto isdbt = aidlFrontendInfo.caps.get<TunerFrontendCapabilities::isdbtCaps>();
- hidlFrontendInfo.frontendCaps.isdbtCaps({
- .modeCap = static_cast<uint32_t>(isdbt.modeCap),
- .bandwidthCap = static_cast<uint32_t>(isdbt.bandwidthCap),
- .modulationCap = static_cast<uint32_t>(isdbt.modulationCap),
- .coderateCap = static_cast<uint32_t>(isdbt.codeRateCap),
- .guardIntervalCap = static_cast<uint32_t>(isdbt.guardIntervalCap),
- });
- break;
- }
- }
- return hidlFrontendInfo;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-int TunerClient::getResourceIdFromHandle(int handle, int /*resourceType*/) {
- return (handle & 0x00ff0000) >> 16;
-}
-
-// TODO: remove after migration to Tuner Service is done.
-int TunerClient::getResourceHandleFromId(int id, int resourceType) {
- return (resourceType & 0x000000ff) << 24
- | (id << 16)
- | (mResourceRequestCount++ & 0xffff);
-}
} // namespace android
diff --git a/media/jni/tuner/TunerClient.h b/media/jni/tuner/TunerClient.h
index 9671cf7..641f106 100644
--- a/media/jni/tuner/TunerClient.h
+++ b/media/jni/tuner/TunerClient.h
@@ -1,5 +1,5 @@
/*
- * Copyright 2020 The Android Open Source Project
+ * Copyright 2021 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,12 +17,8 @@
#ifndef _ANDROID_MEDIA_TV_TUNER_CLIENT_H_
#define _ANDROID_MEDIA_TV_TUNER_CLIENT_H_
-#include <aidl/android/media/tv/tunerresourcemanager/ITunerResourceManager.h>
#include <aidl/android/media/tv/tuner/ITunerService.h>
-#include <aidl/android/media/tv/tuner/TunerFrontendInfo.h>
#include <android/binder_parcel_utils.h>
-#include <android/hardware/tv/tuner/1.1/ITuner.h>
-#include <android/hardware/tv/tuner/1.1/types.h>
#include "DemuxClient.h"
#include "ClientHelper.h"
@@ -32,32 +28,19 @@
using Status = ::ndk::ScopedAStatus;
-using ::aidl::android::media::tv::tuner::TunerDemuxCapabilities;
+using ::aidl::android::hardware::tv::tuner::DemuxCapabilities;
+using ::aidl::android::hardware::tv::tuner::FrontendInfo;
+using ::aidl::android::hardware::tv::tuner::Result;
using ::aidl::android::media::tv::tuner::ITunerService;
-using ::aidl::android::media::tv::tuner::TunerFrontendInfo;
-using ::aidl::android::media::tv::tunerresourcemanager::ITunerResourceManager;
-
-using ::android::hardware::tv::tuner::V1_0::DemuxCapabilities;
-using ::android::hardware::tv::tuner::V1_0::FrontendId;
-using ::android::hardware::tv::tuner::V1_0::ITuner;
-using ::android::hardware::tv::tuner::V1_0::LnbId;
-using ::android::hardware::tv::tuner::V1_0::Result;
-using ::android::hardware::tv::tuner::V1_1::FrontendDtmbCapabilities;
using namespace std;
namespace android {
-const static int TUNER_HAL_VERSION_UNKNOWN = 0;
-const static int TUNER_HAL_VERSION_1_0 = 1 << 16;
-const static int TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;
-
-typedef enum {
- FRONTEND,
- LNB,
- DEMUX,
- DESCRAMBLER,
-} TunerResourceType;
+const static int32_t TUNER_HAL_VERSION_UNKNOWN = 0;
+const static int32_t TUNER_HAL_VERSION_1_0 = 1 << 16;
+const static int32_t TUNER_HAL_VERSION_1_1 = (1 << 16) | 1;
+const static int32_t TUNER_HAL_VERSION_2_0 = 2 << 16;
struct TunerClient : public RefBase {
@@ -70,7 +53,7 @@
*
* @return a list of the available frontend ids
*/
- vector<FrontendId> getFrontendIds();
+ vector<int32_t> getFrontendIds();
/**
* Open a new interface of FrontendClient given a frontendHandle.
@@ -78,7 +61,7 @@
* @param frontendHandle the handle of the frontend granted by TRM.
* @return a newly created FrontendClient interface.
*/
- sp<FrontendClient> openFrontend(int frontendHandle);
+ sp<FrontendClient> openFrontend(int32_t frontendHandle);
/**
* Retrieve the granted frontend's information.
@@ -86,15 +69,7 @@
* @param id the id of the frontend granted by TRM.
* @return the information for the frontend.
*/
- shared_ptr<FrontendInfo> getFrontendInfo(int id);
-
- /**
- * Retrieve the DTMB frontend's capabilities.
- *
- * @param id the id of the DTMB frontend.
- * @return the capabilities of the frontend.
- */
- shared_ptr<FrontendDtmbCapabilities> getFrontendDtmbCapabilities(int id);
+ shared_ptr<FrontendInfo> getFrontendInfo(int32_t id);
/**
* Open a new interface of DemuxClient given a demuxHandle.
@@ -102,7 +77,7 @@
* @param demuxHandle the handle of the demux granted by TRM.
* @return a newly created DemuxClient interface.
*/
- sp<DemuxClient> openDemux(int demuxHandle);
+ sp<DemuxClient> openDemux(int32_t demuxHandle);
/**
* Retrieve the Demux capabilities.
@@ -117,7 +92,7 @@
* @param descramblerHandle the handle of the descrambler granted by TRM.
* @return a newly created DescramblerClient interface.
*/
- sp<DescramblerClient> openDescrambler(int descramblerHandle);
+ sp<DescramblerClient> openDescrambler(int32_t descramblerHandle);
/**
* Open a new interface of LnbClient given an lnbHandle.
@@ -125,7 +100,7 @@
* @param lnbHandle the handle of the LNB granted by TRM.
* @return a newly created LnbClient interface.
*/
- sp<LnbClient> openLnb(int lnbHandle);
+ sp<LnbClient> openLnb(int32_t lnbHandle);
/**
* Open a new interface of LnbClient given a LNB name.
@@ -139,54 +114,18 @@
* Get the current Tuner HAL version. The high 16 bits are the major version number
* while the low 16 bits are the minor version. Default value is unknown version 0.
*/
- int getHalTunerVersion() { return mTunerVersion; }
+ int32_t getHalTunerVersion() { return mTunerVersion; }
private:
- sp<ITuner> getHidlTuner();
- sp<IFrontend> openHidlFrontendById(int id);
- sp<IDemux> openHidlDemux(int& demuxId);
- Result getHidlFrontendInfo(int id, FrontendInfo& info);
- sp<ILnb> openHidlLnbById(int id);
- sp<ILnb> openHidlLnbByName(string name, LnbId& lnbId);
- sp<IDescrambler> openHidlDescrambler();
- vector<int> getLnbHandles();
- DemuxCapabilities getHidlDemuxCaps(TunerDemuxCapabilities& aidlCaps);
- FrontendInfo frontendInfoAidlToHidl(TunerFrontendInfo aidlFrontendInfo);
- void updateTunerResources();
- void updateFrontendResources();
- void updateLnbResources();
-
- int getResourceIdFromHandle(int handle, int resourceType);
-
- int getResourceHandleFromId(int id, int resourceType);
-
/**
* An AIDL Tuner Service Singleton assigned at the first time the Tuner Client
* connects with the Tuner Service. Default null when the service does not exist.
*/
static shared_ptr<ITunerService> mTunerService;
- /**
- * A Tuner 1.0 HAL interface that is ready before connecting to the TunerService
- * This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
- * Default null.
- */
- static sp<ITuner> mTuner;
-
- /**
- * A Tuner 1.1 HAL interface that is ready before connecting to the TunerService
- * This is a temprary connection before the Tuner Framework fully migrates to the TunerService.
- * Default null.
- */
- static sp<::android::hardware::tv::tuner::V1_1::ITuner> mTuner_1_1;
-
// An integer that carries the Tuner version. The high 16 bits are the major version number
// while the low 16 bits are the minor version. Default value is unknown version 0.
- static int mTunerVersion;
-
- shared_ptr<ITunerResourceManager> mTunerResourceManager;
-
- int mResourceRequestCount = 0;
+ static int32_t mTunerVersion;
};
} // namespace android
diff --git a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
index 0c04b07..22f0ada 100644
--- a/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
+++ b/services/core/java/com/android/server/tv/tunerresourcemanager/TunerResourceManagerService.java
@@ -23,7 +23,6 @@
import android.content.Context;
import android.media.IResourceManagerService;
import android.media.tv.TvInputManager;
-import android.media.tv.tuner.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.CasSessionRequest;
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
import android.media.tv.tunerresourcemanager.ITunerResourceManager;
@@ -31,6 +30,7 @@
import android.media.tv.tunerresourcemanager.TunerCiCamRequest;
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
import android.media.tv.tunerresourcemanager.TunerResourceManager;
diff --git a/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java
index 2f36c7f..b8cb149 100644
--- a/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/tv/tunerresourcemanager/TunerResourceManagerServiceTest.java
@@ -25,7 +25,6 @@
import android.media.tv.ITvInputManager;
import android.media.tv.TvInputManager;
import android.media.tv.TvInputService;
-import android.media.tv.tuner.TunerFrontendInfo;
import android.media.tv.tuner.frontend.FrontendSettings;
import android.media.tv.tunerresourcemanager.CasSessionRequest;
import android.media.tv.tunerresourcemanager.IResourcesReclaimListener;
@@ -33,6 +32,7 @@
import android.media.tv.tunerresourcemanager.TunerCiCamRequest;
import android.media.tv.tunerresourcemanager.TunerDemuxRequest;
import android.media.tv.tunerresourcemanager.TunerDescramblerRequest;
+import android.media.tv.tunerresourcemanager.TunerFrontendInfo;
import android.media.tv.tunerresourcemanager.TunerFrontendRequest;
import android.media.tv.tunerresourcemanager.TunerLnbRequest;
import android.media.tv.tunerresourcemanager.TunerResourceManager;