Loading media/java/android/media/tv/tuner/FilterSettings.java +17 −75 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ package android.media.tv.tuner; import android.annotation.Nullable; import android.hardware.tv.tuner.V1_0.Constants; import android.media.tv.tuner.TunerConstants.FilterSettingsType; import android.media.tv.tuner.TunerConstants.FilterType; import java.util.List; Loading @@ -38,7 +37,8 @@ public abstract class FilterSettings { /** * Gets filter settings type */ @FilterSettingsType public abstract int getType(); @FilterType public abstract int getType(); // TODO: more builders and getters Loading @@ -55,7 +55,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_TS; return TunerConstants.FILTER_TYPE_TS; } /** Loading Loading @@ -109,7 +109,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_MMTP; return TunerConstants.FILTER_TYPE_MMTP; } } Loading @@ -130,7 +130,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_IP; return TunerConstants.FILTER_TYPE_IP; } } Loading @@ -149,7 +149,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_TLV; return TunerConstants.FILTER_TYPE_TLV; } } Loading @@ -167,7 +167,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_ALP; return TunerConstants.FILTER_TYPE_ALP; } } Loading Loading @@ -197,24 +197,7 @@ public abstract class FilterSettings { public static class SectionSettings extends Settings { private SectionSettings(int mainType) { super(SectionSettings.findType(mainType)); } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_IP: return Constants.DemuxIpFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_TLV: return Constants.DemuxTlvFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_ALP: return Constants.DemuxAlpFilterType.SECTION; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_SECTION)); } } Loading Loading @@ -251,22 +234,11 @@ public abstract class FilterSettings { private boolean mIsRaw; private PesSettings(int mainType, int streamId, boolean isRaw) { super(PesSettings.findType(mainType)); super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_PES)); mStreamId = streamId; mIsRaw = isRaw; } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.PES; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.PES; } // UNDEFINED return 0; } /** * Creates a builder for PesSettings. */ Loading Loading @@ -319,22 +291,11 @@ public abstract class FilterSettings { private boolean mIsPassthrough; private AvSettings(int mainType, boolean isAudio) { super(AvSettings.findType(mainType, isAudio)); } private static int findType(int mainType, boolean isAudio) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return isAudio ? Constants.DemuxTsFilterType.AUDIO : Constants.DemuxTsFilterType.VIDEO; case TunerConstants.FILTER_SETTINGS_MMTP: return isAudio ? Constants.DemuxMmtpFilterType.AUDIO : Constants.DemuxMmtpFilterType.VIDEO; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype( mainType, isAudio ? TunerConstants.FILTER_SUBTYPE_AUDIO : TunerConstants.FILTER_SUBTYPE_VIDEO)); } } Loading @@ -345,15 +306,7 @@ public abstract class FilterSettings { private int mDownloadId; public DownloadSettings(int mainType) { super(DownloadSettings.findType(mainType)); } private static int findType(int mainType) { if (mainType == TunerConstants.FILTER_SETTINGS_MMTP) { return Constants.DemuxMmtpFilterType.DOWNLOAD; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_DOWNLOAD)); } } Loading @@ -365,18 +318,7 @@ public abstract class FilterSettings { private int mIndexMask; public RecordSettings(int mainType) { super(RecordSettings.findType(mainType)); } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.RECORD; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.RECORD; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_RECORD)); } } Loading media/java/android/media/tv/tuner/Tuner.java +8 −13 Original line number Diff line number Diff line Loading @@ -21,8 +21,9 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.content.pm.PackageManager; import android.media.tv.tuner.TunerConstants.DemuxPidType; import android.media.tv.tuner.TunerConstants.FilterSubtype; import android.media.tv.tuner.TunerConstants.FilterType; import android.os.Handler; import android.os.Looper; import android.os.Message; Loading @@ -43,7 +44,6 @@ public final class Tuner implements AutoCloseable { private static final String TAG = "MediaTvTuner"; private static final boolean DEBUG = false; private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER; private static final int MSG_ON_FRONTEND_EVENT = 1; private static final int MSG_ON_FILTER_EVENT = 2; private static final int MSG_ON_FILTER_STATUS = 3; Loading Loading @@ -73,13 +73,6 @@ public final class Tuner implements AutoCloseable { nativeSetup(); } private void checkPermission() { if (mContext.checkCallingOrSelfPermission(PERMISSION) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Caller must have " + PERMISSION + " permission."); } } private long mNativeContext; // used by native jMediaTuner /** @hide */ Loading Loading @@ -255,7 +248,7 @@ public final class Tuner implements AutoCloseable { */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int tune(@NonNull FrontendSettings settings) { checkPermission(); TunerUtils.checkTunerPermission(mContext); return nativeTune(settings.getType(), settings); } Loading Loading @@ -370,8 +363,10 @@ public final class Tuner implements AutoCloseable { } } private Filter openFilter(int type, int subType, int bufferSize, FilterCallback cb) { Filter filter = nativeOpenFilter(type, subType, bufferSize); private Filter openFilter(@FilterType int mainType, @FilterSubtype int subType, int bufferSize, FilterCallback cb) { Filter filter = nativeOpenFilter( mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize); if (filter != null) { filter.mCallback = cb; if (mHandler == null) { Loading Loading @@ -459,7 +454,7 @@ public final class Tuner implements AutoCloseable { @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Nullable public Descrambler openDescrambler() { checkPermission(); TunerUtils.checkTunerPermission(mContext); return nativeOpenDescrambler(); } Loading media/java/android/media/tv/tuner/TunerConstants.java +34 −9 Original line number Diff line number Diff line Loading @@ -91,15 +91,40 @@ final class TunerConstants { public static final int FRONTEND_SETTINGS_ISDBT = 9; @Retention(RetentionPolicy.SOURCE) @IntDef({FILTER_SETTINGS_TS, FILTER_SETTINGS_MMTP, FILTER_SETTINGS_IP, FILTER_SETTINGS_TLV, FILTER_SETTINGS_ALP}) public @interface FilterSettingsType {} public static final int FILTER_SETTINGS_TS = Constants.DemuxFilterMainType.TS; public static final int FILTER_SETTINGS_MMTP = Constants.DemuxFilterMainType.MMTP; public static final int FILTER_SETTINGS_IP = Constants.DemuxFilterMainType.IP; public static final int FILTER_SETTINGS_TLV = Constants.DemuxFilterMainType.TLV; public static final int FILTER_SETTINGS_ALP = Constants.DemuxFilterMainType.ALP; @IntDef({FILTER_TYPE_TS, FILTER_TYPE_MMTP, FILTER_TYPE_IP, FILTER_TYPE_TLV, FILTER_TYPE_ALP}) public @interface FilterType {} public static final int FILTER_TYPE_TS = Constants.DemuxFilterMainType.TS; public static final int FILTER_TYPE_MMTP = Constants.DemuxFilterMainType.MMTP; public static final int FILTER_TYPE_IP = Constants.DemuxFilterMainType.IP; public static final int FILTER_TYPE_TLV = Constants.DemuxFilterMainType.TLV; public static final int FILTER_TYPE_ALP = Constants.DemuxFilterMainType.ALP; @Retention(RetentionPolicy.SOURCE) @IntDef({FILTER_SUBTYPE_UNDEFINED, FILTER_SUBTYPE_SECTION, FILTER_SUBTYPE_PES, FILTER_SUBTYPE_AUDIO, FILTER_SUBTYPE_VIDEO, FILTER_SUBTYPE_DOWNLOAD, FILTER_SUBTYPE_RECORD, FILTER_SUBTYPE_TS, FILTER_SUBTYPE_PCR, FILTER_SUBTYPE_TEMI, FILTER_SUBTYPE_MMPT, FILTER_SUBTYPE_NTP, FILTER_SUBTYPE_IP_PAYLOAD, FILTER_SUBTYPE_IP, FILTER_SUBTYPE_PAYLOAD_THROUGH, FILTER_SUBTYPE_TLV, FILTER_SUBTYPE_PTP, }) public @interface FilterSubtype {} public static final int FILTER_SUBTYPE_UNDEFINED = 0; public static final int FILTER_SUBTYPE_SECTION = 1; public static final int FILTER_SUBTYPE_PES = 2; public static final int FILTER_SUBTYPE_AUDIO = 3; public static final int FILTER_SUBTYPE_VIDEO = 4; public static final int FILTER_SUBTYPE_DOWNLOAD = 5; public static final int FILTER_SUBTYPE_RECORD = 6; public static final int FILTER_SUBTYPE_TS = 7; public static final int FILTER_SUBTYPE_PCR = 8; public static final int FILTER_SUBTYPE_TEMI = 9; public static final int FILTER_SUBTYPE_MMPT = 10; public static final int FILTER_SUBTYPE_NTP = 11; public static final int FILTER_SUBTYPE_IP_PAYLOAD = 12; public static final int FILTER_SUBTYPE_IP = 13; public static final int FILTER_SUBTYPE_PAYLOAD_THROUGH = 14; public static final int FILTER_SUBTYPE_TLV = 15; public static final int FILTER_SUBTYPE_PTP = 16; @Retention(RetentionPolicy.SOURCE) @IntDef({DVR_SETTINGS_RECORD, DVR_SETTINGS_PLAYBACK}) Loading media/java/android/media/tv/tuner/TunerUtils.java 0 → 100644 +135 −0 Original line number Diff line number Diff line /* * Copyright 2019 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.tuner; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.tv.tuner.V1_0.Constants; import android.media.tv.tuner.TunerConstants.FilterSubtype; import android.media.tv.tuner.TunerConstants.FilterType; /** * Utility class for tuner framework. * * @hide */ public final class TunerUtils { private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER; static void checkTunerPermission(Context context) { if (context.checkCallingOrSelfPermission(PERMISSION) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Caller must have " + PERMISSION + " permission."); } } static int getFilterSubtype(@FilterType int mainType, @FilterSubtype int subtype) { if (mainType == TunerConstants.FILTER_TYPE_TS) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxTsFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxTsFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PES: return Constants.DemuxTsFilterType.PES; case TunerConstants.FILTER_SUBTYPE_TS: return Constants.DemuxTsFilterType.TS; case TunerConstants.FILTER_SUBTYPE_AUDIO: return Constants.DemuxTsFilterType.AUDIO; case TunerConstants.FILTER_SUBTYPE_VIDEO: return Constants.DemuxTsFilterType.VIDEO; case TunerConstants.FILTER_SUBTYPE_PCR: return Constants.DemuxTsFilterType.PCR; case TunerConstants.FILTER_SUBTYPE_RECORD: return Constants.DemuxTsFilterType.RECORD; case TunerConstants.FILTER_SUBTYPE_TEMI: return Constants.DemuxTsFilterType.TEMI; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_MMTP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxMmtpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxMmtpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PES: return Constants.DemuxMmtpFilterType.PES; case TunerConstants.FILTER_SUBTYPE_MMPT: return Constants.DemuxMmtpFilterType.MMTP; case TunerConstants.FILTER_SUBTYPE_AUDIO: return Constants.DemuxMmtpFilterType.AUDIO; case TunerConstants.FILTER_SUBTYPE_VIDEO: return Constants.DemuxMmtpFilterType.VIDEO; case TunerConstants.FILTER_SUBTYPE_RECORD: return Constants.DemuxMmtpFilterType.RECORD; case TunerConstants.FILTER_SUBTYPE_DOWNLOAD: return Constants.DemuxMmtpFilterType.DOWNLOAD; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_IP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxIpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxIpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_NTP: return Constants.DemuxIpFilterType.NTP; case TunerConstants.FILTER_SUBTYPE_IP_PAYLOAD: return Constants.DemuxIpFilterType.IP_PAYLOAD; case TunerConstants.FILTER_SUBTYPE_IP: return Constants.DemuxIpFilterType.IP; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxIpFilterType.PAYLOAD_THROUGH; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_TLV) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxTlvFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxTlvFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_TLV: return Constants.DemuxTlvFilterType.TLV; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxTlvFilterType.PAYLOAD_THROUGH; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_ALP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxAlpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxAlpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PTP: return Constants.DemuxAlpFilterType.PTP; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxAlpFilterType.PAYLOAD_THROUGH; default: break; } } throw new IllegalArgumentException( "Invalid filter types. Main type=" + mainType + ", subtype=" + subtype); } private TunerUtils() {} } Loading
media/java/android/media/tv/tuner/FilterSettings.java +17 −75 Original line number Diff line number Diff line Loading @@ -17,8 +17,7 @@ package android.media.tv.tuner; import android.annotation.Nullable; import android.hardware.tv.tuner.V1_0.Constants; import android.media.tv.tuner.TunerConstants.FilterSettingsType; import android.media.tv.tuner.TunerConstants.FilterType; import java.util.List; Loading @@ -38,7 +37,8 @@ public abstract class FilterSettings { /** * Gets filter settings type */ @FilterSettingsType public abstract int getType(); @FilterType public abstract int getType(); // TODO: more builders and getters Loading @@ -55,7 +55,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_TS; return TunerConstants.FILTER_TYPE_TS; } /** Loading Loading @@ -109,7 +109,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_MMTP; return TunerConstants.FILTER_TYPE_MMTP; } } Loading @@ -130,7 +130,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_IP; return TunerConstants.FILTER_TYPE_IP; } } Loading @@ -149,7 +149,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_TLV; return TunerConstants.FILTER_TYPE_TLV; } } Loading @@ -167,7 +167,7 @@ public abstract class FilterSettings { @Override public int getType() { return TunerConstants.FILTER_SETTINGS_ALP; return TunerConstants.FILTER_TYPE_ALP; } } Loading Loading @@ -197,24 +197,7 @@ public abstract class FilterSettings { public static class SectionSettings extends Settings { private SectionSettings(int mainType) { super(SectionSettings.findType(mainType)); } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_IP: return Constants.DemuxIpFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_TLV: return Constants.DemuxTlvFilterType.SECTION; case TunerConstants.FILTER_SETTINGS_ALP: return Constants.DemuxAlpFilterType.SECTION; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_SECTION)); } } Loading Loading @@ -251,22 +234,11 @@ public abstract class FilterSettings { private boolean mIsRaw; private PesSettings(int mainType, int streamId, boolean isRaw) { super(PesSettings.findType(mainType)); super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_PES)); mStreamId = streamId; mIsRaw = isRaw; } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.PES; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.PES; } // UNDEFINED return 0; } /** * Creates a builder for PesSettings. */ Loading Loading @@ -319,22 +291,11 @@ public abstract class FilterSettings { private boolean mIsPassthrough; private AvSettings(int mainType, boolean isAudio) { super(AvSettings.findType(mainType, isAudio)); } private static int findType(int mainType, boolean isAudio) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return isAudio ? Constants.DemuxTsFilterType.AUDIO : Constants.DemuxTsFilterType.VIDEO; case TunerConstants.FILTER_SETTINGS_MMTP: return isAudio ? Constants.DemuxMmtpFilterType.AUDIO : Constants.DemuxMmtpFilterType.VIDEO; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype( mainType, isAudio ? TunerConstants.FILTER_SUBTYPE_AUDIO : TunerConstants.FILTER_SUBTYPE_VIDEO)); } } Loading @@ -345,15 +306,7 @@ public abstract class FilterSettings { private int mDownloadId; public DownloadSettings(int mainType) { super(DownloadSettings.findType(mainType)); } private static int findType(int mainType) { if (mainType == TunerConstants.FILTER_SETTINGS_MMTP) { return Constants.DemuxMmtpFilterType.DOWNLOAD; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_DOWNLOAD)); } } Loading @@ -365,18 +318,7 @@ public abstract class FilterSettings { private int mIndexMask; public RecordSettings(int mainType) { super(RecordSettings.findType(mainType)); } private static int findType(int mainType) { switch (mainType) { case TunerConstants.FILTER_SETTINGS_TS: return Constants.DemuxTsFilterType.RECORD; case TunerConstants.FILTER_SETTINGS_MMTP: return Constants.DemuxMmtpFilterType.RECORD; } // UNDEFINED return 0; super(TunerUtils.getFilterSubtype(mainType, TunerConstants.FILTER_SUBTYPE_RECORD)); } } Loading
media/java/android/media/tv/tuner/Tuner.java +8 −13 Original line number Diff line number Diff line Loading @@ -21,8 +21,9 @@ import android.annotation.Nullable; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.content.pm.PackageManager; import android.media.tv.tuner.TunerConstants.DemuxPidType; import android.media.tv.tuner.TunerConstants.FilterSubtype; import android.media.tv.tuner.TunerConstants.FilterType; import android.os.Handler; import android.os.Looper; import android.os.Message; Loading @@ -43,7 +44,6 @@ public final class Tuner implements AutoCloseable { private static final String TAG = "MediaTvTuner"; private static final boolean DEBUG = false; private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER; private static final int MSG_ON_FRONTEND_EVENT = 1; private static final int MSG_ON_FILTER_EVENT = 2; private static final int MSG_ON_FILTER_STATUS = 3; Loading Loading @@ -73,13 +73,6 @@ public final class Tuner implements AutoCloseable { nativeSetup(); } private void checkPermission() { if (mContext.checkCallingOrSelfPermission(PERMISSION) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Caller must have " + PERMISSION + " permission."); } } private long mNativeContext; // used by native jMediaTuner /** @hide */ Loading Loading @@ -255,7 +248,7 @@ public final class Tuner implements AutoCloseable { */ @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) public int tune(@NonNull FrontendSettings settings) { checkPermission(); TunerUtils.checkTunerPermission(mContext); return nativeTune(settings.getType(), settings); } Loading Loading @@ -370,8 +363,10 @@ public final class Tuner implements AutoCloseable { } } private Filter openFilter(int type, int subType, int bufferSize, FilterCallback cb) { Filter filter = nativeOpenFilter(type, subType, bufferSize); private Filter openFilter(@FilterType int mainType, @FilterSubtype int subType, int bufferSize, FilterCallback cb) { Filter filter = nativeOpenFilter( mainType, TunerUtils.getFilterSubtype(mainType, subType), bufferSize); if (filter != null) { filter.mCallback = cb; if (mHandler == null) { Loading Loading @@ -459,7 +454,7 @@ public final class Tuner implements AutoCloseable { @RequiresPermission(android.Manifest.permission.ACCESS_TV_TUNER) @Nullable public Descrambler openDescrambler() { checkPermission(); TunerUtils.checkTunerPermission(mContext); return nativeOpenDescrambler(); } Loading
media/java/android/media/tv/tuner/TunerConstants.java +34 −9 Original line number Diff line number Diff line Loading @@ -91,15 +91,40 @@ final class TunerConstants { public static final int FRONTEND_SETTINGS_ISDBT = 9; @Retention(RetentionPolicy.SOURCE) @IntDef({FILTER_SETTINGS_TS, FILTER_SETTINGS_MMTP, FILTER_SETTINGS_IP, FILTER_SETTINGS_TLV, FILTER_SETTINGS_ALP}) public @interface FilterSettingsType {} public static final int FILTER_SETTINGS_TS = Constants.DemuxFilterMainType.TS; public static final int FILTER_SETTINGS_MMTP = Constants.DemuxFilterMainType.MMTP; public static final int FILTER_SETTINGS_IP = Constants.DemuxFilterMainType.IP; public static final int FILTER_SETTINGS_TLV = Constants.DemuxFilterMainType.TLV; public static final int FILTER_SETTINGS_ALP = Constants.DemuxFilterMainType.ALP; @IntDef({FILTER_TYPE_TS, FILTER_TYPE_MMTP, FILTER_TYPE_IP, FILTER_TYPE_TLV, FILTER_TYPE_ALP}) public @interface FilterType {} public static final int FILTER_TYPE_TS = Constants.DemuxFilterMainType.TS; public static final int FILTER_TYPE_MMTP = Constants.DemuxFilterMainType.MMTP; public static final int FILTER_TYPE_IP = Constants.DemuxFilterMainType.IP; public static final int FILTER_TYPE_TLV = Constants.DemuxFilterMainType.TLV; public static final int FILTER_TYPE_ALP = Constants.DemuxFilterMainType.ALP; @Retention(RetentionPolicy.SOURCE) @IntDef({FILTER_SUBTYPE_UNDEFINED, FILTER_SUBTYPE_SECTION, FILTER_SUBTYPE_PES, FILTER_SUBTYPE_AUDIO, FILTER_SUBTYPE_VIDEO, FILTER_SUBTYPE_DOWNLOAD, FILTER_SUBTYPE_RECORD, FILTER_SUBTYPE_TS, FILTER_SUBTYPE_PCR, FILTER_SUBTYPE_TEMI, FILTER_SUBTYPE_MMPT, FILTER_SUBTYPE_NTP, FILTER_SUBTYPE_IP_PAYLOAD, FILTER_SUBTYPE_IP, FILTER_SUBTYPE_PAYLOAD_THROUGH, FILTER_SUBTYPE_TLV, FILTER_SUBTYPE_PTP, }) public @interface FilterSubtype {} public static final int FILTER_SUBTYPE_UNDEFINED = 0; public static final int FILTER_SUBTYPE_SECTION = 1; public static final int FILTER_SUBTYPE_PES = 2; public static final int FILTER_SUBTYPE_AUDIO = 3; public static final int FILTER_SUBTYPE_VIDEO = 4; public static final int FILTER_SUBTYPE_DOWNLOAD = 5; public static final int FILTER_SUBTYPE_RECORD = 6; public static final int FILTER_SUBTYPE_TS = 7; public static final int FILTER_SUBTYPE_PCR = 8; public static final int FILTER_SUBTYPE_TEMI = 9; public static final int FILTER_SUBTYPE_MMPT = 10; public static final int FILTER_SUBTYPE_NTP = 11; public static final int FILTER_SUBTYPE_IP_PAYLOAD = 12; public static final int FILTER_SUBTYPE_IP = 13; public static final int FILTER_SUBTYPE_PAYLOAD_THROUGH = 14; public static final int FILTER_SUBTYPE_TLV = 15; public static final int FILTER_SUBTYPE_PTP = 16; @Retention(RetentionPolicy.SOURCE) @IntDef({DVR_SETTINGS_RECORD, DVR_SETTINGS_PLAYBACK}) Loading
media/java/android/media/tv/tuner/TunerUtils.java 0 → 100644 +135 −0 Original line number Diff line number Diff line /* * Copyright 2019 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.tuner; import android.content.Context; import android.content.pm.PackageManager; import android.hardware.tv.tuner.V1_0.Constants; import android.media.tv.tuner.TunerConstants.FilterSubtype; import android.media.tv.tuner.TunerConstants.FilterType; /** * Utility class for tuner framework. * * @hide */ public final class TunerUtils { private static final String PERMISSION = android.Manifest.permission.ACCESS_TV_TUNER; static void checkTunerPermission(Context context) { if (context.checkCallingOrSelfPermission(PERMISSION) != PackageManager.PERMISSION_GRANTED) { throw new SecurityException("Caller must have " + PERMISSION + " permission."); } } static int getFilterSubtype(@FilterType int mainType, @FilterSubtype int subtype) { if (mainType == TunerConstants.FILTER_TYPE_TS) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxTsFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxTsFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PES: return Constants.DemuxTsFilterType.PES; case TunerConstants.FILTER_SUBTYPE_TS: return Constants.DemuxTsFilterType.TS; case TunerConstants.FILTER_SUBTYPE_AUDIO: return Constants.DemuxTsFilterType.AUDIO; case TunerConstants.FILTER_SUBTYPE_VIDEO: return Constants.DemuxTsFilterType.VIDEO; case TunerConstants.FILTER_SUBTYPE_PCR: return Constants.DemuxTsFilterType.PCR; case TunerConstants.FILTER_SUBTYPE_RECORD: return Constants.DemuxTsFilterType.RECORD; case TunerConstants.FILTER_SUBTYPE_TEMI: return Constants.DemuxTsFilterType.TEMI; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_MMTP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxMmtpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxMmtpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PES: return Constants.DemuxMmtpFilterType.PES; case TunerConstants.FILTER_SUBTYPE_MMPT: return Constants.DemuxMmtpFilterType.MMTP; case TunerConstants.FILTER_SUBTYPE_AUDIO: return Constants.DemuxMmtpFilterType.AUDIO; case TunerConstants.FILTER_SUBTYPE_VIDEO: return Constants.DemuxMmtpFilterType.VIDEO; case TunerConstants.FILTER_SUBTYPE_RECORD: return Constants.DemuxMmtpFilterType.RECORD; case TunerConstants.FILTER_SUBTYPE_DOWNLOAD: return Constants.DemuxMmtpFilterType.DOWNLOAD; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_IP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxIpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxIpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_NTP: return Constants.DemuxIpFilterType.NTP; case TunerConstants.FILTER_SUBTYPE_IP_PAYLOAD: return Constants.DemuxIpFilterType.IP_PAYLOAD; case TunerConstants.FILTER_SUBTYPE_IP: return Constants.DemuxIpFilterType.IP; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxIpFilterType.PAYLOAD_THROUGH; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_TLV) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxTlvFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxTlvFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_TLV: return Constants.DemuxTlvFilterType.TLV; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxTlvFilterType.PAYLOAD_THROUGH; default: break; } } else if (mainType == TunerConstants.FILTER_TYPE_ALP) { switch (subtype) { case TunerConstants.FILTER_SUBTYPE_UNDEFINED: return Constants.DemuxAlpFilterType.UNDEFINED; case TunerConstants.FILTER_SUBTYPE_SECTION: return Constants.DemuxAlpFilterType.SECTION; case TunerConstants.FILTER_SUBTYPE_PTP: return Constants.DemuxAlpFilterType.PTP; case TunerConstants.FILTER_SUBTYPE_PAYLOAD_THROUGH: return Constants.DemuxAlpFilterType.PAYLOAD_THROUGH; default: break; } } throw new IllegalArgumentException( "Invalid filter types. Main type=" + mainType + ", subtype=" + subtype); } private TunerUtils() {} }