Loading services/core/java/com/android/server/media/quality/MediaQualityService.java +59 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.hardware.tv.mediaquality.SoundParameter; import android.hardware.tv.mediaquality.SoundParameters; import android.hardware.tv.mediaquality.StreamStatus; import android.hardware.tv.mediaquality.VendorParamCapability; import android.hardware.tv.mediaquality.VendorParameterIdentifier; import android.media.quality.ActiveProcessingPicture; import android.media.quality.AmbientBacklightEvent; import android.media.quality.AmbientBacklightMetadata; Loading Loading @@ -1053,10 +1054,45 @@ public class MediaQualityService extends SystemService { Slog.e(TAG, "Failed to get parameter capabilities", e); } return getListParameterCapability(caps); //Handle vendor parameter capability. MediaQualityUtils.getVendorParamsByRemovePreDefineParams(names); int namesCount = names.size(); VendorParamCapability[] vendorParamCapabilities = new VendorParamCapability[namesCount]; if (!names.isEmpty()) { List<VendorParameterIdentifier> vendorParamIdentifiersList = new ArrayList<>(); for (String name: names){ DefaultExtension vendorParamCapDefaultExtension = new DefaultExtension(); Parcel vendorParamCapParcel = Parcel.obtain(); vendorParamCapParcel.writeString(name); vendorParamCapDefaultExtension.bytes = vendorParamCapParcel.marshall(); VendorParameterIdentifier vendorParamIdentifier = new VendorParameterIdentifier(); vendorParamIdentifier.identifier.setParcelable(vendorParamCapDefaultExtension); vendorParamIdentifiersList.add(vendorParamIdentifier); vendorParamCapParcel.recycle(); } VendorParameterIdentifier[] vendorParamIdentifierArray = new VendorParameterIdentifier[namesCount]; for (int i = 0; i < namesCount; i++) { vendorParamIdentifierArray[i] = vendorParamIdentifiersList.get(i); } try { mMediaQuality.getVendorParamCaps( vendorParamIdentifierArray, vendorParamCapabilities); } catch (RemoteException e) { Slog.e(TAG, "Failed to get vendor parameter capabilities", e); } } return getParameterCapabilityList(caps, vendorParamCapabilities); } private List<ParameterCapability> getListParameterCapability(ParamCapability[] caps) { private List<ParameterCapability> getParameterCapabilityList( ParamCapability[] caps, VendorParamCapability[] vendorParamCaps) { List<ParameterCapability> pcList = new ArrayList<>(); if (caps != null) { Loading @@ -1072,6 +1108,27 @@ public class MediaQualityService extends SystemService { } } if (vendorParamCaps != null) { for (VendorParamCapability vpcHal : vendorParamCaps) { if (vpcHal != null) { String name = MediaQualityUtils.getVendorParameterName(vpcHal); boolean isSupported = vpcHal.isSupported; // The default value for VendorParamCapability in HAL is IntValue = 0, // LongValue = 1, DoubleValue = 2, StringValue = 3. The default value for // ParameterCapability in the framework is None = 0, IntValue = 1, // LongValue = 2, DoubleValue = 3, StringValue = 4. So +1 here to map the // default value in HAL with framework. int type = vpcHal.defaultValue == null ? 0 : vpcHal.defaultValue.getTag() + 1; Bundle paramRangeBundle = MediaQualityUtils.convertToCaps( type, vpcHal.range); MediaQualityUtils.convertToVendorCaps(vpcHal, paramRangeBundle); pcList.add(new ParameterCapability( name, isSupported, type, paramRangeBundle)); } } } return pcList; } Loading services/core/java/com/android/server/media/quality/MediaQualityUtils.java +42 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.media.quality; import android.content.ContentValues; import android.database.Cursor; import android.hardware.audio.effect.DefaultExtension; import android.hardware.tv.mediaquality.ColorRange; import android.hardware.tv.mediaquality.ColorSpace; import android.hardware.tv.mediaquality.ColorTemperature; Loading @@ -31,6 +32,7 @@ import android.hardware.tv.mediaquality.PictureParameter; import android.hardware.tv.mediaquality.PictureQualityEventType; import android.hardware.tv.mediaquality.QualityLevel; import android.hardware.tv.mediaquality.SoundParameter; import android.hardware.tv.mediaquality.VendorParamCapability; import android.media.quality.MediaQualityContract; import android.media.quality.MediaQualityContract.BaseParameters; import android.media.quality.MediaQualityContract.PictureQuality; Loading @@ -41,6 +43,7 @@ import android.media.quality.PictureProfileHandle; import android.media.quality.SoundProfile; import android.media.quality.SoundProfileHandle; import android.os.Bundle; import android.os.Parcel; import android.os.PersistableBundle; import android.util.Log; Loading @@ -54,6 +57,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; Loading Loading @@ -1764,7 +1768,7 @@ public final class MediaQualityUtils { return byteArray; } public void getVendorParamsByRemovePreDefineParams(List<String> names) { public static void getVendorParamsByRemovePreDefineParams(List<String> names) { if (names == null) { return; } Loading Loading @@ -1948,6 +1952,21 @@ public final class MediaQualityUtils { return parameterNameMap.get(pn); } /** * Get vendor parameter name. */ public static String getVendorParameterName(VendorParamCapability vpcHal) { byte[] vendorParamCapByteArray = Objects.requireNonNull( vpcHal.identifier.identifier.getParcelable(DefaultExtension.class)).bytes; Parcel vendorParamNameParcel = Parcel.obtain(); vendorParamNameParcel.unmarshall( vendorParamCapByteArray, 0, vendorParamCapByteArray.length); vendorParamNameParcel.setDataPosition(0); String name = vendorParamNameParcel.readString(); vendorParamNameParcel.recycle(); return name; } /** * Convert ParameterRange to a Bundle. */ Loading @@ -1972,6 +1991,28 @@ public final class MediaQualityUtils { return bundle; } /** * Retrieve the vendor parameter capability from the HAL and stores in the bundle. * @param vpcHal vendor param capability from the HAL. Contains information about the param * Identifier, is supported, default value and range. * @param paramRangeBundle bundle that will contains vendor param defined values. */ public static void convertToVendorCaps(VendorParamCapability vpcHal, Bundle paramRangeBundle) { byte[] vendorParamCapRangeByteArray = Objects.requireNonNull( vpcHal.range.vendorDefinedValues.getParcelable( DefaultExtension.class)).bytes; Parcel vendorParamCapRangeParcel = Parcel.obtain(); vendorParamCapRangeParcel.unmarshall( vendorParamCapRangeByteArray, 0, vendorParamCapRangeByteArray.length); vendorParamCapRangeParcel.setDataPosition(0); int vendorDefinedValuesSize = vendorParamCapRangeParcel.readInt(); vendorParamCapRangeParcel.setDataPosition(0); String[] vendorDefinedValues = new String[vendorDefinedValuesSize]; vendorParamCapRangeParcel.readStringArray(vendorDefinedValues); paramRangeBundle.putStringArray(ParameterCapability.CAPABILITY_ENUM, vendorDefinedValues); vendorParamCapRangeParcel.recycle(); } private static String getTempId(BiMap<Long, String> map, Cursor cursor) { int colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_ID); Long dbId = colIndex != -1 ? cursor.getLong(colIndex) : null; Loading Loading
services/core/java/com/android/server/media/quality/MediaQualityService.java +59 −2 Original line number Diff line number Diff line Loading @@ -42,6 +42,7 @@ import android.hardware.tv.mediaquality.SoundParameter; import android.hardware.tv.mediaquality.SoundParameters; import android.hardware.tv.mediaquality.StreamStatus; import android.hardware.tv.mediaquality.VendorParamCapability; import android.hardware.tv.mediaquality.VendorParameterIdentifier; import android.media.quality.ActiveProcessingPicture; import android.media.quality.AmbientBacklightEvent; import android.media.quality.AmbientBacklightMetadata; Loading Loading @@ -1053,10 +1054,45 @@ public class MediaQualityService extends SystemService { Slog.e(TAG, "Failed to get parameter capabilities", e); } return getListParameterCapability(caps); //Handle vendor parameter capability. MediaQualityUtils.getVendorParamsByRemovePreDefineParams(names); int namesCount = names.size(); VendorParamCapability[] vendorParamCapabilities = new VendorParamCapability[namesCount]; if (!names.isEmpty()) { List<VendorParameterIdentifier> vendorParamIdentifiersList = new ArrayList<>(); for (String name: names){ DefaultExtension vendorParamCapDefaultExtension = new DefaultExtension(); Parcel vendorParamCapParcel = Parcel.obtain(); vendorParamCapParcel.writeString(name); vendorParamCapDefaultExtension.bytes = vendorParamCapParcel.marshall(); VendorParameterIdentifier vendorParamIdentifier = new VendorParameterIdentifier(); vendorParamIdentifier.identifier.setParcelable(vendorParamCapDefaultExtension); vendorParamIdentifiersList.add(vendorParamIdentifier); vendorParamCapParcel.recycle(); } VendorParameterIdentifier[] vendorParamIdentifierArray = new VendorParameterIdentifier[namesCount]; for (int i = 0; i < namesCount; i++) { vendorParamIdentifierArray[i] = vendorParamIdentifiersList.get(i); } try { mMediaQuality.getVendorParamCaps( vendorParamIdentifierArray, vendorParamCapabilities); } catch (RemoteException e) { Slog.e(TAG, "Failed to get vendor parameter capabilities", e); } } return getParameterCapabilityList(caps, vendorParamCapabilities); } private List<ParameterCapability> getListParameterCapability(ParamCapability[] caps) { private List<ParameterCapability> getParameterCapabilityList( ParamCapability[] caps, VendorParamCapability[] vendorParamCaps) { List<ParameterCapability> pcList = new ArrayList<>(); if (caps != null) { Loading @@ -1072,6 +1108,27 @@ public class MediaQualityService extends SystemService { } } if (vendorParamCaps != null) { for (VendorParamCapability vpcHal : vendorParamCaps) { if (vpcHal != null) { String name = MediaQualityUtils.getVendorParameterName(vpcHal); boolean isSupported = vpcHal.isSupported; // The default value for VendorParamCapability in HAL is IntValue = 0, // LongValue = 1, DoubleValue = 2, StringValue = 3. The default value for // ParameterCapability in the framework is None = 0, IntValue = 1, // LongValue = 2, DoubleValue = 3, StringValue = 4. So +1 here to map the // default value in HAL with framework. int type = vpcHal.defaultValue == null ? 0 : vpcHal.defaultValue.getTag() + 1; Bundle paramRangeBundle = MediaQualityUtils.convertToCaps( type, vpcHal.range); MediaQualityUtils.convertToVendorCaps(vpcHal, paramRangeBundle); pcList.add(new ParameterCapability( name, isSupported, type, paramRangeBundle)); } } } return pcList; } Loading
services/core/java/com/android/server/media/quality/MediaQualityUtils.java +42 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.server.media.quality; import android.content.ContentValues; import android.database.Cursor; import android.hardware.audio.effect.DefaultExtension; import android.hardware.tv.mediaquality.ColorRange; import android.hardware.tv.mediaquality.ColorSpace; import android.hardware.tv.mediaquality.ColorTemperature; Loading @@ -31,6 +32,7 @@ import android.hardware.tv.mediaquality.PictureParameter; import android.hardware.tv.mediaquality.PictureQualityEventType; import android.hardware.tv.mediaquality.QualityLevel; import android.hardware.tv.mediaquality.SoundParameter; import android.hardware.tv.mediaquality.VendorParamCapability; import android.media.quality.MediaQualityContract; import android.media.quality.MediaQualityContract.BaseParameters; import android.media.quality.MediaQualityContract.PictureQuality; Loading @@ -41,6 +43,7 @@ import android.media.quality.PictureProfileHandle; import android.media.quality.SoundProfile; import android.media.quality.SoundProfileHandle; import android.os.Bundle; import android.os.Parcel; import android.os.PersistableBundle; import android.util.Log; Loading @@ -54,6 +57,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.UUID; Loading Loading @@ -1764,7 +1768,7 @@ public final class MediaQualityUtils { return byteArray; } public void getVendorParamsByRemovePreDefineParams(List<String> names) { public static void getVendorParamsByRemovePreDefineParams(List<String> names) { if (names == null) { return; } Loading Loading @@ -1948,6 +1952,21 @@ public final class MediaQualityUtils { return parameterNameMap.get(pn); } /** * Get vendor parameter name. */ public static String getVendorParameterName(VendorParamCapability vpcHal) { byte[] vendorParamCapByteArray = Objects.requireNonNull( vpcHal.identifier.identifier.getParcelable(DefaultExtension.class)).bytes; Parcel vendorParamNameParcel = Parcel.obtain(); vendorParamNameParcel.unmarshall( vendorParamCapByteArray, 0, vendorParamCapByteArray.length); vendorParamNameParcel.setDataPosition(0); String name = vendorParamNameParcel.readString(); vendorParamNameParcel.recycle(); return name; } /** * Convert ParameterRange to a Bundle. */ Loading @@ -1972,6 +1991,28 @@ public final class MediaQualityUtils { return bundle; } /** * Retrieve the vendor parameter capability from the HAL and stores in the bundle. * @param vpcHal vendor param capability from the HAL. Contains information about the param * Identifier, is supported, default value and range. * @param paramRangeBundle bundle that will contains vendor param defined values. */ public static void convertToVendorCaps(VendorParamCapability vpcHal, Bundle paramRangeBundle) { byte[] vendorParamCapRangeByteArray = Objects.requireNonNull( vpcHal.range.vendorDefinedValues.getParcelable( DefaultExtension.class)).bytes; Parcel vendorParamCapRangeParcel = Parcel.obtain(); vendorParamCapRangeParcel.unmarshall( vendorParamCapRangeByteArray, 0, vendorParamCapRangeByteArray.length); vendorParamCapRangeParcel.setDataPosition(0); int vendorDefinedValuesSize = vendorParamCapRangeParcel.readInt(); vendorParamCapRangeParcel.setDataPosition(0); String[] vendorDefinedValues = new String[vendorDefinedValuesSize]; vendorParamCapRangeParcel.readStringArray(vendorDefinedValues); paramRangeBundle.putStringArray(ParameterCapability.CAPABILITY_ENUM, vendorDefinedValues); vendorParamCapRangeParcel.recycle(); } private static String getTempId(BiMap<Long, String> map, Cursor cursor) { int colIndex = cursor.getColumnIndex(BaseParameters.PARAMETER_ID); Long dbId = colIndex != -1 ? cursor.getLong(colIndex) : null; Loading