Loading media/java/android/media/quality/MediaQualityContract.java +37 −1 Original line number Diff line number Diff line Loading @@ -72,6 +72,43 @@ public class MediaQualityContract { */ public static final String LEVEL_OFF = "level_off"; /** @hide */ @Retention(RetentionPolicy.SOURCE) @StringDef(prefix = "COLOR_TEMP", value = { COLOR_TEMP_USER, COLOR_TEMP_COOL, COLOR_TEMP_STANDARD, COLOR_TEMP_WARM, COLOR_TEMP_USER_HDR10PLUS, COLOR_TEMP_COOL_HDR10PLUS, COLOR_TEMP_STANDARD_HDR10PLUS, COLOR_TEMP_WARM_HDR10PLUS, COLOR_TEMP_FMMSDR, COLOR_TEMP_FMMHDR, }) public @interface ColorTempValue {} /** @hide */ public static final String COLOR_TEMP_USER = "color_temp_user"; /** @hide */ public static final String COLOR_TEMP_COOL = "color_temp_cool"; /** @hide */ public static final String COLOR_TEMP_STANDARD = "color_temp_standard"; /** @hide */ public static final String COLOR_TEMP_WARM = "color_temp_warm"; /** @hide */ public static final String COLOR_TEMP_USER_HDR10PLUS = "color_temp_user_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_COOL_HDR10PLUS = "color_temp_cool_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_STANDARD_HDR10PLUS = "color_temp_standard_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_WARM_HDR10PLUS = "color_temp_warm_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_FMMSDR = "color_temp_fmmsdr"; /** @hide */ public static final String COLOR_TEMP_FMMHDR = "color_temp_fmmhdr"; /** * @hide Loading @@ -82,7 +119,6 @@ public class MediaQualityContract { String PARAMETER_NAME = "_name"; String PARAMETER_PACKAGE = "_package"; String PARAMETER_INPUT_ID = "_input_id"; String VENDOR_PARAMETERS = "_vendor_parameters"; } /** Loading services/core/java/com/android/server/media/quality/MediaQualityUtils.java +230 −28 Original line number Diff line number Diff line Loading @@ -18,13 +18,20 @@ package com.android.server.media.quality; import android.content.ContentValues; import android.database.Cursor; import android.hardware.tv.mediaquality.ColorRange; import android.hardware.tv.mediaquality.ColorSpace; import android.hardware.tv.mediaquality.ColorTemperature; import android.hardware.tv.mediaquality.DolbyAudioProcessing; import android.hardware.tv.mediaquality.DtsVirtualX; import android.hardware.tv.mediaquality.Gamma; import android.hardware.tv.mediaquality.ParameterDefaultValue; import android.hardware.tv.mediaquality.ParameterName; import android.hardware.tv.mediaquality.ParameterRange; 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.media.quality.MediaQualityContract; import android.media.quality.MediaQualityContract.BaseParameters; import android.media.quality.MediaQualityContract.PictureQuality; import android.media.quality.MediaQualityContract.SoundQuality; Loading Loading @@ -371,7 +378,7 @@ public final class MediaQualityUtils { } List<PictureParameter> pictureParams = new ArrayList<>(); if (params.containsKey(PictureQuality.PARAMETER_BRIGHTNESS)) { pictureParams.add(PictureParameter.brightness(params.getLong( pictureParams.add(PictureParameter.brightness((float) params.getDouble( PictureQuality.PARAMETER_BRIGHTNESS))); params.remove(PictureQuality.PARAMETER_BRIGHTNESS); } Loading Loading @@ -441,28 +448,46 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_BLUE_GAIN); } if (params.containsKey(PictureQuality.PARAMETER_NOISE_REDUCTION)) { pictureParams.add(PictureParameter.noiseReduction( (byte) params.getInt(PictureQuality.PARAMETER_NOISE_REDUCTION))); String noiseReductionString = params.getString( PictureQuality.PARAMETER_NOISE_REDUCTION); if (noiseReductionString != null) { byte noiseReductionByte = mapQualityLevel(noiseReductionString); pictureParams.add(PictureParameter.noiseReduction(noiseReductionByte)); } params.remove(PictureQuality.PARAMETER_NOISE_REDUCTION); } if (params.containsKey(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION)) { pictureParams.add(PictureParameter.mpegNoiseReduction( (byte) params.getInt(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION))); String mpegNoiseReductionString = params.getString( PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION); if (mpegNoiseReductionString != null) { byte mpegNoiseReductionByte = mapQualityLevel(mpegNoiseReductionString); pictureParams.add(PictureParameter.mpegNoiseReduction(mpegNoiseReductionByte)); } params.remove(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION); } if (params.containsKey(PictureQuality.PARAMETER_FLESH_TONE)) { pictureParams.add(PictureParameter.fleshTone( (byte) params.getInt(PictureQuality.PARAMETER_FLESH_TONE))); String fleshToneString = params.getString(PictureQuality.PARAMETER_FLESH_TONE); if (fleshToneString != null) { byte fleshToneByte = mapQualityLevel(fleshToneString); pictureParams.add(PictureParameter.fleshTone(fleshToneByte)); } params.remove(PictureQuality.PARAMETER_FLESH_TONE); } if (params.containsKey(PictureQuality.PARAMETER_DECONTOUR)) { pictureParams.add(PictureParameter.deContour( (byte) params.getInt(PictureQuality.PARAMETER_DECONTOUR))); String decontourString = params.getString(PictureQuality.PARAMETER_DECONTOUR); if (decontourString != null) { byte decontourByte = mapQualityLevel(decontourString); pictureParams.add(PictureParameter.deContour(decontourByte)); } params.remove(PictureQuality.PARAMETER_DECONTOUR); } if (params.containsKey(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL)) { pictureParams.add(PictureParameter.dynamicLumaControl( (byte) params.getInt(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL))); String dynamicLunaControlString = params.getString( PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL); if (dynamicLunaControlString != null) { byte dynamicLunaControlByte = mapQualityLevel(dynamicLunaControlString); pictureParams.add(PictureParameter.dynamicLumaControl(dynamicLunaControlByte)); } params.remove(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL); } if (params.containsKey(PictureQuality.PARAMETER_FILM_MODE)) { Loading @@ -481,9 +506,48 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNE); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_TEMPERATURE)) { pictureParams.add(PictureParameter.colorTemperature( (byte) params.getInt( PictureQuality.PARAMETER_COLOR_TEMPERATURE))); String colorTemperatureString = params.getString( PictureQuality.PARAMETER_COLOR_TEMPERATURE); if (colorTemperatureString != null) { byte colorTemperatureByte; switch (colorTemperatureString) { case MediaQualityContract.COLOR_TEMP_USER: colorTemperatureByte = ColorTemperature.USER; break; case MediaQualityContract.COLOR_TEMP_COOL: colorTemperatureByte = ColorTemperature.COOL; break; case MediaQualityContract.COLOR_TEMP_STANDARD: colorTemperatureByte = ColorTemperature.STANDARD; break; case MediaQualityContract.COLOR_TEMP_WARM: colorTemperatureByte = ColorTemperature.WARM; break; case MediaQualityContract.COLOR_TEMP_USER_HDR10PLUS: colorTemperatureByte = ColorTemperature.USER_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_COOL_HDR10PLUS: colorTemperatureByte = ColorTemperature.COOL_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_STANDARD_HDR10PLUS: colorTemperatureByte = ColorTemperature.STANDARD_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_WARM_HDR10PLUS: colorTemperatureByte = ColorTemperature.WARM_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_FMMSDR: colorTemperatureByte = ColorTemperature.FMMSDR; break; case MediaQualityContract.COLOR_TEMP_FMMHDR: colorTemperatureByte = ColorTemperature.FMMHDR; break; default: colorTemperatureByte = ColorTemperature.STANDARD; Log.e("PictureParams", "Invalid color_temp string: " + colorTemperatureString); } pictureParams.add(PictureParameter.colorTemperature(colorTemperatureByte)); } params.remove(PictureQuality.PARAMETER_COLOR_TEMPERATURE); } if (params.containsKey(PictureQuality.PARAMETER_GLOBAL_DIMMING)) { Loading Loading @@ -517,8 +581,26 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_BLUE_GAIN); } if (params.containsKey(PictureQuality.PARAMETER_LEVEL_RANGE)) { pictureParams.add(PictureParameter.levelRange( (byte) params.getInt(PictureQuality.PARAMETER_LEVEL_RANGE))); String levelRangeString = params.getString(PictureQuality.PARAMETER_LEVEL_RANGE); if (levelRangeString != null) { byte levelRangeByte; switch (levelRangeString) { case "AUTO": levelRangeByte = ColorRange.AUTO; break; case "LIMITED": levelRangeByte = ColorRange.LIMITED; break; case "FULL": levelRangeByte = ColorRange.FULL; break; default: levelRangeByte = ColorRange.AUTO; Log.e("PictureParams", "Invalid color_range string: " + levelRangeString); } pictureParams.add(PictureParameter.levelRange(levelRangeByte)); } params.remove(PictureQuality.PARAMETER_LEVEL_RANGE); } if (params.containsKey(PictureQuality.PARAMETER_GAMUT_MAPPING)) { Loading Loading @@ -547,13 +629,61 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_CVRR); } if (params.containsKey(PictureQuality.PARAMETER_HDMI_RGB_RANGE)) { pictureParams.add(PictureParameter.hdmiRgbRange( (byte) params.getInt(PictureQuality.PARAMETER_HDMI_RGB_RANGE))); String hdmiRgbRangeString = params.getString(PictureQuality.PARAMETER_HDMI_RGB_RANGE); if (hdmiRgbRangeString != null) { byte hdmiRgbRangeByte; switch (hdmiRgbRangeString) { case "AUTO": hdmiRgbRangeByte = ColorRange.AUTO; break; case "LIMITED": hdmiRgbRangeByte = ColorRange.LIMITED; break; case "FULL": hdmiRgbRangeByte = ColorRange.FULL; break; default: hdmiRgbRangeByte = ColorRange.AUTO; Log.e("PictureParams", "Invalid hdmi_rgb_range string: " + hdmiRgbRangeByte); } pictureParams.add(PictureParameter.hdmiRgbRange(hdmiRgbRangeByte)); } params.remove(PictureQuality.PARAMETER_HDMI_RGB_RANGE); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_SPACE)) { pictureParams.add(PictureParameter.colorSpace( (byte) params.getInt(PictureQuality.PARAMETER_COLOR_SPACE))); String colorSpaceString = params.getString(PictureQuality.PARAMETER_COLOR_SPACE); if (colorSpaceString != null) { byte colorSpaceByte; switch (colorSpaceString) { case "AUTO": colorSpaceByte = ColorSpace.AUTO; break; case "S_RGB_BT_709": colorSpaceByte = ColorSpace.S_RGB_BT_709; break; case "DCI": colorSpaceByte = ColorSpace.DCI; break; case "ADOBE_RGB": colorSpaceByte = ColorSpace.ADOBE_RGB; break; case "BT2020": colorSpaceByte = ColorSpace.BT2020; break; case "ON": colorSpaceByte = ColorSpace.ON; break; case "OFF": colorSpaceByte = ColorSpace.OFF; break; default: colorSpaceByte = ColorSpace.OFF; Log.e("PictureParams", "Invalid color_space string: " + colorSpaceString); } pictureParams.add(PictureParameter.colorSpace(colorSpaceByte)); } params.remove(PictureQuality.PARAMETER_COLOR_SPACE); } if (params.containsKey(PictureQuality.PARAMETER_PANEL_INIT_MAX_LUMINCE_NITS)) { Loading @@ -567,8 +697,25 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_PANEL_INIT_MAX_LUMINCE_VALID); } if (params.containsKey(PictureQuality.PARAMETER_GAMMA)) { pictureParams.add(PictureParameter.gamma( (byte) params.getInt(PictureQuality.PARAMETER_GAMMA))); String gammaString = params.getString(PictureQuality.PARAMETER_GAMMA); if (gammaString != null) { byte gammaByte; switch (gammaString) { case "DARK": gammaByte = Gamma.DARK; break; case "MIDDLE": gammaByte = Gamma.MIDDLE; break; case "BRIGHT": gammaByte = Gamma.BRIGHT; break; default: gammaByte = Gamma.DARK; Log.e("PictureParams", "Invalid gamma string: " + gammaString); } pictureParams.add(PictureParameter.gamma(gammaByte)); } params.remove(PictureQuality.PARAMETER_GAMMA); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_TEMPERATURE_RED_OFFSET)) { Loading Loading @@ -602,13 +749,19 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_ELEVEN_POINT_BLUE); } if (params.containsKey(PictureQuality.PARAMETER_LOW_BLUE_LIGHT)) { pictureParams.add(PictureParameter.lowBlueLight( (byte) params.getInt(PictureQuality.PARAMETER_LOW_BLUE_LIGHT))); String lowBlueLightString = params.getString(PictureQuality.PARAMETER_LOW_BLUE_LIGHT); if (lowBlueLightString != null) { byte lowBlueLightByte = mapQualityLevel(lowBlueLightString); pictureParams.add(PictureParameter.lowBlueLight(lowBlueLightByte)); } params.remove(PictureQuality.PARAMETER_LOW_BLUE_LIGHT); } if (params.containsKey(PictureQuality.PARAMETER_LD_MODE)) { pictureParams.add(PictureParameter.LdMode( (byte) params.getInt(PictureQuality.PARAMETER_LD_MODE))); String ldModeString = params.getString(PictureQuality.PARAMETER_LD_MODE); if (ldModeString != null) { byte ldModeByte = mapQualityLevel(ldModeString); pictureParams.add(PictureParameter.LdMode(ldModeByte)); } params.remove(PictureQuality.PARAMETER_LD_MODE); } if (params.containsKey(PictureQuality.PARAMETER_OSD_RED_GAIN)) { Loading Loading @@ -767,8 +920,44 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_LUMINANCE_FLESH); } if (params.containsKey(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE)) { pictureParams.add(PictureParameter.pictureQualityEventType( (byte) params.getInt(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE))); String pictureQualityEventTypeString = params.getString( PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE); if (pictureQualityEventTypeString != null) { byte pictureQualityEventTypeByte; switch (pictureQualityEventTypeString) { case "NONE": pictureQualityEventTypeByte = PictureQualityEventType.NONE; break; case "BBD_RESULT": pictureQualityEventTypeByte = PictureQualityEventType.BBD_RESULT; break; case "VIDEO_DELAY_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.VIDEO_DELAY_CHANGE; break; case "CAPTUREPOINT_INFO_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.CAPTUREPOINT_INFO_CHANGE; break; case "VIDEOPATH_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.VIDEOPATH_CHANGE; break; case "EXTRA_FRAME_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.EXTRA_FRAME_CHANGE; break; case "DOLBY_IQ_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.DOLBY_IQ_CHANGE; break; case "DOLBY_APO_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.DOLBY_APO_CHANGE; break; default: pictureQualityEventTypeByte = PictureQualityEventType.NONE; Log.e("PictureParams", "Invalid event type string: " + pictureQualityEventTypeString); } pictureParams.add( PictureParameter.pictureQualityEventType(pictureQualityEventTypeByte)); } params.remove(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE); } return pictureParams.toArray(new PictureParameter[0]); Loading Loading @@ -1657,6 +1846,19 @@ public final class MediaQualityUtils { return colIndex != -1 ? cursor.getString(colIndex) : null; } private static byte mapQualityLevel(String qualityLevel) { return switch (qualityLevel) { case MediaQualityContract.LEVEL_OFF -> QualityLevel.OFF; case MediaQualityContract.LEVEL_LOW -> QualityLevel.LOW; case MediaQualityContract.LEVEL_MEDIUM -> QualityLevel.MEDIUM; case MediaQualityContract.LEVEL_HIGH -> QualityLevel.HIGH; default -> { Log.e("PictureParams", "Invalid noise_reduction string: " + qualityLevel); yield QualityLevel.OFF; } }; } private MediaQualityUtils() { } Loading Loading
media/java/android/media/quality/MediaQualityContract.java +37 −1 Original line number Diff line number Diff line Loading @@ -72,6 +72,43 @@ public class MediaQualityContract { */ public static final String LEVEL_OFF = "level_off"; /** @hide */ @Retention(RetentionPolicy.SOURCE) @StringDef(prefix = "COLOR_TEMP", value = { COLOR_TEMP_USER, COLOR_TEMP_COOL, COLOR_TEMP_STANDARD, COLOR_TEMP_WARM, COLOR_TEMP_USER_HDR10PLUS, COLOR_TEMP_COOL_HDR10PLUS, COLOR_TEMP_STANDARD_HDR10PLUS, COLOR_TEMP_WARM_HDR10PLUS, COLOR_TEMP_FMMSDR, COLOR_TEMP_FMMHDR, }) public @interface ColorTempValue {} /** @hide */ public static final String COLOR_TEMP_USER = "color_temp_user"; /** @hide */ public static final String COLOR_TEMP_COOL = "color_temp_cool"; /** @hide */ public static final String COLOR_TEMP_STANDARD = "color_temp_standard"; /** @hide */ public static final String COLOR_TEMP_WARM = "color_temp_warm"; /** @hide */ public static final String COLOR_TEMP_USER_HDR10PLUS = "color_temp_user_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_COOL_HDR10PLUS = "color_temp_cool_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_STANDARD_HDR10PLUS = "color_temp_standard_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_WARM_HDR10PLUS = "color_temp_warm_hdr10plus"; /** @hide */ public static final String COLOR_TEMP_FMMSDR = "color_temp_fmmsdr"; /** @hide */ public static final String COLOR_TEMP_FMMHDR = "color_temp_fmmhdr"; /** * @hide Loading @@ -82,7 +119,6 @@ public class MediaQualityContract { String PARAMETER_NAME = "_name"; String PARAMETER_PACKAGE = "_package"; String PARAMETER_INPUT_ID = "_input_id"; String VENDOR_PARAMETERS = "_vendor_parameters"; } /** Loading
services/core/java/com/android/server/media/quality/MediaQualityUtils.java +230 −28 Original line number Diff line number Diff line Loading @@ -18,13 +18,20 @@ package com.android.server.media.quality; import android.content.ContentValues; import android.database.Cursor; import android.hardware.tv.mediaquality.ColorRange; import android.hardware.tv.mediaquality.ColorSpace; import android.hardware.tv.mediaquality.ColorTemperature; import android.hardware.tv.mediaquality.DolbyAudioProcessing; import android.hardware.tv.mediaquality.DtsVirtualX; import android.hardware.tv.mediaquality.Gamma; import android.hardware.tv.mediaquality.ParameterDefaultValue; import android.hardware.tv.mediaquality.ParameterName; import android.hardware.tv.mediaquality.ParameterRange; 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.media.quality.MediaQualityContract; import android.media.quality.MediaQualityContract.BaseParameters; import android.media.quality.MediaQualityContract.PictureQuality; import android.media.quality.MediaQualityContract.SoundQuality; Loading Loading @@ -371,7 +378,7 @@ public final class MediaQualityUtils { } List<PictureParameter> pictureParams = new ArrayList<>(); if (params.containsKey(PictureQuality.PARAMETER_BRIGHTNESS)) { pictureParams.add(PictureParameter.brightness(params.getLong( pictureParams.add(PictureParameter.brightness((float) params.getDouble( PictureQuality.PARAMETER_BRIGHTNESS))); params.remove(PictureQuality.PARAMETER_BRIGHTNESS); } Loading Loading @@ -441,28 +448,46 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_BLUE_GAIN); } if (params.containsKey(PictureQuality.PARAMETER_NOISE_REDUCTION)) { pictureParams.add(PictureParameter.noiseReduction( (byte) params.getInt(PictureQuality.PARAMETER_NOISE_REDUCTION))); String noiseReductionString = params.getString( PictureQuality.PARAMETER_NOISE_REDUCTION); if (noiseReductionString != null) { byte noiseReductionByte = mapQualityLevel(noiseReductionString); pictureParams.add(PictureParameter.noiseReduction(noiseReductionByte)); } params.remove(PictureQuality.PARAMETER_NOISE_REDUCTION); } if (params.containsKey(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION)) { pictureParams.add(PictureParameter.mpegNoiseReduction( (byte) params.getInt(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION))); String mpegNoiseReductionString = params.getString( PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION); if (mpegNoiseReductionString != null) { byte mpegNoiseReductionByte = mapQualityLevel(mpegNoiseReductionString); pictureParams.add(PictureParameter.mpegNoiseReduction(mpegNoiseReductionByte)); } params.remove(PictureQuality.PARAMETER_MPEG_NOISE_REDUCTION); } if (params.containsKey(PictureQuality.PARAMETER_FLESH_TONE)) { pictureParams.add(PictureParameter.fleshTone( (byte) params.getInt(PictureQuality.PARAMETER_FLESH_TONE))); String fleshToneString = params.getString(PictureQuality.PARAMETER_FLESH_TONE); if (fleshToneString != null) { byte fleshToneByte = mapQualityLevel(fleshToneString); pictureParams.add(PictureParameter.fleshTone(fleshToneByte)); } params.remove(PictureQuality.PARAMETER_FLESH_TONE); } if (params.containsKey(PictureQuality.PARAMETER_DECONTOUR)) { pictureParams.add(PictureParameter.deContour( (byte) params.getInt(PictureQuality.PARAMETER_DECONTOUR))); String decontourString = params.getString(PictureQuality.PARAMETER_DECONTOUR); if (decontourString != null) { byte decontourByte = mapQualityLevel(decontourString); pictureParams.add(PictureParameter.deContour(decontourByte)); } params.remove(PictureQuality.PARAMETER_DECONTOUR); } if (params.containsKey(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL)) { pictureParams.add(PictureParameter.dynamicLumaControl( (byte) params.getInt(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL))); String dynamicLunaControlString = params.getString( PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL); if (dynamicLunaControlString != null) { byte dynamicLunaControlByte = mapQualityLevel(dynamicLunaControlString); pictureParams.add(PictureParameter.dynamicLumaControl(dynamicLunaControlByte)); } params.remove(PictureQuality.PARAMETER_DYNAMIC_LUMA_CONTROL); } if (params.containsKey(PictureQuality.PARAMETER_FILM_MODE)) { Loading @@ -481,9 +506,48 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNE); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_TEMPERATURE)) { pictureParams.add(PictureParameter.colorTemperature( (byte) params.getInt( PictureQuality.PARAMETER_COLOR_TEMPERATURE))); String colorTemperatureString = params.getString( PictureQuality.PARAMETER_COLOR_TEMPERATURE); if (colorTemperatureString != null) { byte colorTemperatureByte; switch (colorTemperatureString) { case MediaQualityContract.COLOR_TEMP_USER: colorTemperatureByte = ColorTemperature.USER; break; case MediaQualityContract.COLOR_TEMP_COOL: colorTemperatureByte = ColorTemperature.COOL; break; case MediaQualityContract.COLOR_TEMP_STANDARD: colorTemperatureByte = ColorTemperature.STANDARD; break; case MediaQualityContract.COLOR_TEMP_WARM: colorTemperatureByte = ColorTemperature.WARM; break; case MediaQualityContract.COLOR_TEMP_USER_HDR10PLUS: colorTemperatureByte = ColorTemperature.USER_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_COOL_HDR10PLUS: colorTemperatureByte = ColorTemperature.COOL_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_STANDARD_HDR10PLUS: colorTemperatureByte = ColorTemperature.STANDARD_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_WARM_HDR10PLUS: colorTemperatureByte = ColorTemperature.WARM_HDR10PLUS; break; case MediaQualityContract.COLOR_TEMP_FMMSDR: colorTemperatureByte = ColorTemperature.FMMSDR; break; case MediaQualityContract.COLOR_TEMP_FMMHDR: colorTemperatureByte = ColorTemperature.FMMHDR; break; default: colorTemperatureByte = ColorTemperature.STANDARD; Log.e("PictureParams", "Invalid color_temp string: " + colorTemperatureString); } pictureParams.add(PictureParameter.colorTemperature(colorTemperatureByte)); } params.remove(PictureQuality.PARAMETER_COLOR_TEMPERATURE); } if (params.containsKey(PictureQuality.PARAMETER_GLOBAL_DIMMING)) { Loading Loading @@ -517,8 +581,26 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_BLUE_GAIN); } if (params.containsKey(PictureQuality.PARAMETER_LEVEL_RANGE)) { pictureParams.add(PictureParameter.levelRange( (byte) params.getInt(PictureQuality.PARAMETER_LEVEL_RANGE))); String levelRangeString = params.getString(PictureQuality.PARAMETER_LEVEL_RANGE); if (levelRangeString != null) { byte levelRangeByte; switch (levelRangeString) { case "AUTO": levelRangeByte = ColorRange.AUTO; break; case "LIMITED": levelRangeByte = ColorRange.LIMITED; break; case "FULL": levelRangeByte = ColorRange.FULL; break; default: levelRangeByte = ColorRange.AUTO; Log.e("PictureParams", "Invalid color_range string: " + levelRangeString); } pictureParams.add(PictureParameter.levelRange(levelRangeByte)); } params.remove(PictureQuality.PARAMETER_LEVEL_RANGE); } if (params.containsKey(PictureQuality.PARAMETER_GAMUT_MAPPING)) { Loading Loading @@ -547,13 +629,61 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_CVRR); } if (params.containsKey(PictureQuality.PARAMETER_HDMI_RGB_RANGE)) { pictureParams.add(PictureParameter.hdmiRgbRange( (byte) params.getInt(PictureQuality.PARAMETER_HDMI_RGB_RANGE))); String hdmiRgbRangeString = params.getString(PictureQuality.PARAMETER_HDMI_RGB_RANGE); if (hdmiRgbRangeString != null) { byte hdmiRgbRangeByte; switch (hdmiRgbRangeString) { case "AUTO": hdmiRgbRangeByte = ColorRange.AUTO; break; case "LIMITED": hdmiRgbRangeByte = ColorRange.LIMITED; break; case "FULL": hdmiRgbRangeByte = ColorRange.FULL; break; default: hdmiRgbRangeByte = ColorRange.AUTO; Log.e("PictureParams", "Invalid hdmi_rgb_range string: " + hdmiRgbRangeByte); } pictureParams.add(PictureParameter.hdmiRgbRange(hdmiRgbRangeByte)); } params.remove(PictureQuality.PARAMETER_HDMI_RGB_RANGE); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_SPACE)) { pictureParams.add(PictureParameter.colorSpace( (byte) params.getInt(PictureQuality.PARAMETER_COLOR_SPACE))); String colorSpaceString = params.getString(PictureQuality.PARAMETER_COLOR_SPACE); if (colorSpaceString != null) { byte colorSpaceByte; switch (colorSpaceString) { case "AUTO": colorSpaceByte = ColorSpace.AUTO; break; case "S_RGB_BT_709": colorSpaceByte = ColorSpace.S_RGB_BT_709; break; case "DCI": colorSpaceByte = ColorSpace.DCI; break; case "ADOBE_RGB": colorSpaceByte = ColorSpace.ADOBE_RGB; break; case "BT2020": colorSpaceByte = ColorSpace.BT2020; break; case "ON": colorSpaceByte = ColorSpace.ON; break; case "OFF": colorSpaceByte = ColorSpace.OFF; break; default: colorSpaceByte = ColorSpace.OFF; Log.e("PictureParams", "Invalid color_space string: " + colorSpaceString); } pictureParams.add(PictureParameter.colorSpace(colorSpaceByte)); } params.remove(PictureQuality.PARAMETER_COLOR_SPACE); } if (params.containsKey(PictureQuality.PARAMETER_PANEL_INIT_MAX_LUMINCE_NITS)) { Loading @@ -567,8 +697,25 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_PANEL_INIT_MAX_LUMINCE_VALID); } if (params.containsKey(PictureQuality.PARAMETER_GAMMA)) { pictureParams.add(PictureParameter.gamma( (byte) params.getInt(PictureQuality.PARAMETER_GAMMA))); String gammaString = params.getString(PictureQuality.PARAMETER_GAMMA); if (gammaString != null) { byte gammaByte; switch (gammaString) { case "DARK": gammaByte = Gamma.DARK; break; case "MIDDLE": gammaByte = Gamma.MIDDLE; break; case "BRIGHT": gammaByte = Gamma.BRIGHT; break; default: gammaByte = Gamma.DARK; Log.e("PictureParams", "Invalid gamma string: " + gammaString); } pictureParams.add(PictureParameter.gamma(gammaByte)); } params.remove(PictureQuality.PARAMETER_GAMMA); } if (params.containsKey(PictureQuality.PARAMETER_COLOR_TEMPERATURE_RED_OFFSET)) { Loading Loading @@ -602,13 +749,19 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_ELEVEN_POINT_BLUE); } if (params.containsKey(PictureQuality.PARAMETER_LOW_BLUE_LIGHT)) { pictureParams.add(PictureParameter.lowBlueLight( (byte) params.getInt(PictureQuality.PARAMETER_LOW_BLUE_LIGHT))); String lowBlueLightString = params.getString(PictureQuality.PARAMETER_LOW_BLUE_LIGHT); if (lowBlueLightString != null) { byte lowBlueLightByte = mapQualityLevel(lowBlueLightString); pictureParams.add(PictureParameter.lowBlueLight(lowBlueLightByte)); } params.remove(PictureQuality.PARAMETER_LOW_BLUE_LIGHT); } if (params.containsKey(PictureQuality.PARAMETER_LD_MODE)) { pictureParams.add(PictureParameter.LdMode( (byte) params.getInt(PictureQuality.PARAMETER_LD_MODE))); String ldModeString = params.getString(PictureQuality.PARAMETER_LD_MODE); if (ldModeString != null) { byte ldModeByte = mapQualityLevel(ldModeString); pictureParams.add(PictureParameter.LdMode(ldModeByte)); } params.remove(PictureQuality.PARAMETER_LD_MODE); } if (params.containsKey(PictureQuality.PARAMETER_OSD_RED_GAIN)) { Loading Loading @@ -767,8 +920,44 @@ public final class MediaQualityUtils { params.remove(PictureQuality.PARAMETER_COLOR_TUNER_LUMINANCE_FLESH); } if (params.containsKey(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE)) { pictureParams.add(PictureParameter.pictureQualityEventType( (byte) params.getInt(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE))); String pictureQualityEventTypeString = params.getString( PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE); if (pictureQualityEventTypeString != null) { byte pictureQualityEventTypeByte; switch (pictureQualityEventTypeString) { case "NONE": pictureQualityEventTypeByte = PictureQualityEventType.NONE; break; case "BBD_RESULT": pictureQualityEventTypeByte = PictureQualityEventType.BBD_RESULT; break; case "VIDEO_DELAY_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.VIDEO_DELAY_CHANGE; break; case "CAPTUREPOINT_INFO_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.CAPTUREPOINT_INFO_CHANGE; break; case "VIDEOPATH_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.VIDEOPATH_CHANGE; break; case "EXTRA_FRAME_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.EXTRA_FRAME_CHANGE; break; case "DOLBY_IQ_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.DOLBY_IQ_CHANGE; break; case "DOLBY_APO_CHANGE": pictureQualityEventTypeByte = PictureQualityEventType.DOLBY_APO_CHANGE; break; default: pictureQualityEventTypeByte = PictureQualityEventType.NONE; Log.e("PictureParams", "Invalid event type string: " + pictureQualityEventTypeString); } pictureParams.add( PictureParameter.pictureQualityEventType(pictureQualityEventTypeByte)); } params.remove(PictureQuality.PARAMETER_PICTURE_QUALITY_EVENT_TYPE); } return pictureParams.toArray(new PictureParameter[0]); Loading Loading @@ -1657,6 +1846,19 @@ public final class MediaQualityUtils { return colIndex != -1 ? cursor.getString(colIndex) : null; } private static byte mapQualityLevel(String qualityLevel) { return switch (qualityLevel) { case MediaQualityContract.LEVEL_OFF -> QualityLevel.OFF; case MediaQualityContract.LEVEL_LOW -> QualityLevel.LOW; case MediaQualityContract.LEVEL_MEDIUM -> QualityLevel.MEDIUM; case MediaQualityContract.LEVEL_HIGH -> QualityLevel.HIGH; default -> { Log.e("PictureParams", "Invalid noise_reduction string: " + qualityLevel); yield QualityLevel.OFF; } }; } private MediaQualityUtils() { } Loading