immich
immich copied to clipboard
Video playback on Android no longer works
The bug
When trying to play a video, I only hear the sound, but don't see the video itself.
I've enabled video transcoding and I'm using the QSV API. Video transcoding with QSV works perfectly fine in Jellyfin, so I'd assume it should work with Immich as well. Furthermore, it has worked pretty well, so I don't think that's the issue here.
I have a Fairphone 4 which has the Qualcomm Snapdragon 750G (SM7225) as SoC and the Qualcomm Adreno 619 as integrated GPU in the SoC. HEVC playback with Jellyfin works directly without transcoding on the phone and I assume H.264 playback would work as well.
My OS is Android 12 with /e/OS 1.19.1-s-20240110372023-stable-FP4. The /e/OS thing means that I don't have Google Play Services, but I got MicroG, which emulates / replaces the Google Play Services. Idk if that's relevant in the playback issue here.
The OS that Immich Server is running on
DSM 7.2
Version of Immich Server
v1.94.1
Version of Immich Mobile App
v1.94.1
Platform with the issue
- [ ] Server
- [ ] Web
- [X] Mobile
Your docker-compose.yml content
version: "3.8"
name: immich
networks:
traefik_proxy:
external: true
name: traefik_proxy
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:release
command: [ "start.sh", "immich" ]
networks:
- traefik_proxy
- default
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- sockets:/sockets
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
environment:
- NODE_ENV=production
depends_on:
- redis
- database
restart: always
labels:
traefik.enable: "true"
traefik.docker.network: traefik_proxy
traefik.http.services.immich-svc.loadbalancer.server.port: "3001"
traefik.http.routers.immich-rtr.rule: "Host(`immich.$DOMAINNAME`)"
traefik.http.routers.immich-rtr.priority: 10
traefik.http.routers.immich-rtr.service: immich-svc
traefik.http.routers.immich-rtr.middlewares: chain-basic@file
traefik.http.routers.immich-rtr.tls: true
traefik.http.routers.immich-rtr.tls.certresolver: dns-cloudflare
traefik.http.routers.immich-rtr.entrypoints: https
immich-microservices:
container_name: immich_microservices
image: ghcr.io/immich-app/immich-server:release
command: [ "start.sh", "microservices" ]
# extends:
# file: hwaccel.yml
# service: hwaccel
networks:
- default
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- sockets:/sockets
env_file:
- .env
environment:
- NODE_ENV=production
depends_on:
- redis
- database
restart: always
devices:
- /dev/dri:/dev/dri
immich-machine-learning:
build:
context: $DOCKERDIR/immich/immich-ml
dockerfile: Dockerfile
container_name: immich_machine_learning
networks:
- default
volumes:
- ${UPLOAD_LOCATION}:/usr/src/app/upload
- model-cache:/cache
env_file:
- .env
environment:
- NODE_ENV=production
restart: always
redis:
container_name: immich_redis
image: redis:6.2
restart: always
networks:
- default
command: redis-server /etc/redis.conf
volumes:
- sockets:/sockets
- $DOCKERDIR/immich/redis.conf:/etc/redis.conf
- /etc/TZ:/etc/timezone:ro
- $DOCKERDIR/immich/redisdb:/db
database:
container_name: immich_postgres
image: tensorchord/pgvecto-rs:pg14-v0.1.11
user: 1026:100
command: postgres -c unix_socket_directories='/var/run/postgresql/,/sockets/'
env_file:
- .env
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
PG_DATA: /var/lib/postgresql/data
PGPORT: ${DB_PORT}
volumes:
- $DOCKERDIR/immich/pgdata:/var/lib/postgresql/data
- sockets:/sockets
restart: always
volumes:
sockets:
external: true
model-cache:
Your .env content
###################################################################################
# Database
###################################################################################
# DB_HOSTNAME=immich_postgres
DB_HOSTNAME=/sockets
DB_USERNAME=postgres
DB_PASSWORD=password
DB_DATABASE_NAME=immich
# Optional Database settings:
DB_PORT=5433
###################################################################################
# Redis
###################################################################################
# REDIS_HOSTNAME=immich_redis
# Optional Redis settings:
# REDIS_PORT=6379
# REDIS_DBINDEX=0
REDIS_PASSWORD="password"
REDIS_SOCKET=/sockets/immich_redis.sock
###################################################################################
# Upload File Config
###################################################################################
UPLOAD_LOCATION=$DOCKERDIR/immich/gallery
###################################################################################
# JWT SECRET
###################################################################################
JWT_SECRET=secret
TYPESENSE_API_KEY=apikey
Reproduction steps
1. Open a video on android
2. See black screen
Additional information
The logs I found after running adb logcat:
--------- beginning of main
02-03 21:40:52.073 2330 2805 D BufferPoolAccessor2.0: evictor expired: 1, evicted: 1
02-03 21:41:31.796 2330 2330 I ExoPlayerImpl: Init d8f4b44 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:31.823 2330 2330 I ExoPlayerImpl: Init a607147 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:31.830 2330 5061 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.835 2330 2330 I ExoPlayerImpl: Release d8f4b44 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32] [goog.exo.core, goog.exo.exoplayer, goog.exo.decoder, goog.exo.datasource, goog.exo.extractor]
02-03 21:41:31.837 2330 5065 I OMXClient: IOmx service obtained
02-03 21:41:31.846 2330 5063 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.851 2330 5069 I OMXClient: IOmx service obtained
02-03 21:41:31.864 2330 5064 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.865 2330 5061 W MediaCodecRenderer: Preferred decoder instantiation failed. Sleeping for 50ms then retrying.
02-03 21:41:31.875 2330 5064 D MediaCodec: flushMediametrics
02-03 21:41:31.876 2330 5064 D MediaCodec: flushMediametrics
02-03 21:41:31.876 2330 5068 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.877 2330 5068 D MediaCodec: flushMediametrics
02-03 21:41:31.877 2330 5068 D SurfaceUtils: connecting to surface 0xb40000752c2dcbf0, reason connectToSurface
02-03 21:41:31.877 2330 5068 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385939
02-03 21:41:31.877 2330 5068 D SurfaceUtils: disconnecting from surface 0xb40000752c2dcbf0, reason connectToSurface(reconnect)
02-03 21:41:31.877 2330 5068 D SurfaceUtils: connecting to surface 0xb40000752c2dcbf0, reason connectToSurface(reconnect)
02-03 21:41:31.887 2330 5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:31.896 2330 5069 D SurfaceUtils: set up nativeWindow 0xb40000752c2dcbf0 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:31.903 2330 5063 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type audio
02-03 21:41:31.907 2330 5079 D CCodec : allocate(c2.android.aac.decoder)
02-03 21:41:31.910 2330 5079 I CCodec : setting up 'default' as default (vendor) store
02-03 21:41:31.912 2330 5079 I CCodec : Created component [c2.android.aac.decoder]
02-03 21:41:31.912 2330 5079 D CCodecConfig: read media type: audio/mp4a-latm
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
02-03 21:41:31.914 2330 5079 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
02-03 21:41:31.915 2330 5061 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:31.916 2330 5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2 config diff is Dict {
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 coded.aac-packaging.value = 0
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 coded.bitrate.value = 64000
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 coded.pl.level = 0
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 coded.pl.profile = 8192
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::i32 coding.drc.album-mode.value = 0
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::float coding.drc.attenuation-factor.value = 1
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::float coding.drc.boost-factor.value = 1
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::i32 coding.drc.compression-mode.value = 3
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::i32 coding.drc.effect-type.value = 3
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::float coding.drc.encoded-level.value = 0.25
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::float coding.drc.reference-level.value = -16
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 input.buffers.max-size.value = 8192
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 input.delay.value = 0
02-03 21:41:31.916 2330 5079 D CCodecConfig: string input.media-type.value = "audio/mp4a-latm"
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 output.delay.value = 2
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::float output.drc.output-loudness.value = 0.25
02-03 21:41:31.916 2330 5079 D CCodecConfig: string output.media-type.value = "audio/raw"
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 raw.channel-count.value = 1
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 raw.max-channel-count.value = 8
02-03 21:41:31.916 2330 5079 D CCodecConfig: c2::u32 raw.sample-rate.value = 44100
02-03 21:41:31.916 2330 5079 D CCodecConfig: }
02-03 21:41:31.919 2330 5079 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.919 2330 5079 D MediaCodec: flushMediametrics
02-03 21:41:31.919 2330 5079 D CCodec : [c2.android.aac.decoder] buffers are bound to CCodec for this session
02-03 21:41:31.919 2330 5079 D CCodecConfig: no c2 equivalents for log-session-id
02-03 21:41:31.919 2330 5079 D CCodecConfig: no c2 equivalents for flags
02-03 21:41:31.920 2330 5079 D CCodecConfig: config failed => CORRUPTED
02-03 21:41:31.920 2330 5079 D CCodecConfig: c2 config diff is c2::u32 raw.channel-count.value = 2
02-03 21:41:31.920 2330 5079 D CCodecConfig: c2::u32 raw.sample-rate.value = 48000
02-03 21:41:31.920 2330 5079 W Codec2Client: query -- param skipped: index = 1107298332.
02-03 21:41:31.920 2330 5079 D CCodec : client requested max input size 398, which is smaller than what component recommended (8192); overriding with component recommendation.
02-03 21:41:31.920 2330 5079 W CCodec : This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
02-03 21:41:31.920 2330 5079 D CCodec : setup formats input: AMessage(what = 0x00000000) = {
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-album-mode = 0
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-boost-level = 127
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-cut-level = 127
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-effect-type = 3
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-encoded-target-level = -1
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-max-output-channel_count = 8
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-target-ref-level = 64
02-03 21:41:31.920 2330 5079 D CCodec : int32_t bitrate = 64000
02-03 21:41:31.920 2330 5079 D CCodec : int32_t channel-count = 2
02-03 21:41:31.920 2330 5079 D CCodec : int32_t level = 0
02-03 21:41:31.920 2330 5079 D CCodec : int32_t max-input-size = 8192
02-03 21:41:31.920 2330 5079 D CCodec : int32_t max-output-channel-count = 8
02-03 21:41:31.920 2330 5079 D CCodec : string mime = "audio/mp4a-latm"
02-03 21:41:31.920 2330 5079 D CCodec : int32_t profile = 2
02-03 21:41:31.920 2330 5079 D CCodec : int32_t sample-rate = 48000
02-03 21:41:31.920 2330 5079 D CCodec : }
02-03 21:41:31.920 2330 5079 D CCodec : setup formats output: AMessage(what = 0x00000000) = {
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-album-mode = 0
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-boost-level = 127
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-cut-level = 127
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-effect-type = 3
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-drc-output-loudness = -1
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-encoded-target-level = -1
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-max-output-channel_count = 8
02-03 21:41:31.920 2330 5079 D CCodec : int32_t aac-target-ref-level = 64
02-03 21:41:31.920 2330 5079 D CCodec : int32_t channel-count = 2
02-03 21:41:31.920 2330 5079 D CCodec : int32_t max-output-channel-count = 8
02-03 21:41:31.920 2330 5079 D CCodec : string mime = "audio/raw"
02-03 21:41:31.920 2330 5079 D CCodec : int32_t sample-rate = 48000
02-03 21:41:31.920 2330 5079 D CCodec : }
02-03 21:41:31.920 2330 5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:31.921 2330 5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:31.924 2330 5082 I OMXClient: IOmx service obtained
02-03 21:41:31.925 2330 5079 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:31.925 2330 5079 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:31.925 2330 5079 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:31.926 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] Created input block pool with allocatorID 16 => poolID 26 - OK (0)
02-03 21:41:31.927 2330 2726 D BufferPoolAccessor2.0: bufferpool2 0xb40000748c334b98 : 0(0 size) total buffers - 0(0 size) used buffers - 24/29 (recycle/alloc) - 5/24 (fetch/transfer)
02-03 21:41:31.927 2330 2726 D BufferPoolAccessor2.0: Destruction - bufferpool2 0xb40000748c334b98 cached: 0/0M, 0/0% in use; allocs: 29, 83% recycled; transfers: 24, 79% unfetched
02-03 21:41:31.927 2330 5079 I CCodecBufferChannel: [c2.android.aac.decoder#336] Created output block pool with allocatorID 16 => poolID 827 - OK
02-03 21:41:31.927 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] Configured output block pool ids 827 => OK
02-03 21:41:31.927 2330 2726 D BufferPoolAccessor2.0: bufferpool2 0xb40000748c2f9e68 : 0(0 size) total buffers - 0(0 size) used buffers - 696/701 (recycle/alloc) - 5/696 (fetch/transfer)
02-03 21:41:31.927 2330 2726 D BufferPoolAccessor2.0: Destruction - bufferpool2 0xb40000748c2f9e68 cached: 0/0M, 0/0% in use; allocs: 701, 99% recycled; transfers: 696, 99% unfetched
02-03 21:41:31.945 2330 5081 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: Failed to initialize decoder: OMX.qcom.video.decoder.avc
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.b.v(Unknown Source:14)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.b.p(Unknown Source:0)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.k.a(Unknown Source:58)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at q3.s.w(Unknown Source:28)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946 2330 5061 W MediaCodecRenderer: at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: Video codec error
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: q3.s$b: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1])
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.P0(Unknown Source:146)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.w(Unknown Source:28)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: Caused by: java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.b.v(Unknown Source:14)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.b.p(Unknown Source:0)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.k.a(Unknown Source:58)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946 2330 5061 E MediaCodecVideoRenderer: ... 11 more
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: Playback error
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: z2.r: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1]), format_supported=YES
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at z2.k1.handleMessage(Unknown Source:344)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.os.Handler.dispatchMessage(Handler.java:102)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.os.Looper.loopOnce(Looper.java:201)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.os.Looper.loop(Looper.java:288)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.os.HandlerThread.run(HandlerThread.java:67)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: Caused by: q3.s$b: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, null, video/avc, avc1.42800A, -1, null, [3840, 2160, 29.945658], [-1, -1])
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.P0(Unknown Source:146)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.O0(Unknown Source:142)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.T0(Unknown Source:37)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at x4.h.T0(Unknown Source:0)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.c1(Unknown Source:21)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.w(Unknown Source:28)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at z2.k1.p(Unknown Source:96)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at z2.k1.handleMessage(Unknown Source:220)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: ... 4 more
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: Caused by: java.lang.IllegalArgumentException: The surface has been released
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.media.MediaCodec.native_configure(Native Method)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.media.MediaCodec.configure(MediaCodec.java:2176)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at android.media.MediaCodec.configure(MediaCodec.java:2092)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.b.v(Unknown Source:14)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.b.p(Unknown Source:0)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.b$b.d(Unknown Source:68)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.k.a(Unknown Source:58)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.J0(Unknown Source:75)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: at q3.s.P0(Unknown Source:111)
02-03 21:41:31.946 2330 5061 E ExoPlayerImplInternal: ... 11 more
02-03 21:41:31.957 2330 5081 D MediaCodec: flushMediametrics
02-03 21:41:31.958 2330 5081 D MediaCodec: flushMediametrics
02-03 21:41:31.985 2330 5068 W MediaCodec: mapFormat: no mediaType information
02-03 21:41:32.099 2330 2330 I ExoPlayerImpl: Init 39394b [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32]
02-03 21:41:32.120 2330 2330 I ExoPlayerImpl: Release a607147 [ExoPlayerLib/2.18.7] [FP4, FP4, Fairphone, 32] [goog.exo.core, goog.exo.exoplayer, goog.exo.decoder, goog.exo.datasource, goog.exo.extractor]
02-03 21:41:32.136 2330 5091 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type video
02-03 21:41:32.136 2330 5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.137 2330 5079 D CCodecBuffers: [c2.android.aac.decoder#336:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
02-03 21:41:32.138 2330 5063 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.138 2330 5079 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.138 2330 5079 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:32.138 2330 5079 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:32.138 2330 5079 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:32.140 2330 5068 D SurfaceUtils: connecting to surface 0xb40000752c3cd500, reason connectToSurface
02-03 21:41:32.140 2330 5068 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385940
02-03 21:41:32.140 2330 5068 D SurfaceUtils: disconnecting from surface 0xb40000752c3cd500, reason connectToSurface(reconnect)
02-03 21:41:32.140 2330 5068 D SurfaceUtils: connecting to surface 0xb40000752c3cd500, reason connectToSurface(reconnect)
02-03 21:41:32.141 2330 5069 D SurfaceUtils: set up nativeWindow 0xb40000752c3cd500 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:32.142 2330 5068 D SurfaceUtils: disconnecting from surface 0xb40000752c2dcbf0, reason disconnectFromSurface
02-03 21:41:32.142 2330 5068 E Surface : freeAllBuffers: 12 buffers were freed while being dequeued!
02-03 21:41:32.142 2330 5095 I OMXClient: IOmx service obtained
02-03 21:41:32.143 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.144 2330 5079 D CCodecBufferChannel: [c2.android.aac.decoder#336] MediaCodec discarded an unknown buffer
02-03 21:41:32.148 2330 5079 I hw-BpHwBinder: onLastStrongRef automatically unlinking death recipients
02-03 21:41:32.148 2330 5079 D MediaCodec: flushMediametrics
02-03 21:41:32.148 2330 5079 D MediaCodec: flushMediametrics
02-03 21:41:32.161 2330 5093 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:32.161 2330 5093 D MediaCodec: flushMediametrics
02-03 21:41:32.161 2330 5093 D SurfaceUtils: connecting to surface 0xb40000752c2efe80, reason connectToSurface
02-03 21:41:32.161 2330 5093 I MediaCodec: [OMX.qcom.video.decoder.avc] setting surface generation to 2385941
02-03 21:41:32.161 2330 5093 D SurfaceUtils: disconnecting from surface 0xb40000752c2efe80, reason connectToSurface(reconnect)
02-03 21:41:32.161 2330 5093 D SurfaceUtils: connecting to surface 0xb40000752c2efe80, reason connectToSurface(reconnect)
02-03 21:41:32.167 2330 5091 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.171 2330 5068 D SurfaceUtils: disconnecting from surface 0xb40000752c3cd500, reason disconnectFromSurface
02-03 21:41:32.175 2330 5068 D MediaCodec: flushMediametrics
02-03 21:41:32.175 2330 5068 D MediaCodec: flushMediametrics
02-03 21:41:32.177 2330 5095 D SurfaceUtils: set up nativeWindow 0xb40000752c2efe80 for 3840x2160, color 0x7fa30c06, rotation 90, usage 0x20402900
02-03 21:41:32.181 2330 5091 I DMCodecAdapterFactory: Creating an asynchronous MediaCodec adapter for track type audio
02-03 21:41:32.187 2330 5102 D CCodec : allocate(c2.android.aac.decoder)
02-03 21:41:32.188 2330 5102 I CCodec : setting up 'default' as default (vendor) store
02-03 21:41:32.191 2330 5102 I CCodec : Created component [c2.android.aac.decoder]
02-03 21:41:32.191 2330 5102 D CCodecConfig: read media type: audio/mp4a-latm
02-03 21:41:32.192 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.max-count.values
02-03 21:41:32.192 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.subscribed-indices.values
02-03 21:41:32.192 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: input.buffers.allocator-ids.values
02-03 21:41:32.193 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.allocator-ids.values
02-03 21:41:32.193 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.allocator-ids.values
02-03 21:41:32.193 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: output.buffers.pool-ids.values
02-03 21:41:32.193 2330 5102 D ReflectedParamUpdater: extent() != 1 for single value type: algo.buffers.pool-ids.values
02-03 21:41:32.194 2330 5102 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2 config diff is Dict {
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 coded.aac-packaging.value = 0
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 coded.bitrate.value = 64000
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 coded.pl.level = 0
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 coded.pl.profile = 8192
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::i32 coding.drc.album-mode.value = 0
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::float coding.drc.attenuation-factor.value = 1
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::float coding.drc.boost-factor.value = 1
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::i32 coding.drc.compression-mode.value = 3
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::i32 coding.drc.effect-type.value = 3
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::float coding.drc.encoded-level.value = 0.25
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::float coding.drc.reference-level.value = -16
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 input.buffers.max-size.value = 8192
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 input.delay.value = 0
02-03 21:41:32.195 2330 5102 D CCodecConfig: string input.media-type.value = "audio/mp4a-latm"
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 output.delay.value = 2
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::float output.drc.output-loudness.value = 0.25
02-03 21:41:32.195 2330 5102 D CCodecConfig: string output.media-type.value = "audio/raw"
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 raw.channel-count.value = 1
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 raw.max-channel-count.value = 8
02-03 21:41:32.195 2330 5102 D CCodecConfig: c2::u32 raw.sample-rate.value = 44100
02-03 21:41:32.195 2330 5102 D CCodecConfig: }
02-03 21:41:32.196 2330 5102 I MediaCodec: MediaCodec will operate in async mode
02-03 21:41:32.196 2330 5102 D MediaCodec: flushMediametrics
02-03 21:41:32.196 2330 5102 D CCodec : [c2.android.aac.decoder] buffers are bound to CCodec for this session
02-03 21:41:32.196 2330 5102 D CCodecConfig: no c2 equivalents for log-session-id
02-03 21:41:32.197 2330 5102 D CCodecConfig: no c2 equivalents for flags
02-03 21:41:32.197 2330 5102 D CCodecConfig: config failed => CORRUPTED
02-03 21:41:32.197 2330 5102 D CCodecConfig: c2 config diff is c2::u32 raw.channel-count.value = 2
02-03 21:41:32.197 2330 5102 D CCodecConfig: c2::u32 raw.sample-rate.value = 48000
02-03 21:41:32.197 2330 5102 W Codec2Client: query -- param skipped: index = 1107298332.
02-03 21:41:32.197 2330 5102 D CCodec : client requested max input size 398, which is smaller than what component recommended (8192); overriding with component recommendation.
02-03 21:41:32.197 2330 5102 W CCodec : This behavior is subject to change. It is recommended that app developers double check whether the requested max input size is in reasonable range.
02-03 21:41:32.197 2330 5102 D CCodec : setup formats input: AMessage(what = 0x00000000) = {
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-album-mode = 0
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-boost-level = 127
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-cut-level = 127
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-effect-type = 3
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-encoded-target-level = -1
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-max-output-channel_count = 8
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-target-ref-level = 64
02-03 21:41:32.197 2330 5102 D CCodec : int32_t bitrate = 64000
02-03 21:41:32.197 2330 5102 D CCodec : int32_t channel-count = 2
02-03 21:41:32.197 2330 5102 D CCodec : int32_t level = 0
02-03 21:41:32.197 2330 5102 D CCodec : int32_t max-input-size = 8192
02-03 21:41:32.197 2330 5102 D CCodec : int32_t max-output-channel-count = 8
02-03 21:41:32.197 2330 5102 D CCodec : string mime = "audio/mp4a-latm"
02-03 21:41:32.197 2330 5102 D CCodec : int32_t profile = 2
02-03 21:41:32.197 2330 5102 D CCodec : int32_t sample-rate = 48000
02-03 21:41:32.197 2330 5102 D CCodec : }
02-03 21:41:32.197 2330 5102 D CCodec : setup formats output: AMessage(what = 0x00000000) = {
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-album-mode = 0
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-boost-level = 127
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-cut-level = 127
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-effect-type = 3
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-drc-output-loudness = -1
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-encoded-target-level = -1
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-max-output-channel_count = 8
02-03 21:41:32.197 2330 5102 D CCodec : int32_t aac-target-ref-level = 64
02-03 21:41:32.197 2330 5102 D CCodec : int32_t channel-count = 2
02-03 21:41:32.197 2330 5102 D CCodec : int32_t max-output-channel-count = 8
02-03 21:41:32.197 2330 5102 D CCodec : string mime = "audio/raw"
02-03 21:41:32.197 2330 5102 D CCodec : int32_t sample-rate = 48000
02-03 21:41:32.197 2330 5102 D CCodec : }
02-03 21:41:32.198 2330 5102 I CCodecConfig: query failed after returning 19 values (BAD_INDEX)
02-03 21:41:32.200 2330 5091 D MediaCodec: keep callback message for reclaim
02-03 21:41:32.201 2330 5102 W Codec2Client: query -- param skipped: index = 1342179345.
02-03 21:41:32.201 2330 5102 W Codec2Client: query -- param skipped: index = 2415921170.
02-03 21:41:32.201 2330 5102 W Codec2Client: query -- param skipped: index = 1610614798.
02-03 21:41:32.202 2330 5102 D CCodecBufferChannel: [c2.android.aac.decoder#858] Created input block pool with allocatorID 16 => poolID 27 - OK (0)
02-03 21:41:32.203 2330 5102 I CCodecBufferChannel: [c2.android.aac.decoder#858] Created output block pool with allocatorID 16 => poolID 828 - OK
02-03 21:41:32.203 2330 5102 D CCodecBufferChannel: [c2.android.aac.decoder#858] Configured output block pool ids 828 => OK
02-03 21:41:32.266 2330 5093 W MediaCodec: mapFormat: no mediaType information
02-03 21:41:32.285 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:32.321 2330 5091 D AudioTrack: getTimestamp_l(981): device stall time corrected using current time 584847988232938
02-03 21:41:32.804 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:33.305 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:33.807 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:34.291 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:34.810 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:35.293 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
02-03 21:41:35.794 2330 2359 E flutter : [ERROR:flutter/flow/layers/transform_layer.cc(23)] TransformLayer is constructed with an invalid matrix.
I have same issue, so I tried downgrade android apps to 1.93.x, and video playback work. but once I upgrade to 1.94 I gat the same error again..
I do not have hardware acceleration enabled and am also experiencing this on Android when running the latest version for both the mobile app and server.
Update: I previously downloaded and installed Immich from the Github release page, but after reinstalling the app from the Google Play Store instead, the video playback worked! So it's probably related to a difference in the Google Play build vs the GitHub release build.
Same issue here. Web playback is fine and iOS playback is fine.
@meichthys IF you are using the APK, the fixed version hasn't been uploaded yet
Is there an ETA for the fix of this bug? I love Immich but this bug is very annoying.
it fixed now