Skip to content

"Downscaling oversized MediaMetadata Bitmap" strict mode violations #2829

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions