Skip to content

"Downscaling oversized MediaMetadata Bitmap" strict mode violations #2829

@derat

Description

@derat

Version

Media3 1.8.0

More version details

No response

Devices that reproduce the issue

  • Pixel 7a running Android 16 (build number BP3A.250905.014)

Devices that do not reproduce the issue

No response

Reproducible in the demo app?

Not tested

Reproduction steps

  1. Create a MediaItem with an artwork URI corresponding to a 1024x1024 image.
  2. Use the item in a SimpleBasePlayer implementation's playlist.

Expected result

No strict mode violations.

Actual result

I receive a bunch of strict mode violations like the following:

10-04 08:22:32.260 E NupApplication$onCreate android.os.strictmode.CustomViolation: Downscaling oversized MediaMetadata Bitmap
                                            	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
                                            	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
                                            	at android.media.MediaMetadata$Builder.scaleBitmap(MediaMetadata.java:995)
                                            	at android.media.MediaMetadata$Builder.build(MediaMetadata.java:980)
                                            	at android.media.session.MediaSession.setMetadata(MediaSession.java:513)
                                            	at androidx.media3.session.legacy.MediaSessionCompat$MediaSessionImplApi21.setMetadata(MediaSessionCompat.java:2069)
                                            	at androidx.media3.session.legacy.MediaSessionCompat.setMetadata(MediaSessionCompat.java:538)
                                            	at androidx.media3.session.MediaSessionLegacyStub.setMetadata(MediaSessionLegacyStub.java:1171)
                                            	at androidx.media3.session.MediaSessionLegacyStub.access$1700(MediaSessionLegacyStub.java:118)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1675)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1669)
                                            	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1102)
                                            	at android.os.Handler.handleCallback(Handler.java:1041)
                                            	at android.os.Handler.dispatchMessage(Handler.java:103)
                                            	at android.os.Looper.dispatchMessage(Looper.java:315)
                                            	at android.os.Looper.loopOnce(Looper.java:251)
                                            	at android.os.Looper.loop(Looper.java:349)
                                            	at android.app.ActivityThread.main(ActivityThread.java:9041)
                                            	at java.lang.reflect.Method.invoke(Native Method)
                                            	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
                                            	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

I'm also seeing this slightly different violation:

10-04 08:22:32.262 E NupApplication$onCreate android.os.strictmode.CustomViolation: Downscaling oversized Icon Bitmap
                                            	at android.os.StrictMode$AndroidBlockGuardPolicy.onCustomSlowCall(StrictMode.java:1731)
                                            	at android.os.StrictMode.noteSlowCall(StrictMode.java:2966)
                                            	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1162)
                                            	at android.graphics.drawable.Icon.scaleDownIfNecessary(Icon.java:1184)
                                            	at android.app.Notification.reduceImageSizes(Notification.java:8080)
                                            	at android.app.Notification$Builder.build(Notification.java:7741)
                                            	at androidx.core.app.NotificationCompatBuilder.buildInternal(NotificationCompatBuilder.java:428)
                                            	at androidx.core.app.NotificationCompatBuilder.build(NotificationCompatBuilder.java:338)
                                            	at androidx.core.app.NotificationCompat$Builder.build(NotificationCompat.java:2528)
                                            	at androidx.media3.session.DefaultMediaNotificationProvider.createNotification(DefaultMediaNotificationProvider.java:389)
                                            	at androidx.media3.session.MediaNotificationManager.$r8$lambda$buumm_xVh6KuEzVTNi7Lz3qTH48(MediaNotificationManager.java:188)
                                            	at androidx.media3.session.MediaNotificationManager$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0)
                                            	at androidx.media3.common.util.Util.postOrRun(Util.java:802)
                                            	at androidx.media3.session.MediaNotificationManager.updateNotification(MediaNotificationManager.java:184)
                                            	at androidx.media3.session.MediaSessionService.onUpdateNotification(MediaSessionService.java:677)
                                            	at androidx.media3.session.MediaSessionService.onUpdateNotificationInternal(MediaSessionService.java:712)
                                            	at androidx.media3.session.MediaSessionService$MediaSessionListener.onNotificationRefreshRequired(MediaSessionService.java:784)
                                            	at androidx.media3.session.MediaSessionImpl.$r8$lambda$LbaJMA-nvOZMx4M1Mvj1WGuv1Lc(MediaSessionImpl.java:1078)
                                            	at androidx.media3.session.MediaSessionImpl$$ExternalSyntheticLambda20.run(R8$$SyntheticClass:0)
                                            	at androidx.media3.common.util.Util.postOrRun(Util.java:802)
                                            	at androidx.media3.session.MediaSessionImpl.onNotificationRefreshRequired(MediaSessionImpl.java:1074)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1683)
                                            	at androidx.media3.session.MediaSessionLegacyStub$ControllerLegacyCbForBroadcast$1.onSuccess(MediaSessionLegacyStub.java:1669)
                                            	at com.google.common.util.concurrent.Futures$CallbackListener.run(Futures.java:1102)
                                            	at android.os.Handler.handleCallback(Handler.java:1041)
                                            	at android.os.Handler.dispatchMessage(Handler.java:103)
                                            	at android.os.Looper.dispatchMessage(Looper.java:315)
                                            	at android.os.Looper.loopOnce(Looper.java:251)
                                            	at android.os.Looper.loop(Looper.java:349)
                                            	at android.app.ActivityThread.main(ActivityThread.java:9041)
                                            	at java.lang.reflect.Method.invoke(Native Method)
                                            	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:593)
                                            	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

My code is currently calling MediaMetadata.Builder().setArtworkUri() with URIs corresponding to a ContentProvider that provides 1024x1024 AVIF images. I don't think it's practical for me to use smaller images on my end, since my activity actually makes use of the full resolution.

This just started after my phone applied a system update for build number BP3A.250905.014, so I suspect it was caused by a framework change -- I didn't see any violations using whichever build of Android 16 that I was on before.

I haven't spent much time looking at the framework code yet, but I wonder if this from https://android.googlesource.com/platform/frameworks/base/+/master/core/res/res/values/config.xml is related:

    <!-- The maximum bitmap size that can be written to a MediaMetadata object. This value
         is the max width/height allowed in dips.-->
    <dimen name="config_mediaMetadataBitmapMaxSize">320dp</dimen>

Media

Not applicable

Bug Report

  • You will email the zip file produced by adb bugreport to [email protected] after filing this issue.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions