Loading api/system-current.txt +33 −0 Original line number Diff line number Diff line Loading @@ -5210,12 +5210,45 @@ package android.media.tv.tuner.filter { public class AvSettings extends android.media.tv.tuner.filter.Settings { method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean); method public int getAudioStreamType(); method public int getVideoStreamType(); method public boolean isPassthrough(); field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6 field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7 field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9 field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8 field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2 field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3 field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4 field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5 field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1 field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5 field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6 field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2 field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3 field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4 field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1 field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7 field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8 field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9 } public static class AvSettings.Builder { method @NonNull public android.media.tv.tuner.filter.AvSettings build(); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int); } public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent { Loading media/java/android/media/tv/tuner/filter/AvSettings.java +206 −2 Original line number Diff line number Diff line Loading @@ -16,9 +16,15 @@ package android.media.tv.tuner.filter; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.hardware.tv.tuner.V1_1.Constants; import android.media.tv.tuner.TunerUtils; import android.media.tv.tuner.TunerVersionChecker; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Filter Settings for a Video and Audio. Loading @@ -27,15 +33,160 @@ import android.media.tv.tuner.TunerUtils; */ @SystemApi public class AvSettings extends Settings { /** @hide */ @IntDef(prefix = "VIDEO_STREAM_TYPE_", value = {VIDEO_STREAM_TYPE_UNDEFINED, VIDEO_STREAM_TYPE_RESERVED, VIDEO_STREAM_TYPE_MPEG1, VIDEO_STREAM_TYPE_MPEG2, VIDEO_STREAM_TYPE_MPEG4P2, VIDEO_STREAM_TYPE_AVC, VIDEO_STREAM_TYPE_HEVC, VIDEO_STREAM_TYPE_VC1, VIDEO_STREAM_TYPE_VP8, VIDEO_STREAM_TYPE_VP9, VIDEO_STREAM_TYPE_AV1, VIDEO_STREAM_TYPE_AVS, VIDEO_STREAM_TYPE_AVS2}) @Retention(RetentionPolicy.SOURCE) public @interface VideoStreamType {} /* * Undefined Video stream type */ public static final int VIDEO_STREAM_TYPE_UNDEFINED = Constants.VideoStreamType.UNDEFINED; /* * ITU-T | ISO/IEC Reserved */ public static final int VIDEO_STREAM_TYPE_RESERVED = Constants.VideoStreamType.RESERVED; /* * ISO/IEC 11172 */ public static final int VIDEO_STREAM_TYPE_MPEG1 = Constants.VideoStreamType.MPEG1; /* * ITU-T Rec.H.262 and ISO/IEC 13818-2 */ public static final int VIDEO_STREAM_TYPE_MPEG2 = Constants.VideoStreamType.MPEG2; /* * ISO/IEC 14496-2 (MPEG-4 H.263 based video) */ public static final int VIDEO_STREAM_TYPE_MPEG4P2 = Constants.VideoStreamType.MPEG4P2; /* * ITU-T Rec.H.264 and ISO/IEC 14496-10 */ public static final int VIDEO_STREAM_TYPE_AVC = Constants.VideoStreamType.AVC; /* * ITU-T Rec. H.265 and ISO/IEC 23008-2 */ public static final int VIDEO_STREAM_TYPE_HEVC = Constants.VideoStreamType.HEVC; /* * Microsoft VC.1 */ public static final int VIDEO_STREAM_TYPE_VC1 = Constants.VideoStreamType.VC1; /* * Google VP8 */ public static final int VIDEO_STREAM_TYPE_VP8 = Constants.VideoStreamType.VP8; /* * Google VP9 */ public static final int VIDEO_STREAM_TYPE_VP9 = Constants.VideoStreamType.VP9; /* * AOMedia Video 1 */ public static final int VIDEO_STREAM_TYPE_AV1 = Constants.VideoStreamType.AV1; /* * Chinese Standard */ public static final int VIDEO_STREAM_TYPE_AVS = Constants.VideoStreamType.AVS; /* * New Chinese Standard */ public static final int VIDEO_STREAM_TYPE_AVS2 = Constants.VideoStreamType.AVS2; /** @hide */ @IntDef(prefix = "AUDIO_STREAM_TYPE_", value = {AUDIO_STREAM_TYPE_UNDEFINED, AUDIO_STREAM_TYPE_PCM, AUDIO_STREAM_TYPE_MP3, AUDIO_STREAM_TYPE_MPEG1, AUDIO_STREAM_TYPE_MPEG2, AUDIO_STREAM_TYPE_MPEGH, AUDIO_STREAM_TYPE_AAC, AUDIO_STREAM_TYPE_AC3, AUDIO_STREAM_TYPE_EAC3, AUDIO_STREAM_TYPE_AC4, AUDIO_STREAM_TYPE_DTS, AUDIO_STREAM_TYPE_DTS_HD, AUDIO_STREAM_TYPE_WMA, AUDIO_STREAM_TYPE_OPUS, AUDIO_STREAM_TYPE_VORBIS, AUDIO_STREAM_TYPE_DRA}) @Retention(RetentionPolicy.SOURCE) public @interface AudioStreamType {} /* * Undefined Audio stream type */ public static final int AUDIO_STREAM_TYPE_UNDEFINED = Constants.AudioStreamType.UNDEFINED; /* * Uncompressed Audio */ public static final int AUDIO_STREAM_TYPE_PCM = Constants.AudioStreamType.PCM; /* * MPEG Audio Layer III versions */ public static final int AUDIO_STREAM_TYPE_MP3 = Constants.AudioStreamType.MP3; /* * ISO/IEC 11172 Audio */ public static final int AUDIO_STREAM_TYPE_MPEG1 = Constants.AudioStreamType.MPEG1; /* * ISO/IEC 13818-3 */ public static final int AUDIO_STREAM_TYPE_MPEG2 = Constants.AudioStreamType.MPEG2; /* * ISO/IEC 23008-3 (MPEG-H Part 3) */ public static final int AUDIO_STREAM_TYPE_MPEGH = Constants.AudioStreamType.MPEGH; /* * ISO/IEC 14496-3 */ public static final int AUDIO_STREAM_TYPE_AAC = Constants.AudioStreamType.AAC; /* * Dolby Digital */ public static final int AUDIO_STREAM_TYPE_AC3 = Constants.AudioStreamType.AC3; /* * Dolby Digital Plus */ public static final int AUDIO_STREAM_TYPE_EAC3 = Constants.AudioStreamType.EAC3; /* * Dolby AC-4 */ public static final int AUDIO_STREAM_TYPE_AC4 = Constants.AudioStreamType.AC4; /* * Basic DTS */ public static final int AUDIO_STREAM_TYPE_DTS = Constants.AudioStreamType.DTS; /* * High Resolution DTS */ public static final int AUDIO_STREAM_TYPE_DTS_HD = Constants.AudioStreamType.DTS_HD; /* * Windows Media Audio */ public static final int AUDIO_STREAM_TYPE_WMA = Constants.AudioStreamType.WMA; /* * Opus Interactive Audio Codec */ public static final int AUDIO_STREAM_TYPE_OPUS = Constants.AudioStreamType.OPUS; /* * VORBIS Interactive Audio Codec */ public static final int AUDIO_STREAM_TYPE_VORBIS = Constants.AudioStreamType.VORBIS; /* * SJ/T 11368-2006 */ public static final int AUDIO_STREAM_TYPE_DRA = Constants.AudioStreamType.DRA; private final boolean mIsPassthrough; private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; private AvSettings(int mainType, boolean isAudio, boolean isPassthrough) { private AvSettings(int mainType, boolean isAudio, boolean isPassthrough, int audioStreamType, int videoStreamType) { super(TunerUtils.getFilterSubtype( mainType, isAudio ? Filter.SUBTYPE_AUDIO : Filter.SUBTYPE_VIDEO)); mIsPassthrough = isPassthrough; mAudioStreamType = audioStreamType; mVideoStreamType = videoStreamType; } /** Loading @@ -45,6 +196,20 @@ public class AvSettings extends Settings { return mIsPassthrough; } /** * Get the Audio Stream Type. */ public int getAudioStreamType() { return mAudioStreamType; } /** * Get the Video Stream Type. */ public int getVideoStreamType() { return mVideoStreamType; } /** * Creates a builder for {@link AvSettings}. * Loading @@ -63,6 +228,8 @@ public class AvSettings extends Settings { private final int mMainType; private final boolean mIsAudio; private boolean mIsPassthrough; private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; private Builder(int mainType, boolean isAudio) { mMainType = mainType; Loading @@ -78,12 +245,49 @@ public class AvSettings extends Settings { return this; } /** * Sets the Audio Stream Type. * * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version. * * @param audioStreamType the {@link AudioStreamType} to set. */ @NonNull public Builder setAudioStreamType(@AudioStreamType int audioStreamType) { if (TunerVersionChecker.checkHigherOrEqualVersionTo( TunerVersionChecker.TUNER_VERSION_1_1, "setAudioStreamType") && mIsAudio) { mAudioStreamType = audioStreamType; mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; } return this; } /** * Sets the Video Stream Type. * * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version. * * @param videoStreamType the {@link VideoStreamType} to set. */ @NonNull public Builder setVideoStreamType(@VideoStreamType int videoStreamType) { if (TunerVersionChecker.checkHigherOrEqualVersionTo( TunerVersionChecker.TUNER_VERSION_1_1, "setVideoStreamType") && !mIsAudio) { mVideoStreamType = videoStreamType; mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; } return this; } /** * Builds a {@link AvSettings} object. */ @NonNull public AvSettings build() { return new AvSettings(mMainType, mIsAudio, mIsPassthrough); return new AvSettings(mMainType, mIsAudio, mIsPassthrough, mAudioStreamType, mVideoStreamType); } } } media/jni/android_media_tv_Tuner.cpp +52 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,8 @@ 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; Loading @@ -157,6 +159,7 @@ 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; struct fields_t { jfieldID tunerContext; Loading Loading @@ -3488,6 +3491,31 @@ static DemuxFilterAvSettings getFilterAvSettings(JNIEnv *env, const jobject& set return filterAvSettings; } static bool getAvStreamType(JNIEnv *env, jobject filterConfigObj, AvStreamType& type) { jobject settingsObj = env->GetObjectField( filterConfigObj, env->GetFieldID( env->FindClass("android/media/tv/tuner/filter/FilterConfiguration"), "mSettings", "Landroid/media/tv/tuner/filter/Settings;")); jclass clazz = env->FindClass("android/media/tv/tuner/filter/AvSettings"); AvStreamType streamType; AudioStreamType audioStreamType = static_cast<AudioStreamType>( env->GetIntField(settingsObj, env->GetFieldID(clazz, "mAudioStreamType", "I"))); if (audioStreamType != AudioStreamType::UNDEFINED) { type.audio(audioStreamType); return true; } VideoStreamType videoStreamType = static_cast<VideoStreamType>( env->GetIntField(settingsObj, env->GetFieldID(clazz, "mVideoStreamType", "I"))); if (videoStreamType != VideoStreamType::UNDEFINED) { type.video(videoStreamType); return true; } return false; } static DemuxFilterPesDataSettings getFilterPesDataSettings(JNIEnv *env, const jobject& settings) { jclass clazz = env->FindClass("android/media/tv/tuner/filter/PesSettings"); uint16_t streamId = static_cast<uint16_t>( Loading Loading @@ -3810,6 +3838,16 @@ static jint copyData(JNIEnv *env, std::unique_ptr<MQ>& mq, EventFlag* flag, jbyt return size; } 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); } 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); Loading @@ -3833,6 +3871,20 @@ static jint android_media_tv_Tuner_configure_filter( } } AvStreamType streamType; if (isAvFilterSettings(filterSettings) && getAvStreamType(env, settings, streamType)) { sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1; iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp); if (iFilterSp_1_1 != NULL) { res = iFilterSp_1_1->configureAvStreamType(streamType); } else { ALOGW("configureAvStreamType is not supported with the current HAL implementation."); } if (res != Result::SUCCESS) { return (jint) res; } } MQDescriptorSync<uint8_t> filterMQDesc; Result getQueueDescResult = Result::UNKNOWN_ERROR; if (filterSp->mFilterMQ == NULL) { Loading non-updatable-api/system-current.txt +33 −0 Original line number Diff line number Diff line Loading @@ -5150,12 +5150,45 @@ package android.media.tv.tuner.filter { public class AvSettings extends android.media.tv.tuner.filter.Settings { method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean); method public int getAudioStreamType(); method public int getVideoStreamType(); method public boolean isPassthrough(); field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6 field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7 field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9 field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8 field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2 field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3 field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4 field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5 field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1 field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5 field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6 field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2 field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3 field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4 field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1 field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7 field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8 field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9 } public static class AvSettings.Builder { method @NonNull public android.media.tv.tuner.filter.AvSettings build(); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int); } public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent { Loading Loading
api/system-current.txt +33 −0 Original line number Diff line number Diff line Loading @@ -5210,12 +5210,45 @@ package android.media.tv.tuner.filter { public class AvSettings extends android.media.tv.tuner.filter.Settings { method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean); method public int getAudioStreamType(); method public int getVideoStreamType(); method public boolean isPassthrough(); field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6 field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7 field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9 field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8 field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2 field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3 field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4 field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5 field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1 field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5 field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6 field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2 field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3 field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4 field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1 field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7 field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8 field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9 } public static class AvSettings.Builder { method @NonNull public android.media.tv.tuner.filter.AvSettings build(); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int); } public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent { Loading
media/java/android/media/tv/tuner/filter/AvSettings.java +206 −2 Original line number Diff line number Diff line Loading @@ -16,9 +16,15 @@ package android.media.tv.tuner.filter; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.SystemApi; import android.hardware.tv.tuner.V1_1.Constants; import android.media.tv.tuner.TunerUtils; import android.media.tv.tuner.TunerVersionChecker; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Filter Settings for a Video and Audio. Loading @@ -27,15 +33,160 @@ import android.media.tv.tuner.TunerUtils; */ @SystemApi public class AvSettings extends Settings { /** @hide */ @IntDef(prefix = "VIDEO_STREAM_TYPE_", value = {VIDEO_STREAM_TYPE_UNDEFINED, VIDEO_STREAM_TYPE_RESERVED, VIDEO_STREAM_TYPE_MPEG1, VIDEO_STREAM_TYPE_MPEG2, VIDEO_STREAM_TYPE_MPEG4P2, VIDEO_STREAM_TYPE_AVC, VIDEO_STREAM_TYPE_HEVC, VIDEO_STREAM_TYPE_VC1, VIDEO_STREAM_TYPE_VP8, VIDEO_STREAM_TYPE_VP9, VIDEO_STREAM_TYPE_AV1, VIDEO_STREAM_TYPE_AVS, VIDEO_STREAM_TYPE_AVS2}) @Retention(RetentionPolicy.SOURCE) public @interface VideoStreamType {} /* * Undefined Video stream type */ public static final int VIDEO_STREAM_TYPE_UNDEFINED = Constants.VideoStreamType.UNDEFINED; /* * ITU-T | ISO/IEC Reserved */ public static final int VIDEO_STREAM_TYPE_RESERVED = Constants.VideoStreamType.RESERVED; /* * ISO/IEC 11172 */ public static final int VIDEO_STREAM_TYPE_MPEG1 = Constants.VideoStreamType.MPEG1; /* * ITU-T Rec.H.262 and ISO/IEC 13818-2 */ public static final int VIDEO_STREAM_TYPE_MPEG2 = Constants.VideoStreamType.MPEG2; /* * ISO/IEC 14496-2 (MPEG-4 H.263 based video) */ public static final int VIDEO_STREAM_TYPE_MPEG4P2 = Constants.VideoStreamType.MPEG4P2; /* * ITU-T Rec.H.264 and ISO/IEC 14496-10 */ public static final int VIDEO_STREAM_TYPE_AVC = Constants.VideoStreamType.AVC; /* * ITU-T Rec. H.265 and ISO/IEC 23008-2 */ public static final int VIDEO_STREAM_TYPE_HEVC = Constants.VideoStreamType.HEVC; /* * Microsoft VC.1 */ public static final int VIDEO_STREAM_TYPE_VC1 = Constants.VideoStreamType.VC1; /* * Google VP8 */ public static final int VIDEO_STREAM_TYPE_VP8 = Constants.VideoStreamType.VP8; /* * Google VP9 */ public static final int VIDEO_STREAM_TYPE_VP9 = Constants.VideoStreamType.VP9; /* * AOMedia Video 1 */ public static final int VIDEO_STREAM_TYPE_AV1 = Constants.VideoStreamType.AV1; /* * Chinese Standard */ public static final int VIDEO_STREAM_TYPE_AVS = Constants.VideoStreamType.AVS; /* * New Chinese Standard */ public static final int VIDEO_STREAM_TYPE_AVS2 = Constants.VideoStreamType.AVS2; /** @hide */ @IntDef(prefix = "AUDIO_STREAM_TYPE_", value = {AUDIO_STREAM_TYPE_UNDEFINED, AUDIO_STREAM_TYPE_PCM, AUDIO_STREAM_TYPE_MP3, AUDIO_STREAM_TYPE_MPEG1, AUDIO_STREAM_TYPE_MPEG2, AUDIO_STREAM_TYPE_MPEGH, AUDIO_STREAM_TYPE_AAC, AUDIO_STREAM_TYPE_AC3, AUDIO_STREAM_TYPE_EAC3, AUDIO_STREAM_TYPE_AC4, AUDIO_STREAM_TYPE_DTS, AUDIO_STREAM_TYPE_DTS_HD, AUDIO_STREAM_TYPE_WMA, AUDIO_STREAM_TYPE_OPUS, AUDIO_STREAM_TYPE_VORBIS, AUDIO_STREAM_TYPE_DRA}) @Retention(RetentionPolicy.SOURCE) public @interface AudioStreamType {} /* * Undefined Audio stream type */ public static final int AUDIO_STREAM_TYPE_UNDEFINED = Constants.AudioStreamType.UNDEFINED; /* * Uncompressed Audio */ public static final int AUDIO_STREAM_TYPE_PCM = Constants.AudioStreamType.PCM; /* * MPEG Audio Layer III versions */ public static final int AUDIO_STREAM_TYPE_MP3 = Constants.AudioStreamType.MP3; /* * ISO/IEC 11172 Audio */ public static final int AUDIO_STREAM_TYPE_MPEG1 = Constants.AudioStreamType.MPEG1; /* * ISO/IEC 13818-3 */ public static final int AUDIO_STREAM_TYPE_MPEG2 = Constants.AudioStreamType.MPEG2; /* * ISO/IEC 23008-3 (MPEG-H Part 3) */ public static final int AUDIO_STREAM_TYPE_MPEGH = Constants.AudioStreamType.MPEGH; /* * ISO/IEC 14496-3 */ public static final int AUDIO_STREAM_TYPE_AAC = Constants.AudioStreamType.AAC; /* * Dolby Digital */ public static final int AUDIO_STREAM_TYPE_AC3 = Constants.AudioStreamType.AC3; /* * Dolby Digital Plus */ public static final int AUDIO_STREAM_TYPE_EAC3 = Constants.AudioStreamType.EAC3; /* * Dolby AC-4 */ public static final int AUDIO_STREAM_TYPE_AC4 = Constants.AudioStreamType.AC4; /* * Basic DTS */ public static final int AUDIO_STREAM_TYPE_DTS = Constants.AudioStreamType.DTS; /* * High Resolution DTS */ public static final int AUDIO_STREAM_TYPE_DTS_HD = Constants.AudioStreamType.DTS_HD; /* * Windows Media Audio */ public static final int AUDIO_STREAM_TYPE_WMA = Constants.AudioStreamType.WMA; /* * Opus Interactive Audio Codec */ public static final int AUDIO_STREAM_TYPE_OPUS = Constants.AudioStreamType.OPUS; /* * VORBIS Interactive Audio Codec */ public static final int AUDIO_STREAM_TYPE_VORBIS = Constants.AudioStreamType.VORBIS; /* * SJ/T 11368-2006 */ public static final int AUDIO_STREAM_TYPE_DRA = Constants.AudioStreamType.DRA; private final boolean mIsPassthrough; private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; private AvSettings(int mainType, boolean isAudio, boolean isPassthrough) { private AvSettings(int mainType, boolean isAudio, boolean isPassthrough, int audioStreamType, int videoStreamType) { super(TunerUtils.getFilterSubtype( mainType, isAudio ? Filter.SUBTYPE_AUDIO : Filter.SUBTYPE_VIDEO)); mIsPassthrough = isPassthrough; mAudioStreamType = audioStreamType; mVideoStreamType = videoStreamType; } /** Loading @@ -45,6 +196,20 @@ public class AvSettings extends Settings { return mIsPassthrough; } /** * Get the Audio Stream Type. */ public int getAudioStreamType() { return mAudioStreamType; } /** * Get the Video Stream Type. */ public int getVideoStreamType() { return mVideoStreamType; } /** * Creates a builder for {@link AvSettings}. * Loading @@ -63,6 +228,8 @@ public class AvSettings extends Settings { private final int mMainType; private final boolean mIsAudio; private boolean mIsPassthrough; private int mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; private int mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; private Builder(int mainType, boolean isAudio) { mMainType = mainType; Loading @@ -78,12 +245,49 @@ public class AvSettings extends Settings { return this; } /** * Sets the Audio Stream Type. * * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version. * * @param audioStreamType the {@link AudioStreamType} to set. */ @NonNull public Builder setAudioStreamType(@AudioStreamType int audioStreamType) { if (TunerVersionChecker.checkHigherOrEqualVersionTo( TunerVersionChecker.TUNER_VERSION_1_1, "setAudioStreamType") && mIsAudio) { mAudioStreamType = audioStreamType; mVideoStreamType = VIDEO_STREAM_TYPE_UNDEFINED; } return this; } /** * Sets the Video Stream Type. * * <p>This API is only supported by Tuner HAL 1.1 or higher. Unsupported version would cause * no-op. Use {@link TunerVersionChecker.getTunerVersion()} to check the version. * * @param videoStreamType the {@link VideoStreamType} to set. */ @NonNull public Builder setVideoStreamType(@VideoStreamType int videoStreamType) { if (TunerVersionChecker.checkHigherOrEqualVersionTo( TunerVersionChecker.TUNER_VERSION_1_1, "setVideoStreamType") && !mIsAudio) { mVideoStreamType = videoStreamType; mAudioStreamType = AUDIO_STREAM_TYPE_UNDEFINED; } return this; } /** * Builds a {@link AvSettings} object. */ @NonNull public AvSettings build() { return new AvSettings(mMainType, mIsAudio, mIsPassthrough); return new AvSettings(mMainType, mIsAudio, mIsPassthrough, mAudioStreamType, mVideoStreamType); } } }
media/jni/android_media_tv_Tuner.cpp +52 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,8 @@ 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; Loading @@ -157,6 +159,7 @@ 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; struct fields_t { jfieldID tunerContext; Loading Loading @@ -3488,6 +3491,31 @@ static DemuxFilterAvSettings getFilterAvSettings(JNIEnv *env, const jobject& set return filterAvSettings; } static bool getAvStreamType(JNIEnv *env, jobject filterConfigObj, AvStreamType& type) { jobject settingsObj = env->GetObjectField( filterConfigObj, env->GetFieldID( env->FindClass("android/media/tv/tuner/filter/FilterConfiguration"), "mSettings", "Landroid/media/tv/tuner/filter/Settings;")); jclass clazz = env->FindClass("android/media/tv/tuner/filter/AvSettings"); AvStreamType streamType; AudioStreamType audioStreamType = static_cast<AudioStreamType>( env->GetIntField(settingsObj, env->GetFieldID(clazz, "mAudioStreamType", "I"))); if (audioStreamType != AudioStreamType::UNDEFINED) { type.audio(audioStreamType); return true; } VideoStreamType videoStreamType = static_cast<VideoStreamType>( env->GetIntField(settingsObj, env->GetFieldID(clazz, "mVideoStreamType", "I"))); if (videoStreamType != VideoStreamType::UNDEFINED) { type.video(videoStreamType); return true; } return false; } static DemuxFilterPesDataSettings getFilterPesDataSettings(JNIEnv *env, const jobject& settings) { jclass clazz = env->FindClass("android/media/tv/tuner/filter/PesSettings"); uint16_t streamId = static_cast<uint16_t>( Loading Loading @@ -3810,6 +3838,16 @@ static jint copyData(JNIEnv *env, std::unique_ptr<MQ>& mq, EventFlag* flag, jbyt return size; } 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); } 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); Loading @@ -3833,6 +3871,20 @@ static jint android_media_tv_Tuner_configure_filter( } } AvStreamType streamType; if (isAvFilterSettings(filterSettings) && getAvStreamType(env, settings, streamType)) { sp<::android::hardware::tv::tuner::V1_1::IFilter> iFilterSp_1_1; iFilterSp_1_1 = ::android::hardware::tv::tuner::V1_1::IFilter::castFrom(iFilterSp); if (iFilterSp_1_1 != NULL) { res = iFilterSp_1_1->configureAvStreamType(streamType); } else { ALOGW("configureAvStreamType is not supported with the current HAL implementation."); } if (res != Result::SUCCESS) { return (jint) res; } } MQDescriptorSync<uint8_t> filterMQDesc; Result getQueueDescResult = Result::UNKNOWN_ERROR; if (filterSp->mFilterMQ == NULL) { Loading
non-updatable-api/system-current.txt +33 −0 Original line number Diff line number Diff line Loading @@ -5150,12 +5150,45 @@ package android.media.tv.tuner.filter { public class AvSettings extends android.media.tv.tuner.filter.Settings { method @NonNull public static android.media.tv.tuner.filter.AvSettings.Builder builder(int, boolean); method public int getAudioStreamType(); method public int getVideoStreamType(); method public boolean isPassthrough(); field public static final int AUDIO_STREAM_TYPE_AAC = 6; // 0x6 field public static final int AUDIO_STREAM_TYPE_AC3 = 7; // 0x7 field public static final int AUDIO_STREAM_TYPE_AC4 = 9; // 0x9 field public static final int AUDIO_STREAM_TYPE_DRA = 15; // 0xf field public static final int AUDIO_STREAM_TYPE_DTS = 10; // 0xa field public static final int AUDIO_STREAM_TYPE_DTS_HD = 11; // 0xb field public static final int AUDIO_STREAM_TYPE_EAC3 = 8; // 0x8 field public static final int AUDIO_STREAM_TYPE_MP3 = 2; // 0x2 field public static final int AUDIO_STREAM_TYPE_MPEG1 = 3; // 0x3 field public static final int AUDIO_STREAM_TYPE_MPEG2 = 4; // 0x4 field public static final int AUDIO_STREAM_TYPE_MPEGH = 5; // 0x5 field public static final int AUDIO_STREAM_TYPE_OPUS = 13; // 0xd field public static final int AUDIO_STREAM_TYPE_PCM = 1; // 0x1 field public static final int AUDIO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int AUDIO_STREAM_TYPE_VORBIS = 14; // 0xe field public static final int AUDIO_STREAM_TYPE_WMA = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_AV1 = 10; // 0xa field public static final int VIDEO_STREAM_TYPE_AVC = 5; // 0x5 field public static final int VIDEO_STREAM_TYPE_AVS = 11; // 0xb field public static final int VIDEO_STREAM_TYPE_AVS2 = 12; // 0xc field public static final int VIDEO_STREAM_TYPE_HEVC = 6; // 0x6 field public static final int VIDEO_STREAM_TYPE_MPEG1 = 2; // 0x2 field public static final int VIDEO_STREAM_TYPE_MPEG2 = 3; // 0x3 field public static final int VIDEO_STREAM_TYPE_MPEG4P2 = 4; // 0x4 field public static final int VIDEO_STREAM_TYPE_RESERVED = 1; // 0x1 field public static final int VIDEO_STREAM_TYPE_UNDEFINED = 0; // 0x0 field public static final int VIDEO_STREAM_TYPE_VC1 = 7; // 0x7 field public static final int VIDEO_STREAM_TYPE_VP8 = 8; // 0x8 field public static final int VIDEO_STREAM_TYPE_VP9 = 9; // 0x9 } public static class AvSettings.Builder { method @NonNull public android.media.tv.tuner.filter.AvSettings build(); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setAudioStreamType(int); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setPassthrough(boolean); method @NonNull public android.media.tv.tuner.filter.AvSettings.Builder setVideoStreamType(int); } public class DownloadEvent extends android.media.tv.tuner.filter.FilterEvent { Loading