From 3ca5656c334e62cb00d14e92444091e0cf106a5e Mon Sep 17 00:00:00 2001 From: shubang Date: Tue, 21 Jan 2020 04:28:39 -0800 Subject: [PATCH] Final cleanup: Add missing fields in SectionSettings and DemuxCaps Test: make; Bug: 139308734 Change-Id: Ie3f37f9c4b47144bc664ebff2ab685feb21eb033 --- api/system-current.txt | 23 ++++-- .../media/tv/tuner/DemuxCapabilities.java | 11 ++- media/java/android/media/tv/tuner/Tuner.java | 17 ++++ .../media/tv/tuner/filter/MediaEvent.java | 14 ++++ .../tv/tuner/filter/MmtpRecordEvent.java | 2 + .../tv/tuner/filter/SectionSettings.java | 77 ++++++++++++++++++- .../SectionSettingsWithSectionBits.java | 10 ++- .../filter/SectionSettingsWithTableInfo.java | 10 ++- .../tuner/filter/TlvFilterConfiguration.java | 2 +- 9 files changed, 148 insertions(+), 18 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index 31e1699889153..e9b6bfb49c801 100755 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4719,6 +4719,7 @@ package android.media.tv.tuner { method public long getSectionFilterLength(); method public int getTsFilterCount(); method public int getVideoFilterCount(); + method public boolean isTimeFilterSupported(); } public class Descrambler implements java.lang.AutoCloseable { @@ -4764,7 +4765,7 @@ package android.media.tv.tuner { public class Tuner implements java.lang.AutoCloseable { ctor @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public Tuner(@NonNull android.content.Context, @NonNull String, int, @Nullable android.media.tv.tuner.Tuner.OnResourceLostListener); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void clearOnTuneEventListener(); - method public void close(); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void close(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int connectCiCam(int); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int disconnectCiCam(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int getAvSyncHwId(@NonNull android.media.tv.tuner.filter.Filter); @@ -4782,10 +4783,11 @@ package android.media.tv.tuner { method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int scan(@NonNull android.media.tv.tuner.frontend.FrontendSettings, int, @NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.ScanCallback); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int setLna(boolean); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void setOnTuneEventListener(@NonNull java.util.concurrent.Executor, @NonNull android.media.tv.tuner.frontend.OnTuneEventListener); - method public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void shareFrontendFromTuner(@NonNull android.media.tv.tuner.Tuner); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int stopScan(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int stopTune(); method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int tune(@NonNull android.media.tv.tuner.frontend.FrontendSettings); + method @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void updateResourcePriority(int, int); } public static interface Tuner.OnResourceLostListener { @@ -5104,7 +5106,16 @@ package android.media.tv.tuner.filter { method public int getVersion(); } - public class SectionSettings extends android.media.tv.tuner.filter.Settings { + public abstract class SectionSettings extends android.media.tv.tuner.filter.Settings { + method public boolean isCrcEnabled(); + method public boolean isRaw(); + method public boolean isRepeat(); + } + + public abstract static class SectionSettings.Builder> extends android.media.tv.tuner.filter.Settings.Builder> { + method @NonNull public T setCrcEnabled(boolean); + method @NonNull public T setRaw(boolean); + method @NonNull public T setRepeat(boolean); } public class SectionSettingsWithSectionBits extends android.media.tv.tuner.filter.SectionSettings { @@ -5114,7 +5125,7 @@ package android.media.tv.tuner.filter { method @NonNull public byte[] getMode(); } - public static class SectionSettingsWithSectionBits.Builder extends android.media.tv.tuner.filter.Settings.Builder { + public static class SectionSettingsWithSectionBits.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder { method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits build(); method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setFilter(@NonNull byte[]); method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithSectionBits.Builder setMask(@NonNull byte[]); @@ -5127,7 +5138,7 @@ package android.media.tv.tuner.filter { method public int getVersion(); } - public static class SectionSettingsWithTableInfo.Builder extends android.media.tv.tuner.filter.Settings.Builder { + public static class SectionSettingsWithTableInfo.Builder extends android.media.tv.tuner.filter.SectionSettings.Builder { method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo build(); method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setTableId(int); method @NonNull public android.media.tv.tuner.filter.SectionSettingsWithTableInfo.Builder setVersion(int); @@ -5165,7 +5176,7 @@ package android.media.tv.tuner.filter { public static class TlvFilterConfiguration.Builder extends android.media.tv.tuner.filter.FilterConfiguration.Builder { method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration build(); - method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setIsCompressedIpPacket(boolean); + method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setCompressedIpPacket(boolean); method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPacketType(int); method @NonNull public android.media.tv.tuner.filter.TlvFilterConfiguration.Builder setPassthrough(boolean); } diff --git a/media/java/android/media/tv/tuner/DemuxCapabilities.java b/media/java/android/media/tv/tuner/DemuxCapabilities.java index 2c08e5bcdb191..364516cf488d3 100644 --- a/media/java/android/media/tv/tuner/DemuxCapabilities.java +++ b/media/java/android/media/tv/tuner/DemuxCapabilities.java @@ -58,11 +58,13 @@ public class DemuxCapabilities { private final long mSectionFilterLength; private final int mFilterCaps; private final int[] mLinkCaps; + private final boolean mSupportTimeFilter; // Used by JNI private DemuxCapabilities(int demuxCount, int recordCount, int playbackCount, int tsFilterCount, int sectionFilterCount, int audioFilterCount, int videoFilterCount, int pesFilterCount, - int pcrFilterCount, long sectionFilterLength, int filterCaps, int[] linkCaps) { + int pcrFilterCount, long sectionFilterLength, int filterCaps, int[] linkCaps, + boolean timeFilter) { mDemuxCount = demuxCount; mRecordCount = recordCount; mPlaybackCount = playbackCount; @@ -75,6 +77,7 @@ public class DemuxCapabilities { mSectionFilterLength = sectionFilterLength; mFilterCaps = filterCaps; mLinkCaps = linkCaps; + mSupportTimeFilter = timeFilter; } /** @@ -161,4 +164,10 @@ public class DemuxCapabilities { public int[] getLinkCapabilities() { return mLinkCaps; } + /** + * Is {@link android.media.tv.tuner.filter.TimeFilter} supported. + */ + public boolean isTimeFilterSupported() { + return mSupportTimeFilter; + } } diff --git a/media/java/android/media/tv/tuner/Tuner.java b/media/java/android/media/tv/tuner/Tuner.java index bac425b57e1d5..5e012447e9dd1 100644 --- a/media/java/android/media/tv/tuner/Tuner.java +++ b/media/java/android/media/tv/tuner/Tuner.java @@ -105,16 +105,33 @@ public class Tuner implements AutoCloseable { * * @param tuner the Tuner instance to share frontend resource with. */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public void shareFrontendFromTuner(@NonNull Tuner tuner) { // TODO: implementation. } + /** + * Updates client priority with an arbitrary value along with a nice value. + * + *

Tuner resource manager (TRM) uses the client priority value to decide whether it is able + * to reclaim insufficient resources from another client. + *

The nice value represents how much the client intends to give up the resource when an + * insufficient resource situation happens. + * + * @param priority the new priority. + * @param niceValue the nice value. + */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) + public void updateResourcePriority(int priority, int niceValue) { + // TODO: implementation. + } private long mNativeContext; // used by native jMediaTuner /** * Releases the Tuner instance. */ + @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Override public void close() { // TODO: implementation. diff --git a/media/java/android/media/tv/tuner/filter/MediaEvent.java b/media/java/android/media/tv/tuner/filter/MediaEvent.java index eb2f4a9533ad3..cbcaa28a2d227 100644 --- a/media/java/android/media/tv/tuner/filter/MediaEvent.java +++ b/media/java/android/media/tv/tuner/filter/MediaEvent.java @@ -124,6 +124,20 @@ public class MediaEvent extends FilterEvent{ return mDataId; } + /** + * Reserves the ID which is used by HAL to provide additional information for AV data. + * + *

The corresponding data is used and released by {@link android.media.AudioTrack}. + *

The data is also released when the {@link Filter} instance is closed. + * + * @return the reserved AV data ID. + * @hide + */ + public long reserveAvDataId() { + // TODO: implement + return mDataId; + } + /** * Gets MPU sequence number of filtered data. */ diff --git a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java index 093dc6ff7d644..466fa3ecb6e7a 100644 --- a/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java +++ b/media/java/android/media/tv/tuner/filter/MmtpRecordEvent.java @@ -18,6 +18,7 @@ package android.media.tv.tuner.filter; import android.annotation.BytesLong; import android.annotation.SystemApi; +import android.media.tv.tuner.filter.RecordSettings.ScHevcIndex; /** * Filter event sent from {@link Filter} objects with MMTP type. @@ -38,6 +39,7 @@ public class MmtpRecordEvent extends FilterEvent { /** * Gets indexes which can be tagged by NAL unit group in HEVC according to ISO/IEC 23008-2. */ + @ScHevcIndex public int getScHevcIndexMask() { return mScHevcIndexMask; } diff --git a/media/java/android/media/tv/tuner/filter/SectionSettings.java b/media/java/android/media/tv/tuner/filter/SectionSettings.java index 70788a7515ca9..947013840bc6c 100644 --- a/media/java/android/media/tv/tuner/filter/SectionSettings.java +++ b/media/java/android/media/tv/tuner/filter/SectionSettings.java @@ -16,6 +16,7 @@ package android.media.tv.tuner.filter; +import android.annotation.NonNull; import android.annotation.SystemApi; import android.media.tv.tuner.TunerUtils; @@ -25,9 +26,81 @@ import android.media.tv.tuner.TunerUtils; * @hide */ @SystemApi -public class SectionSettings extends Settings { +public abstract class SectionSettings extends Settings { + final boolean mCrcEnabled; + final boolean mIsRepeat; + final boolean mIsRaw; - SectionSettings(int mainType) { + SectionSettings(int mainType, boolean crcEnabled, boolean isRepeat, boolean isRaw) { super(TunerUtils.getFilterSubtype(mainType, Filter.SUBTYPE_SECTION)); + mCrcEnabled = crcEnabled; + mIsRepeat = isRepeat; + mIsRaw = isRaw; + } + + /** + * Returns whether the filter enables CRC (Cyclic redundancy check) and discards data which + * doesn't pass the check. + */ + public boolean isCrcEnabled() { + return mCrcEnabled; + } + /** + * Returns whether the filter repeats the data with the same version. + */ + public boolean isRepeat() { + return mIsRepeat; + } + /** + * Returns whether the filter sends {@link FilterCallback#onFilterStatusChanged} instead of + * {@link FilterCallback#onFilterEvent}. + */ + public boolean isRaw() { + return mIsRaw; + } + + /** + * Builder for {@link SectionSettings}. + * + * @param The subclass to be built. + */ + public abstract static class Builder> + extends Settings.Builder> { + boolean mCrcEnabled; + boolean mIsRepeat; + boolean mIsRaw; + + Builder(int mainType) { + super(mainType); + } + + /** + * Sets whether the filter enables CRC (Cyclic redundancy check) and discards data which + * doesn't pass the check. + */ + @NonNull + public T setCrcEnabled(boolean crcEnabled) { + mCrcEnabled = crcEnabled; + return self(); + } + /** + * Sets whether the filter repeats the data with the same version. + */ + @NonNull + public T setRepeat(boolean isRepeat) { + mIsRepeat = isRepeat; + return self(); + } + /** + * Sets whether the filter send onFilterStatus instead of + * {@link FilterCallback#onFilterEvent}. + */ + @NonNull + public T setRaw(boolean isRaw) { + mIsRaw = isRaw; + return self(); + } + + /* package */ abstract T self(); } } diff --git a/media/java/android/media/tv/tuner/filter/SectionSettingsWithSectionBits.java b/media/java/android/media/tv/tuner/filter/SectionSettingsWithSectionBits.java index eeeabdfecc011..cb547ec8ae9a1 100644 --- a/media/java/android/media/tv/tuner/filter/SectionSettingsWithSectionBits.java +++ b/media/java/android/media/tv/tuner/filter/SectionSettingsWithSectionBits.java @@ -34,8 +34,9 @@ public class SectionSettingsWithSectionBits extends SectionSettings { private final byte[] mMode; - private SectionSettingsWithSectionBits(int mainType, byte[] filter, byte[] mask, byte[] mode) { - super(mainType); + private SectionSettingsWithSectionBits(int mainType, boolean isCheckCrc, boolean isRepeat, + boolean isRaw, byte[] filter, byte[] mask, byte[] mode) { + super(mainType, isCheckCrc, isRepeat, isRaw); mFilter = filter; mMask = mask; mMode = mode; @@ -86,7 +87,7 @@ public class SectionSettingsWithSectionBits extends SectionSettings { /** * Builder for {@link SectionSettingsWithSectionBits}. */ - public static class Builder extends Settings.Builder { + public static class Builder extends SectionSettings.Builder { private byte[] mFilter; private byte[] mMask; private byte[] mMode; @@ -125,7 +126,8 @@ public class SectionSettingsWithSectionBits extends SectionSettings { */ @NonNull public SectionSettingsWithSectionBits build() { - return new SectionSettingsWithSectionBits(mMainType, mFilter, mMask, mMode); + return new SectionSettingsWithSectionBits( + mMainType, mCrcEnabled, mIsRepeat, mIsRaw, mFilter, mMask, mMode); } @Override diff --git a/media/java/android/media/tv/tuner/filter/SectionSettingsWithTableInfo.java b/media/java/android/media/tv/tuner/filter/SectionSettingsWithTableInfo.java index c5ff45cfa7ded..09d1dae971b7b 100644 --- a/media/java/android/media/tv/tuner/filter/SectionSettingsWithTableInfo.java +++ b/media/java/android/media/tv/tuner/filter/SectionSettingsWithTableInfo.java @@ -32,8 +32,9 @@ public class SectionSettingsWithTableInfo extends SectionSettings { private final int mTableId; private final int mVersion; - private SectionSettingsWithTableInfo(int mainType, int tableId, int version) { - super(mainType); + private SectionSettingsWithTableInfo(int mainType, boolean isCheckCrc, boolean isRepeat, + boolean isRaw, int tableId, int version) { + super(mainType, isCheckCrc, isRepeat, isRaw); mTableId = tableId; mVersion = version; } @@ -67,7 +68,7 @@ public class SectionSettingsWithTableInfo extends SectionSettings { /** * Builder for {@link SectionSettingsWithTableInfo}. */ - public static class Builder extends Settings.Builder { + public static class Builder extends SectionSettings.Builder { private int mTableId; private int mVersion; @@ -97,7 +98,8 @@ public class SectionSettingsWithTableInfo extends SectionSettings { */ @NonNull public SectionSettingsWithTableInfo build() { - return new SectionSettingsWithTableInfo(mMainType, mTableId, mVersion); + return new SectionSettingsWithTableInfo( + mMainType, mCrcEnabled, mIsRepeat, mIsRaw, mTableId, mVersion); } @Override diff --git a/media/java/android/media/tv/tuner/filter/TlvFilterConfiguration.java b/media/java/android/media/tv/tuner/filter/TlvFilterConfiguration.java index b6878e6a13a8e..3d83a74a500cb 100644 --- a/media/java/android/media/tv/tuner/filter/TlvFilterConfiguration.java +++ b/media/java/android/media/tv/tuner/filter/TlvFilterConfiguration.java @@ -106,7 +106,7 @@ public class TlvFilterConfiguration extends FilterConfiguration { * Sets whether the data is compressed IP packet. */ @NonNull - public Builder setIsCompressedIpPacket(boolean isCompressedIpPacket) { + public Builder setCompressedIpPacket(boolean isCompressedIpPacket) { mIsCompressedIpPacket = isCompressedIpPacket; return this; }