Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Android] Selecting a subtitle track when decoding to surfaceview freezes video #284

Open
sbenmeddour opened this issue Jan 30, 2025 · 15 comments

Comments

@sbenmeddour
Copy link

Describe the bug
if "decode to surfaceview", and select a subtitle track then video freezes (audio is still running fine)

  • No issue with GLSurfaceView
  • No issue if using player::updateNativeSurface instead of player::setProperty

To Reproduce

LibMdkJni.setProperty(handle, "video.decoder", "surface=$value")
//value is env->NewGlobalRef(surface) pointer
...after tracks are decoded from mediaInfo
LibMdkJni.setTracks(handle, 3, intArrayOf(trackIndex), 1)
// 3 = mediatype_subtitles

Expected behavior
No freeze

Environment:

  • OS: Android
Logs
10:43:18.622 mdk-logs    0.30.1 (git 7556ef4) - Multimedia Development Kit. Copyright (c) 2016-2025 WangBin(QtAV author) <wbsecg1 at gmail.com>
                       Build for: Android21/31 4KB ARMv8 AArch64; libc++180000; Clang18.0.3 (https://android.googlesource.com/toolchain/llvm-project d8003a456d14a3deb8054cdaa529ffbf02d9b262) NDK27.2.12479018; 07:56:08 Jan 25 2025
10:43:18.622 mdk-logs    global option: subtitle.fonts.file = assets://fonts/NotoSans-Regular.ttf
10:43:38.540 mdk-logs    default 0x71c40e74f0 new FrameReader...
10:43:38.540 mdk-logs    Registered audio backends: OpenSL AudioTrack null 
10:43:38.541 mdk-logs    OpenSL extensions: ANDROID_SDK_LEVEL_31
10:43:38.541 mdk-logs    default 0x71c416c750 new FrameReader...
10:43:38.541 mdk-logs    Registered audio backends: OpenSL AudioTrack null 
10:43:38.541 mdk-logs    OpenSL extensions: ANDROID_SDK_LEVEL_31
10:43:38.541 mdk-logs    0x71a40b26f0 player.Player()
10:43:38.541 mdk-logs    0x71a40b26f0 player.onStateChanged(1)
10:43:38.541 mdk-logs    0x71a40b26f0 player.onMediaStatus(1)
10:43:38.541 mdk-logs    0x71a40b26f0 player.onEvent(1, 0x0)
10:43:38.542 mdk-logs    0x71a40b26f0 player.setAudioBackends([AudioTrack, OpenSL])
10:43:38.543 mdk-logs    0x71a40b26f0 player.setDecoders(audio, [FFmpeg])
10:43:38.543 mdk-logs    audio decoders: "FFmpeg"
10:43:38.543 mdk-logs    audio decoders: "FFmpeg"
10:43:38.543 mdk-logs    0x71a40b26f0 player.setDecoders(video, [AMediaCodec:java=0:surface=1:image=1:acquire=latest:copy=0:async=1:dv=1, FFmpeg])
10:43:38.543 mdk-logs    video decoders: "AMediaCodec:java=0:surface=1:image=1:acquire=latest:copy=0:async=1:dv=1", "FFmpeg"
10:43:38.543 mdk-logs    video decoders: "AMediaCodec:java=0:surface=1:image=1:acquire=latest:copy=0:async=1:dv=1", "FFmpeg"
10:43:38.543 mdk-logs    0x71a40b26f0 player property: subtitle.scale = 1.0
10:43:38.543 mdk-logs    0x71a40b26f0 player property: subtitle.color = 0xffffffff
10:43:38.543 mdk-logs    0x71a40b26f0 player property: subtitle.color.background = 0x000000ff
10:43:38.547 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:38.629 mdk-logs    0x71a40b26f0 player.setMedia(https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test5.mkv)
10:43:38.629 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>0=>0, 0
10:43:38.629 mdk-logs    default0x71c40e74f0 stop, current state: , drequested: 0
10:43:38.629 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:38.629 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>0=>0, 0
10:43:38.629 mdk-logs    default0x71c40e74f0 stop, current state: , drequested: 0
10:43:38.629 mdk-logs    0x71a40b26f0 player.prepare(0, ..., 1282)
10:43:38.629 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:38.629 mdk-logs    0x71e413fd60 MediaControl.prepare(0, ...) https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test5.mkv
10:43:38.629 mdk-logs    default 0x71c40e74f0 FrameReader.start(0, ...)
10:43:38.629 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0=>0X2
10:43:38.631 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>0=>1, 0
10:43:38.631 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>1=>1, 0
10:43:38.631 mdk-logs    default FrameReader0x71c40e74f0 request to pause 1, loaded: 0.
10:43:38.631 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>1=>2, 0
10:43:38.631 mdk-logs    default FrameReader0x71c40e74f0 state requested: 2, current: 0
10:43:38.631 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:38.631 mdk-logs    0x71c40e74f0start frame reader thread: 483950861488
10:43:38.633 mdk-logs    Selected avformat runtime version: 61.7.100 (build: 61.7.100), license: LGPL version 2.1 or later
10:43:38.633 mdk-logs    0x71a40b26f0 player.set(1)avformat_version
10:43:38.633 mdk-logs    0x71e413fd60 virtual void mdk::MediaControlPush::setState(PlaybackState)@1101 requested state 2=>1, current state 0. status: 0X2
10:43:38.633 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:38.633 mdk-logs    default FrameReader0x71c40e74f0 request to pause 0, loaded: 0.
10:43:38.633 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>2=>1, 0
10:43:38.633 mdk-logs    default FrameReader0x71c40e74f0 state requested: 1, current: 0
10:43:38.633 mdk-logs    0x703017122c
10:43:38.633 mdk-logs    Trying MediaIO FFmpeg
10:43:38.634 mdk-logs    0x71640822f0 open url: https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test5.mkv
10:43:38.635 mdk-logs    FFmpeg/Libav runtime dc07f98-avbuild
10:43:38.635 mdk-logs    Selected avutil runtime version: 59.39.100 (build: 59.39.100), license: LGPL version 2.1 or later
10:43:38.635 mdk-logs    global option: ffmpeg.configuration = --extra-version=avbuild --disable-doc --disable-debug --disable-static --enable-shared --enable-runtime-cpudetect --disable-iamf --enable-mediacodec --enable-jni --disable-vulkan --disable-v4l2-m2m --disable-indevs --enable-indev=android_camera --disable-outdevs --disable-postproc --ar=llvm-ar --ranlib=llvm-ranlib --nm=llvm-nm --strip=llvm-strip --target-os=android --arch=arm64 --enable-cross-compile --cross-prefix=aarch64-linux-android- --pkg-config=pkg-config --cc=clang --extra-ldexeflags='-Wl,--gc-sections -Wl,-z,nocopyreloc -pie -fPIE ' --enable-lto --enable-pic --extra-cflags='-Wa,--noexecstack -fdata-sections -ffunction-sections -fstack-protector-strong -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIE -ffast-math -fstrict-aliasing --target=aarch64-none-linux-android21 -D__BIONIC_NO_PAGE_SIZE_MACRO=1' --extra-ldflags='-Wl,--gc-sections -Wl,-z,relro -Wl,-z,now --sysroot /Users/runner/Library/Android/sdk/ndk/27.2.12479018/toolchains/llvm/prebuilt/darwin-x86_64//sysroot -fuse-ld=lld -rtlib=compiler-rt --target=aarch64-none-linux-android21 -Wl,-z,max-page-size=16384' --enable-small --disable-outdevs --disable-filters --disable-muxers --disable-encoders --disable-decoders --disable-demuxers --disable-protocols --enable-wolfssl --disable-avdevice --enable-decoder='*sub*,movtext,*web*,aac*,ac3*,eac3*,alac*,ape,ass,av1*,ccaption,cfhd,cook,dca,dnxhd,exr,truehd,*yuv*,flv,flac,gif,h26[3-4]*,hevc*,hap,mp[1-3]*,prores,*[mj]peg*,mlp,mpl2,nellymoser,opus,pcm*,qtrle,*png*,tiff,rawvideo,rv*,sami,srt,ssa,v210*,vc1*,vorbis,vp[6-9]*,wm*,wrapped_avframe' --enable-demuxer='*sub*,*ac3,*ac,*avs*,*[mj]peg*,*vc*,*web*,au,ape,ass,av[1i],concat,dnxhd,dts*,*dash*,*flv,gif,hls,h264,kux,matroska,mov,mp3,mxf,obu,ogg,pcm*,rawvideo,rt*p,spdif,srt,v210*,wav,*pipe,image2' --enable-encoder='*_at,aac,gif,h26[3-4]*,av1*,hevc*,mjpeg*,*png,opus,pcm*,prores*,rawvideo,spdif,speedhq,*jpeg,*png,vp[8-9]*,wrapped_avframe' --enable-muxer='*jpeg,fifo,flv,gif,hls,h264,hevc,image2,mov,mp4,mpegts,matroska,null,pcm*,rawvideo,rt*,spdif,*pipe,*segment,webm,wav' --enable-filter='*null*,afade,*fifo,*format,*resample,aeval,atempo,pan,crop,eq*,framerate,hw*,loudnorm,scale,volume,yadif*' --enable-protocol='cache,concat*,crypto*,data,fd,*file,ftp,h*,i*,pipe,rt*,s*,t*,u*'
10:43:38.636 mdk-logs    av_dict_set0x7030226d9c
10:43:38.637 mdk-logs    FFmpeg/Libav runtime dc07f98-avbuild
10:43:38.640 mdk-logs    0x71a40b26f0 player property: video.decoder = surface=0
10:43:38.640 mdk-logs    0x71a40b26f0 player property: video.decoder = surface=6738
10:43:38.650 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:38.751 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:38.756 mdk-logs    0x71640822f0 url opened
10:43:38.759 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X2=>0X2
10:43:38.760 mdk-logs    0x7184122f10 avio set class
10:43:38.760 mdk-logs    before avformat_open_input. io: 0x71640822f0(FFmpeg)/pb: 0x7184122f10, url: https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test5.mkv
10:43:38.853 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:38.955 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:39.026 mdk-logs    after avformat_open_input. pb: 0x7184122f10, iformat: 0x70303089b8, context flags: 2097280, input format flags: 0
10:43:39.057 mdk-logs    0x71e413fd60 default FrameReader0x71c40e74f0 unloaded media's position 0
10:43:39.092 mdk-logs    supports 208 ffmpeg sw pixel formats. unsupported: uyyvyy411 rgb8 x2rgb10be x2bgr10be gbrap14be gbrap14le
10:43:39.092 mdk-logs    Format: matroska,webm, range: 0 +46665ms, bitrate: 5445236, size: 0
                       Metadata:
                         DATE_RELEASED: 2010
                         creation_time: 2010-08-21T18:06:43.000000Z
                         COMMENT: Matroska Validation File 8, secondary audio commentary track, misc subtitle tracks
                         TITLE: Big Buck Bunny - test 8
                         encoder: libebml v1.0.0 + libmatroska v1.0.0
                       Streams: 11
                        Video:
                         stream#0, range: 0 +0ms, frames: 0
                         codec: h264 tag: 0 profile: 77 level: 31, yuv420p, bpc:8, bpp:12(8,8,8), channels:(1,1,1), map: 0 1 2 0, bitrate: 0, 1024x576, fps: 24, bframes: 1, primaries: SMPTE170M, trc: BT709, matrix: SMPTE170M, range: Limited
                         extra data(35): 01 4D 40 1F FF E1 00 14 27 4D 40 1F A9 18 08 00 93 60 0D 41 80 41 AD B0 AD 7B DF 01 01 00 04 28 CE 09 C8 
                        Audio:
                         stream#1, range: 12 +0ms, frames: 0
                         codec: aac tag: 0 profile: 1 level: -99, sample size: 0/0, block align: 0, frame_size: 1024, f32p stereo(2) @48000Hz, bitrate: 0
                         extra data(2): 11 90 
                         stream#8, range: 9 +0ms, frames: 0
                         codec: aac tag: 0 profile: 1 level: -99, sample size: 0/0, block align: 0, frame_size: 1024, f32p mono(1) @22050Hz, bitrate: 0
                         extra data(2): 13 88 
                         Metadata:
                          title: Commentary
                          language: eng
                        Subtitle:
                         stream#2, range: 0 +46665ms codec: subrip
                         Metadata:
                          language: eng
                         stream#3, range: 42 +0ms codec: subrip
                         Metadata:
                          language: hun
                         stream#4, range: 42 +0ms codec: subrip
                         Metadata:
                          language: ger
                         stream#5, range: 42 +0ms codec: subrip
                         Metadata:
                          language: fre
                         stream#6, range: 42 +0ms codec: subrip
                         Metadata:
                          language: spa
                         stream#7, range: 42 +0ms codec: subrip
                         Metadata:
                          language: ita
                         stream#9, range: 42 +0ms codec: subrip
                         Metadata:
                          language: jpn
                         stream#10, range: 42 +0ms codec: subrip
10:43:39.096 mdk-logs    Loaded libass runtime: libass.so
10:43:39.096 mdk-logs    483950861488 JMI: JNI Modern Interface. Version 0.1.0
10:43:39.097 mdk-logs    [ass] libass API version: 0x1703000
10:43:39.097 mdk-logs    [ass] libass source: commit: unknown. 0.17.2
10:43:39.097 mdk-logs    [ass] Shaper: FriBidi 1.0.13 (SIMPLE) HarfBuzz-ng 10.2.0 (COMPLEX)
10:43:39.097 mdk-logs    CopyToAppFilesDir: assets://fonts/NotoSans-Regular.ttf => /data/user/0/fr.composeplayer.sample/files/mdk/NotoSans-Regular.ttf
10:43:39.097 mdk-logs    CopyToAppFilesDir: /data/user/0/fr.composeplayer.sample/files/mdk/NotoSans-Regular.ttf already exists
10:43:39.099 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/profileInstalled'
10:43:39.099 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/profileinstaller_profileWrittenFor_lastUpdateTime.dat'
10:43:39.099 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/mdk'
10:43:39.099 mdk-logs    [ass] Error opening memory font 'profileInstalled'
10:43:39.099 mdk-logs    [ass] Error opening memory font 'profileinstaller_profileWrittenFor_lastUpdateTime.dat'
10:43:39.105 mdk-logs    [ass] Using font provider androidfonts
10:43:39.105 mdk-logs    onPropertyChanged color.background = 0x000000ff
10:43:39.105 mdk-logs    onPropertyChanged color = 0xffffffff
10:43:39.105 mdk-logs    onPropertyChanged scale = 1.0
10:43:39.106 mdk-logs    0x71e413fd60 prepared callback is invoked
10:43:39.106 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X2=>0X4
10:43:39.106 mdk-logs    0x71c40e74f0 ***buffering progress 0%***
10:43:39.106 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X4=>0X14
10:43:39.106 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:39.108 mdk-logs    ++++++++++++BUFFERING START++++++++++++
10:43:39.108 mdk-logs    
10:43:39.108 mdk-logs    0x71a40b26f0 player.set(1)
10:43:39.108 mdk-logs    0x71e413fd60 virtual void mdk::MediaControlPush::setState(PlaybackState)@1101 requested state 1=>1, current state 0. status: 0X14
10:43:39.108 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:39.108 mdk-logs    default FrameReader0x71c40e74f0 request to pause 0, loaded: 4.
10:43:39.108 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>1=>1, 0
10:43:39.109 mdk-logs    0x71c40e74f0 start to decode video#0 packet @0.000000/0.000000 pos: 6229
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 state: 0=>1=>1, 1
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 update state: 0=>1
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 state: 1=>1=>2, 1
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 update state: 1=>2
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 state: 2=>2=>1, 1
10:43:39.116 mdk-logs    default FrameReader0x71c40e74f0 update state: 2=>1
10:43:39.116 mdk-logs    0x71c40e74f0 start to decode audio#1 packet @0.012000/0.012000 pos: 92890
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 8%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 12%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 14%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 16%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 25%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 29%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 31%***
10:43:39.118 mdk-logs    0x71c40e74f0 ***buffering progress 33%***
10:43:39.124 mdk-logs    starting decode loop thread mdk.vdec0@481698266288
10:43:39.124 mdk-logs    0x71c40e74f0 ***buffering progress 41%***
10:43:39.125 mdk-logs    starting decode loop thread mdk.adec1@481541209264
10:43:39.125 mdk-logs    0x71c40e74f0 audio stream#1 starting decoding loop from decoder index 0...
10:43:39.125 mdk-logs    0x71c40e74f0 creating audio decoder: FFmpeg...
10:43:39.126 mdk-logs    0x71c40e74f0 opening audio decoder: FFmpeg...
10:43:39.126 mdk-logs    opening ffmpeg audio decoder: aac
10:43:39.127 mdk-logs    AVCodec.Audio[aac.] decoder: 1 Single threads
10:43:39.127 mdk-logs    aac f32p, stereo @48000Hz
10:43:39.127 mdk-logs    0x71c40e74f0 ***buffering progress 46%***
10:43:39.127 mdk-logs    0x71c40e74f0 audio stream#1 sending 1 invalid AOT frame @0.012000s. seeking: 0
10:43:39.127 mdk-logs    0x71e413fd60 1st audio frame @0.012000
10:43:39.128 mdk-logs    0x71e413fd60 seek end audio frame @0.012000 seek_pos_: -1, sync_ao_ 1
10:43:39.128 mdk-logs    Selected avfilter runtime version: 10.4.100 (build: 10.4.100), license: LGPL version 2.1 or later
10:43:39.128 mdk-logs    0x71c40e74f0 ***buffering progress 49%***
10:43:39.128 mdk-logs    0x71c40e74f0 ***buffering progress 50%***
10:43:39.132 mdk-logs    0x71c40e74f0 video stream#0 starting decoding loop from decoder index 0...
10:43:39.132 mdk-logs    AudioRenderer format: 0x71c40e74f0 ***buffering progress 58%***
10:43:39.132 mdk-logs    0x71c40e74f0 creating video decoder: AMediaCodec:java=0:surface=1:image=1:acquire=latest:copy=0:async=1:dv=1...
10:43:39.133 mdk-logs    0x71c40e74f0 opening video decoder: AMediaCodec...
10:43:39.133 mdk-logs    0x71c40e74f0 ***buffering progress 61%***
10:43:39.133 mdk-logs    f32, stereo @0x71c40e74f0 ***buffering progress 63%***
10:43:39.133 mdk-logs    480000x71c40e74f0 ***buffering progress 66%***
10:43:39.134 mdk-logs    Hz, requested: f32p, stereo @48000Hz
10:43:39.135 mdk-logs    AudioRenderer format changed and reinitialize
10:43:39.135 mdk-logs    0x71c40e74f0 ***buffering progress 75%***481541209264
10:43:39.135 mdk-logs     JMI: JNI Modern Interface. Version 0.1.0
10:43:39.136 mdk-logs    CodecForMimeType: video/avc, profile: 2, level: -1
10:43:39.137 mdk-logs    0x71c40e74f0 ***buffering progress 78%***
10:43:39.137 mdk-logs    0x71c40e74f0 ***buffering progress 80%***
10:43:39.137 mdk-logs    0x71c40e74f0 ***buffering progress 83%***
10:43:39.137 mdk-logs    481698266288 JMI: JNI Modern Interface. Version 0.1.0
10:43:39.138 mdk-logs    0x71c40e74f0 ***buffering progress 91%***
10:43:39.138 mdk-logs    AudioTrack.getMinBufferSize: 32832, AudioOutput: 2048
10:43:39.138 mdk-logs    MediaCodecInfo name: c2.sec.amrnb.decoder, mime: audio/3gpp 
10:43:39.138 mdk-logs    MediaCodecInfo name: c2.sec.amrwb.decoder, mime: audio/amr-wb 
10:43:39.138 mdk-logs    MediaCodecInfo name: c2.sec.ape.decoder, mime: audio/x-ape 
10:43:39.138 mdk-logs    MediaCodecInfo name: c2.sec.flac.decoder, mime: audio/flac 
10:43:39.138 mdk-logs    MediaCodecInfo name: c2.sec.ima.decoder, mime: audio/x-ima 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.mp3.decoder, mime: audio/mpeg audio/mpeg-L1 audio/mpeg-L2 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.mp43.decoder, mime: video/mp43 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.vc1.decoder, mime: video/wvc1 video/x-ms-wmv 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.wma.decoder, mime: audio/x-ms-wma 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.wmv7.decoder, mime: video/x-ms-wmv7 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.sec.wmv8.decoder, mime: video/x-ms-wmv8 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.dolby.ac4.decoder, mime: audio/ac4 
10:43:39.139 mdk-logs    MediaCodecInfo name: OMX.dolby.ac4.decoder, mime: audio/ac4 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.dolby.eac3.decoder, mime: audio/ac3 audio/eac3 audio/eac3-joc 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.android.aac.decoder, mime: audio/mp4a-latm 
10:43:39.139 mdk-logs    MediaCodecInfo name: OMX.google.aac.decoder, mime: audio/mp4a-latm 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.android.amrnb.decoder, mime: audio/3gpp 
10:43:39.139 mdk-logs    MediaCodecInfo name: OMX.google.amrnb.decoder, mime: audio/3gpp 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.android.amrwb.decoder, mime: audio/amr-wb 
10:43:39.139 mdk-logs    MediaCodecInfo name: OMX.google.amrwb.decoder, mime: audio/amr-wb 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.android.flac.decoder, mime: audio/flac 
10:43:39.139 mdk-logs    MediaCodecInfo name: OMX.google.flac.decoder, mime: audio/flac 
10:43:39.139 mdk-logs    MediaCodecInfo name: c2.android.g711.alaw.decoder, mime: audio/g711-alaw 
10:43:39.140 mdk-logs    MediaCodecInfo name: OMX.google.g711.alaw.decoder, mime: audio/g711-alaw 
10:43:39.140 mdk-logs    MediaCodecInfo name: c2.android.g711.mlaw.decoder, mime: audio/g711-mlaw 
10:43:39.140 mdk-logs    MediaCodecInfo name: OMX.google.g711.mlaw.decoder, mime: audio/g711-mlaw 
10:43:39.140 mdk-logs    MediaCodecInfo name: c2.android.gsm.decoder, mime: audio/gsm 
10:43:39.140 mdk-logs    MediaCodecInfo name: OMX.google.gsm.decoder, mime: audio/gsm 
10:43:39.140 mdk-logs    0x71c40e74f0 ***buffering progress 95%***
10:43:39.140 mdk-logs    MediaCodecInfo name: c2.android.mp3.decoder, mime: audio/mpeg 
10:43:39.140 mdk-logs    MediaCodecInfo name: OMX.google.mp3.decoder, mime: audio/mpeg 
10:43:39.140 mdk-logs    MediaCodecInfo name: c2.android.opus.decoder, mime: audio/opus 
10:43:39.140 mdk-logs    MediaCodecInfo name: OMX.google.opus.decoder, mime: audio/opus 
10:43:39.140 mdk-logs    0x71c40e74f0 ***buffering progress 100%***
10:43:39.140 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X14=>0X124
10:43:39.140 mdk-logs    AudioTrack play/pause ERROR: Invalid object instance
10:43:39.141 mdk-logs    ++++++++++++BUFFERING END++++++++++++
10:43:39.141 mdk-logs    
10:43:39.141 mdk-logs    MediaCodecInfo name: c2.android.raw.decoder, mime: audio/raw 
10:43:39.141 mdk-logs    MediaCodecInfo name: OMX.google.raw.decoder, mime: audio/raw 
10:43:39.141 mdk-logs    MediaCodecInfo name: c2.android.vorbis.decoder, mime: audio/vorbis 
10:43:39.141 mdk-logs    MediaCodecInfo name: OMX.google.vorbis.decoder, mime: audio/vorbis 
10:43:39.141 mdk-logs    MediaCodecInfo name: c2.sec.aac.decoder, mime: audio/mp4a-latm 
10:43:39.141 mdk-logs    MediaCodecInfo name: OMX.Exynos.avc.dec, mime: video/avc video/avc profile: 2
10:43:39.141 mdk-logs    profileLevels count: 5
10:43:39.141 mdk-logs    profile: 1 level: 65536
10:43:39.141 mdk-logs    profile: 65536 level: 65536
10:43:39.141 mdk-logs    profile: 2 level: 65536
10:43:39.141 mdk-logs     [Match]. 
10:43:39.141 mdk-logs    MediaCodecInfo name: OMX.Exynos.avc.dec.secure, mime: video/avc video/avc profile: 2
10:43:39.142 mdk-logs    profileLevels count: 5
10:43:39.142 mdk-logs    profile: 1 level: 65536
10:43:39.142 mdk-logs    profile: 65536 level: 65536
10:43:39.142 mdk-logs    profile: 2 level: 65536
10:43:39.142 mdk-logs     [Match]. 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.h263.dec, mime: video/3gpp 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.hevc.dec, mime: video/hevc 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.hevc.dec.secure, mime: video/hevc 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.mpeg4.dec, mime: video/mp4v-es 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.vp8.dec, mime: video/x-vnd.on2.vp8 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.vp9.dec, mime: video/x-vnd.on2.vp9 
10:43:39.142 mdk-logs    MediaCodecInfo name: OMX.Exynos.vp9.dec.secure, mime: video/x-vnd.on2.vp9 
10:43:39.142 mdk-logs    MediaCodecInfo name: c2.sec.mpeg4.decoder, mime: video/mp4v-es 
10:43:39.142 mdk-logs    MediaCodecInfo name: c2.android.av1.decoder, mime: video/av01 
10:43:39.142 mdk-logs    MediaCodecInfo name: c2.android.avc.decoder, mime: video/avc video/avc profile: 2
10:43:39.142 mdk-logs    profileLevels count: 5
10:43:39.142 mdk-logs    profile: 65536 level: 65536
10:43:39.143 mdk-logs    profile: 1 level: 65536
10:43:39.143 mdk-logs    profile: 2 level: 65536
10:43:39.143 mdk-logs     [Match]. 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.h264.decoder, mime: video/avc video/avc profile: 2
10:43:39.143 mdk-logs    profileLevels count: 5
10:43:39.143 mdk-logs    profile: 65536 level: 65536
10:43:39.143 mdk-logs    profile: 1 level: 65536
10:43:39.143 mdk-logs    profile: 2 level: 65536
10:43:39.143 mdk-logs     [Match]. 
10:43:39.143 mdk-logs    MediaCodecInfo name: c2.android.h263.decoder, mime: video/3gpp 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.h263.decoder, mime: video/3gpp 
10:43:39.143 mdk-logs    MediaCodecInfo name: c2.android.hevc.decoder, mime: video/hevc 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.hevc.decoder, mime: video/hevc 
10:43:39.143 mdk-logs    MediaCodecInfo name: c2.android.mpeg4.decoder, mime: video/mp4v-es 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.mpeg4.decoder, mime: video/mp4v-es 
10:43:39.143 mdk-logs    MediaCodecInfo name: c2.android.vp8.decoder, mime: video/x-vnd.on2.vp8 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.vp8.decoder, mime: video/x-vnd.on2.vp8 
10:43:39.143 mdk-logs    MediaCodecInfo name: c2.android.vp9.decoder, mime: video/x-vnd.on2.vp9 
10:43:39.143 mdk-logs    MediaCodecInfo name: OMX.google.vp9.decoder, mime: video/x-vnd.on2.vp9 
10:43:39.144 mdk-logs    found codecs count: 4 | 0
10:43:39.144 mdk-logs    video/avc AMediaCodec_createCodecByName: OMX.Exynos.avc.dec
10:43:39.148 mdk-logs    AMediaCodec *ndk::AMediaCodec_createCodecByName(const char *) via ndk: true
10:43:39.164 mdk-logs    Using audio backend: AudioTrack
10:43:39.170 mdk-logs    0x71e413fd60 ao opened: 1, reopen: 1, bad ao: 0. valid: 0
10:43:39.171 mdk-logs    try to convert mp4 extra data to annexb
10:43:39.171 mdk-logs    sps count: 1
10:43:39.171 mdk-logs    pps count: 1
10:43:39.171 mdk-logs    nal length field bytes: 4, annexb extradata size: 32
10:43:39.171 mdk-logs    NALU length bytes: 4
10:43:39.171 mdk-logs    0x7154075a10 MediaCodec try to set async mode
10:43:39.172 mdk-logs    MediaCodec async mode is ready
10:43:39.172 mdk-logs    tunnel: 1, window: 0x0/0, surface: 0x1a52/6738, image: 0
10:43:39.173 mdk-logs    0x71443a35f8 filter graph: 
10:43:39.173 mdk-logs    +-----------+
                       |    src    |default--[48000Hz fltp:stereo]--swr:default
                       | (abuffer) |
                       +-----------+
                       
                                                                 +---------------+
                       swr:default--[48000Hz flt:stereo]--default|      dst      |
                                                                 | (abuffersink) |
                                                                 +---------------+
                       
                                                                  +-------------+
                       src:default--[48000Hz fltp:stereo]--default|     swr     |default--[48000Hz flt:stereo]--dst:default
                                                                  | (aresample) |
                                                                  +-------------+
10:43:39.180 mdk-logs    >>>>>>>>1st audio frame (after seek) rendered: 1, ao: 32, a: 12, delta: 20 +0.021333
10:43:39.180 mdk-logs    0x71e413fd60>32 00:00:00.0/00:00:46 cache 0v 2.5s/2594KB 40883KB/s
10:43:39.180 mdk-logs    0x71c40e74f0 audio stream#1 AOT frame is sent
10:43:39.186 mdk-logs    AMediaCodec selected video codec name: OMX.Exynos.avc.dec
10:43:39.210 mdk-logs    0x71c40e74f0 start to decode subtitle#2 packet @3.549000/3.549000 pos: 3698241
10:43:39.211 mdk-logs    starting decode loop thread mdk.sdec2@480541392048
10:43:39.213 mdk-logs    0x71c40e74f0 subtitle stream#2 starting decoding loop from decoder index 0...
10:43:39.213 mdk-logs    0x71c40e74f0 creating subtitle decoder: auto...
10:43:39.214 mdk-logs    0x71c40e74f0 opening subtitle decoder: FFmpeg...
10:43:39.214 mdk-logs    opening ffmpeg subtitle decoder: subrip
10:43:39.214 mdk-logs    AVCodec.Subtitle[subrip.] decoder: 1 Single threads
10:43:39.214 mdk-logs    subrip
10:43:39.214 mdk-logs    0x71c40e74f0 decode stored recovery packets: 0
10:43:39.215 mdk-logs    0x71c40e74f0 subtitle stream#2 sending 1 invalid AOT frame @3.549000s. seeking: 0
10:43:39.215 mdk-logs    0x71e413fd60 1st subtitle frame @3.549000
10:43:39.220 mdk-logs    0x71e413fd60 seek end subtitle frame @3.549000 seek_pos_: -1
10:43:39.221 mdk-logs    0x71c40e74f0 subtitle stream#2 AOT frame is sent
10:43:39.281 mdk-logs    void mdk::on_format(AMediaCodec *, void *, AMediaFormat *) thread: 481114639536
10:43:39.281 mdk-logs    MediaFormat: color-range: int32(2), color-standard: int32(4), color-transfer: int32(3), mime: string(video/raw), stride: int32(1024), slice-height: int32(576), color-format: int32(261), crop: Rect(0, 0, 1023, 575), android._dataspace: int32(259), width: int32(1024), height: int32(576), vendor.rtc-ext-dec-caps-vt-driver-version.number: int32(180315), vendor.rtc-ext-dec-low-latency.enable: int32(0), vendor.sec-ext-dec-compressed-color-format: int32(0)}
10:43:39.282 mdk-logs    unknown, bpc:0, bpp:0(), channels:(), map: 0 0 0 0
10:43:39.282 mdk-logs    size: 1024x576, bytes: 1024x576
10:43:39.282 mdk-logs    0x71c40e74f0 video stream#0 sending 1 invalid AOT frame @0.000000s. seeking: 0
10:43:39.282 mdk-logs    0x71e413fd60 1st video frame to render @0.000000s, sync time: 0.138000
10:43:39.282 mdk-logs    0-track seek end video frame @0.000000 seek_pos_: -1
10:43:39.282 mdk-logs    0x71e413fd60 1st video frame to render @0.000000s, sync time: 0.138000
10:43:39.282 mdk-logs    0x71e413fd60>138 00:00:00.0/00:00:46 cache 0v 3.5s/3597KB 11349KB/s |-138|>4ms update infms
10:43:39.282 mdk-logs    0x71c40e74f0 video stream#0 AOT frame is sent
10:43:39.418 mdk-logs    0x71e413fd60>308 00:00:00.2/00:00:46 cache 0v 3.7s/3801KB 1237KB/s |-16|>4ms update 19.4ms
10:43:39.549 mdk-logs    0x71e413fd60>436 00:00:00.4/00:00:46 cache 0v 3.5s/3605KB 1009KB/s |-19|>4ms update 26.7ms
10:43:39.678 mdk-logs    0x71e413fd60>564 00:00:00.5/00:00:46 cache 0v 3.6s/3762KB 1824KB/s |-21|>4ms update 30.5ms
10:43:39.807 mdk-logs    0x71e413fd60>691 00:00:00.6/00:00:46 cache 0v 3.5s/3582KB 634KB/s |-23|>4ms update 34.9ms
10:43:39.928 mdk-logs    0x71e413fd60>819 00:00:00.7/00:00:46 cache 0v 3.5s/3587KB 623KB/s |-26|>4ms update 42.3ms
10:43:40.055 mdk-logs    0x71e413fd60>917 00:00:00.9/00:00:46 cache 0v 3.4s/3501KB 1386KB/s |+11|>4ms update 42.5ms
10:43:40.188 mdk-logs    0x71e413fd60>1077 00:00:01.0/00:00:46 cache 0v 3.5s/3726KB 1049KB/s |-34|>4ms update 42.5ms
10:43:40.317 mdk-logs    0x71e413fd60>1208 00:00:01.2/00:00:46 cache 0v 3.5s/3599KB 2248KB/s |+4|<4ms update 39.9ms
10:43:40.446 mdk-logs    0x71e413fd60>1333 00:00:01.3/00:00:46 cache 0v 3.4s/3506KB 802KB/s |+0|<4ms update 39.9ms
10:43:40.570 mdk-logs    0x71e413fd60>1461 00:00:01.4/00:00:46 cache 0v 3.4s/3511KB 547KB/s |-3|<4ms update 39.7ms
10:43:40.695 mdk-logs    0x71a40b26f0 player.setActiveTracks(subtitle, {-1})
10:43:40.695 mdk-logs    deactivate track 0 of subtitle
10:43:40.695 mdk-logs    default 0x71c40e74f0-FrameReader::seek(1546, 0X2)
10:43:40.695 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X124=>0X1A4
10:43:40.696 mdk-logs    0x71c40e74f0 default FrameReaderImpl::seekTo(1546, 0X2 #1)
10:43:40.697 mdk-logs    0x71c40e74f0 clear packet queue for stream 2
10:43:40.698 mdk-logs    0x71c40e74f0 subtitle stream#2 EOF/EOS decoded. end: 1
10:43:40.701 mdk-logs    0x71c40e74f0 subtitle stream#2 check loop range for EOS. dec_state.seeking: 0. end: 1, nb_decoded:1
10:43:40.701 mdk-logs    default FrameReader0x71c40e74f0 subtitle stream#2 range loop end
10:43:40.702 mdk-logs    EOS subtitle frame of track 0
10:43:40.703 mdk-logs    0x71e413fd60>1587 00:00:01.5/00:00:46 cache 0v 0.0s/159KB 752KB/s |-4|<4ms update 39.8ms0x71c40e74f0 subtitle stream#2 decoding loop is finished. packets: 1, pts: [3.549000, 3.549000]
10:43:40.703 mdk-logs    
10:43:40.704 mdk-logs    virtual int64_t mdk::PacketIOWrapper::seek(int64_t, SeekFlag)@704 seek target(from 0): 1546ms, flags: +FromStart. now: 5.622000
10:43:40.704 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X1A4=>0X1A4
10:43:40.704 mdk-logs    Seek start. target time: 1546000 avseek flags: 1
10:43:40.705 mdk-logs    0x71a40b26f0 player.setActiveTracks(subtitle, {3})
10:43:40.705 mdk-logs    default 0x71c40e74f0-FrameReader::seek(1587, 0X2)
10:43:40.705 mdk-logs    default FrameReader 0x71c40e74f0 seek target 1587ms skipped: 1 frequent seek requested
10:43:40.705 mdk-logs    [ass] libass API version: 0x1703000
10:43:40.705 mdk-logs    [ass] libass source: commit: unknown. 0.17.2
10:43:40.706 mdk-logs    [ass] Shaper: FriBidi 1.0.13 (SIMPLE) HarfBuzz-ng 10.2.0 (COMPLEX)
10:43:40.706 mdk-logs    CopyToAppFilesDir: assets://fonts/NotoSans-Regular.ttf => /data/user/0/fr.composeplayer.sample/files/mdk/NotoSans-Regular.ttf
10:43:40.706 mdk-logs    CopyToAppFilesDir: /data/user/0/fr.composeplayer.sample/files/mdk/NotoSans-Regular.ttf already exists
10:43:40.707 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/profileInstalled'
10:43:40.707 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/profileinstaller_profileWrittenFor_lastUpdateTime.dat'
10:43:40.707 mdk-logs    [ass] Loading font file '/data/user/0/fr.composeplayer.sample/files/mdk'
10:43:40.707 mdk-logs    [ass] Error opening memory font 'profileInstalled'
10:43:40.707 mdk-logs    [ass] Error opening memory font 'profileinstaller_profileWrittenFor_lastUpdateTime.dat'
10:43:40.717 mdk-logs    [ass] Using font provider androidfonts
10:43:40.717 mdk-logs    onPropertyChanged color.background = 0x000000ff
10:43:40.717 mdk-logs    onPropertyChanged color = 0xffffffff
10:43:40.717 mdk-logs    onPropertyChanged scale = 1.0
10:43:40.738 mdk-logs    0x71c40e74f0 audio stream#1 is seeking #1... got flush pkt. flush decoder and  drop frames until seek target 1.5420s...
10:43:40.738 mdk-logs    invalid audio frame @-1.000000
10:43:40.738 mdk-logs    0x71c40e74f0 ***buffering progress 0%***
10:43:40.738 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X1A4=>0X194
10:43:40.739 mdk-logs    ++++++++++++BUFFERING START++++++++++++
10:43:40.740 mdk-logs    
10:43:40.868 mdk-logs    0x71e413fd60>1625 00:00:01.6/00:00:46 cache 0v 0.0s/0KB 752KB/s |+16|>4ms update 48.9ms
10:43:41.116 mdk-logs    0x71e413fd60>1667 00:00:01.6/00:00:46 cache 0v 0.0s/0KB 752KB/s |+58|>4ms update 61.9ms
10:43:41.133 mdk-logs    Seek end
10:43:41.134 mdk-logs    1 packets is read after seek. read more to get target pts
10:43:41.144 mdk-logs    1 packets is read after seek. seek result pts: 0.042000s, requested: 1546ms
10:43:41.144 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X194=>0X114
10:43:41.144 mdk-logs    seek_drop_non_video_: 1542 ms, seek_wait_frame_: 0...
10:43:41.189 mdk-logs    0x71c40e74f0 #1/1 audio seek_done: 1, seek_wait_frame_: 0/1
10:43:41.189 mdk-logs    0x71c40e74f0 audio stream#1 sending 1 invalid AOT frame @1.526000s. seeking: 0
10:43:41.189 mdk-logs    0x71e413fd60 seek end audio frame @1.526000 seek_pos_: -1, sync_ao_ 1
10:43:41.195 mdk-logs    0x71c40e74f0 ***buffering progress 4%***
10:43:41.199 mdk-logs    0x71c40e74f0 ***buffering progress 12%***
10:43:41.200 mdk-logs    0x71c40e74f0 ***buffering progress 17%***
10:43:41.201 mdk-logs    0x71c40e74f0 ***buffering progress 19%***
10:43:41.201 mdk-logs    0x71c40e74f0 ***buffering progress 20%***
10:43:41.202 mdk-logs    0x71c40e74f0 ***buffering progress 29%***
10:43:41.204 mdk-logs    0x71c40e74f0 ***buffering progress 34%***
10:43:41.204 mdk-logs    >>>>>>>>1st audio frame (after seek) rendered: 1, ao: 1546, a: 1526, delta: 20 +0.021333
10:43:41.204 mdk-logs    0x71c40e74f0 audio stream#1 AOT frame is sent
10:43:41.205 mdk-logs    0x71c40e74f0 ***buffering progress 36%***
10:43:41.205 mdk-logs    0x71c40e74f0 ***buffering progress 37%***
10:43:41.212 mdk-logs    0x71c40e74f0 ***buffering progress 41%***
10:43:41.213 mdk-logs    0x71c40e74f0 ***buffering progress 45%***
10:43:41.214 mdk-logs    0x71c40e74f0 ***buffering progress 51%***
10:43:41.214 mdk-logs    0x71c40e74f0 ***buffering progress 53%***
10:43:41.214 mdk-logs    0x71c40e74f0 ***buffering progress 54%***
10:43:41.216 mdk-logs    0x71c40e74f0 ***buffering progress 62%***
10:43:41.217 mdk-logs    0x71c40e74f0 ***buffering progress 68%***
10:43:41.217 mdk-logs    0x71c40e74f0 ***buffering progress 70%***
10:43:41.219 mdk-logs    0x71c40e74f0 ***buffering progress 79%***
10:43:41.221 mdk-logs    0x71c40e74f0 ***buffering progress 85%***
10:43:41.221 mdk-logs    0x71c40e74f0 ***buffering progress 87%***
10:43:41.223 mdk-logs    0x71c40e74f0 ***buffering progress 95%***
10:43:41.224 mdk-logs    0x71c40e74f0 ***buffering progress 100%***
10:43:41.224 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X114=>0X124
10:43:41.225 mdk-logs    ++++++++++++BUFFERING END++++++++++++
10:43:41.225 mdk-logs    
10:43:41.246 mdk-logs    0x71c40e74f0 start to decode subtitle#5 packet @3.625000/3.625000 pos: 3801675
10:43:41.247 mdk-logs    starting decode loop thread mdk.sdec5@480493530288
10:43:41.247 mdk-logs    0x71c40e74f0 subtitle stream#5 starting decoding loop from decoder index 0...
10:43:41.248 mdk-logs    0x71c40e74f0 creating subtitle decoder: auto...
10:43:41.248 mdk-logs    0x71c40e74f0 opening subtitle decoder: FFmpeg...
10:43:41.248 mdk-logs    opening ffmpeg subtitle decoder: subrip
10:43:41.248 mdk-logs    AVCodec.Subtitle[subrip.] decoder: 1 Single threads
10:43:41.248 mdk-logs    subrip
10:43:41.249 mdk-logs    0x71c40e74f0 subtitle stream#5 dropFramesUntil: 3.549000. packets: 1 pts: [3.625000, 3.625000]
10:43:41.249 mdk-logs    0x71c40e74f0 subtitle stream#5 sending 1 invalid AOT frame @3.625000s. seeking: 1
10:43:41.249 mdk-logs    0x71e413fd60 seek end subtitle frame @3.625000 seek_pos_: -1
10:43:41.250 mdk-logs    subtitle continue without sending frame
10:43:41.393 mdk-logs    0x71e413fd60>1736 00:00:01.7/00:00:46 cache 0v 3.9s/4585KB 61127KB/s |-28|>4ms update 77.9ms
10:43:41.394 mdk-logs    video continue without sending frame
10:43:41.394 mdk-logs    0x71c40e74f0 video stream#0 is seeking #1... got flush pkt. flush decoder and  drop frames until seek target 1.5420s...
10:43:41.395 mdk-logs    invalid video frame @-1.000000
10:43:42.416 mdk-logs    0x71e413fd60>2739 00:00:02.7/00:00:46 cache 0v 3.0s/5452KB 1423KB/s
10:43:42.544 mdk-logs    0x71e413fd60>2868 00:00:02.8/00:00:46 cache 0v 2.8s/5632KB 1423KB/s
10:43:42.672 mdk-logs    0x71e413fd60>2996 00:00:02.9/00:00:46 cache 0v 2.7s/5812KB 1423KB/s
10:43:42.800 mdk-logs    0x71e413fd60>3125 00:00:03.1/00:00:46 cache 0v 2.6s/5978KB 1423KB/s
10:43:42.928 mdk-logs    0x71e413fd60>3251 00:00:03.2/00:00:46 cache 0v 2.5s/6159KB 1423KB/s
10:43:43.056 mdk-logs    0x71e413fd60>3380 00:00:03.3/00:00:46 cache 0v 2.3s/6339KB 1423KB/s
10:43:43.184 mdk-logs    0x71e413fd60>3508 00:00:03.4/00:00:46 cache 0v 2.2s/6505KB 1423KB/s
10:43:43.312 mdk-logs    0x71e413fd60>3637 00:00:03.6/00:00:46 cache 0v 2.1s/6686KB 1423KB/s
10:43:43.441 mdk-logs    0x71e413fd60>3764 00:00:03.7/00:00:46 cache 0v 1.9s/6866KB 1423KB/s
10:43:43.568 mdk-logs    0x71e413fd60>3893 00:00:03.8/00:00:46 cache 0v 1.8s/7032KB 1423KB/s
10:43:43.697 mdk-logs    0x71e413fd60>4019 00:00:04.0/00:00:46 cache 0v 1.7s/7213KB 1423KB/s
10:43:43.824 mdk-logs    0x71e413fd60>4149 00:00:04.1/00:00:46 cache 0v 1.6s/7393KB 1423KB/s
10:43:43.952 mdk-logs    0x71e413fd60>4276 00:00:04.2/00:00:46 cache 0v 1.4s/7559KB 1423KB/s
10:43:44.080 mdk-logs    0x71e413fd60>4403 00:00:04.3/00:00:46 cache 0v 1.3s/7739KB 1423KB/s
10:43:44.208 mdk-logs    0x71e413fd60>4533 00:00:04.5/00:00:46 cache 0v 1.2s/7905KB 1423KB/s
10:43:44.336 mdk-logs    0x71e413fd60>4660 00:00:04.6/00:00:46 cache 0v 1.0s/8086KB 1423KB/s
10:43:44.464 mdk-logs    0x71e413fd60>4789 00:00:04.7/00:00:46 cache 0v 0.9s/8266KB 1423KB/s
10:43:44.592 mdk-logs    0x71e413fd60>4916 00:00:04.8/00:00:46 cache 0v 0.8s/8432KB 1423KB/s
10:43:44.720 mdk-logs    0x71e413fd60>5044 00:00:05.0/00:00:46 cache 0v 0.7s/8613KB 1423KB/s
10:43:44.850 mdk-logs    0x71e413fd60>5172 00:00:05.1/00:00:46 cache 0v 0.5s/8793KB 1423KB/s
10:43:44.976 mdk-logs    0x71e413fd60>5301 00:00:05.2/00:00:46 cache 0v 0.4s/8959KB 1423KB/s
10:43:45.104 mdk-logs    0x71e413fd60>5427 00:00:05.4/00:00:46 cache 0v 0.3s/9139KB 1423KB/s
10:43:45.232 mdk-logs    0x71e413fd60>5557 00:00:05.5/00:00:46 cache 0v 0.1s/9306KB 1423KB/s
10:43:45.360 mdk-logs    0x71e413fd60>5684 00:00:05.6/00:00:46 cache 0v 0.0s/9486KB 1423KB/s
10:43:45.360 mdk-logs    0x71c40e74f0 ***buffering progress 0%***
10:43:45.361 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X124=>0X114
10:43:45.362 mdk-logs    ++++++++++++BUFFERING START++++++++++++
10:43:45.362 mdk-logs    
10:43:45.366 mdk-logs    0x71c40e74f0 ***buffering progress 2%***
10:43:45.366 mdk-logs    0x71c40e74f0 ***buffering progress 4%***
10:43:45.366 mdk-logs    0x71c40e74f0 ***buffering progress 6%***
10:43:45.366 mdk-logs    0x71c40e74f0 ***buffering progress 8%***
10:43:45.367 mdk-logs    0x71c40e74f0 ***buffering progress 10%***
10:43:45.367 mdk-logs    0x71c40e74f0 ***buffering progress 12%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 14%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 16%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 19%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 21%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 23%***
10:43:45.372 mdk-logs    0x71c40e74f0 ***buffering progress 25%***
10:43:45.373 mdk-logs    0x71c40e74f0 ***buffering progress 27%***
10:43:45.373 mdk-logs    0x71c40e74f0 ***buffering progress 29%***
10:43:45.380 mdk-logs    0x71c40e74f0 ***buffering progress 31%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 34%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 36%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 38%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 40%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 42%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 44%***
10:43:45.381 mdk-logs    0x71c40e74f0 ***buffering progress 46%***
10:43:45.383 mdk-logs    0x71c40e74f0 ***buffering progress 48%***
10:43:45.383 mdk-logs    0x71c40e74f0 ***buffering progress 51%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 53%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 55%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 57%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 59%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 61%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 63%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 66%***
10:43:45.385 mdk-logs    0x71c40e74f0 ***buffering progress 68%***
10:43:45.388 mdk-logs    0x71c40e74f0 subtitle stream#5 sending 1 invalid AOT frame @6.375000s. seeking: 1
10:43:45.388 mdk-logs    0x71e413fd60 seek end subtitle frame @6.375000 seek_pos_: -1
10:43:45.389 mdk-logs    subtitle continue without sending frame
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 70%***
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 72%***
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 74%***
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 76%***
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 78%***
10:43:45.389 mdk-logs    0x71c40e74f0 ***buffering progress 80%***
10:43:45.390 mdk-logs    0x71c40e74f0 ***buffering progress 83%***
10:43:45.390 mdk-logs    0x71c40e74f0 ***buffering progress 85%***
10:43:45.392 mdk-logs    0x71c40e74f0 ***buffering progress 87%***
10:43:45.392 mdk-logs    0x71c40e74f0 ***buffering progress 89%***
10:43:45.393 mdk-logs    0x71c40e74f0 ***buffering progress 91%***
10:43:45.393 mdk-logs    0x71c40e74f0 ***buffering progress 93%***
10:43:45.393 mdk-logs    0x71c40e74f0 ***buffering progress 95%***
10:43:45.393 mdk-logs    0x71c40e74f0 ***buffering progress 98%***
10:43:45.393 mdk-logs    0x71c40e74f0 ***buffering progress 100%***
10:43:45.393 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X114=>0X124
10:43:45.394 mdk-logs    ++++++++++++BUFFERING END++++++++++++
10:43:45.394 mdk-logs    
10:43:45.488 mdk-logs    0x71e413fd60>5813 00:00:05.7/00:00:46 cache 0v 1.0s/10394KB 13179KB/s
10:43:45.616 mdk-logs    0x71e413fd60>5940 00:00:05.9/00:00:46 cache 0v 0.8s/10814KB 13179KB/s
10:43:45.744 mdk-logs    0x71e413fd60>6068 00:00:06.0/00:00:46 cache 0v 0.7s/11269KB 13179KB/s
10:43:45.872 mdk-logs    0x71e413fd60>6196 00:00:06.1/00:00:46 cache 0v 0.6s/11689KB 13179KB/s
10:43:46.000 mdk-logs    0x71e413fd60>6323 00:00:06.3/00:00:46 cache 0v 0.4s/12145KB 13179KB/s
10:43:46.128 mdk-logs    0x71e413fd60>6453 00:00:06.4/00:00:46 cache 0v 0.3s/12600KB 13179KB/s
10:43:46.256 mdk-logs    0x71e413fd60>6580 00:00:06.5/00:00:46 cache 0v 0.2s/13020KB 13179KB/s
10:43:46.384 mdk-logs    0x71e413fd60>6709 00:00:06.6/00:00:46 cache 0v 0.1s/13475KB 13179KB/s
10:43:46.428 mdk-logs    0x71c40e74f0 ***buffering progress 0%***
10:43:46.428 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X124=>0X114
10:43:46.429 mdk-logs    ++++++++++++BUFFERING START++++++++++++
10:43:46.429 mdk-logs    
10:43:46.433 mdk-logs    0x71c40e74f0 ***buffering progress 2%***
10:43:46.433 mdk-logs    0x71c40e74f0 ***buffering progress 4%***
10:43:46.433 mdk-logs    0x71c40e74f0 ***buffering progress 6%***
10:43:46.433 mdk-logs    0x71c40e74f0 ***buffering progress 8%***
10:43:46.433 mdk-logs    0x71c40e74f0 ***buffering progress 10%***
10:43:46.434 mdk-logs    0x71c40e74f0 ***buffering progress 12%***
10:43:46.438 mdk-logs    0x71c40e74f0 ***buffering progress 14%***
10:43:46.438 mdk-logs    0x71c40e74f0 ***buffering progress 17%***
10:43:46.438 mdk-logs    0x71c40e74f0 ***buffering progress 19%***
10:43:46.438 mdk-logs    0x71c40e74f0 ***buffering progress 21%***
10:43:46.439 mdk-logs    0x71c40e74f0 ***buffering progress 23%***
10:43:46.439 mdk-logs    0x71c40e74f0 ***buffering progress 25%***
10:43:46.439 mdk-logs    0x71c40e74f0 ***buffering progress 27%***
10:43:46.439 mdk-logs    0x71c40e74f0 ***buffering progress 29%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 31%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 34%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 36%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 38%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 40%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 42%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 44%***
10:43:46.447 mdk-logs    0x71c40e74f0 ***buffering progress 46%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 49%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 51%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 53%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 55%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 57%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 59%***
10:43:46.450 mdk-logs    0x71c40e74f0 ***buffering progress 61%***
10:43:46.451 mdk-logs    0x71c40e74f0 ***buffering progress 63%***
10:43:46.453 mdk-logs    0x71c40e74f0 subtitle stream#5 sending 1 invalid AOT frame @7.375000s. seeking: 1
10:43:46.453 mdk-logs    0x71e413fd60 seek end subtitle frame @7.375000 seek_pos_: -1
10:43:46.454 mdk-logs    subtitle continue without sending frame
10:43:46.454 mdk-logs    0x71c40e74f0 ***buffering progress 66%***
10:43:46.454 mdk-logs    0x71c40e74f0 ***buffering progress 68%***
10:43:46.454 mdk-logs    0x71c40e74f0 ***buffering progress 70%***
10:43:46.455 mdk-logs    0x71c40e74f0 ***buffering progress 72%***
10:43:46.455 mdk-logs    0x71c40e74f0 ***buffering progress 74%***
10:43:46.455 mdk-logs    0x71c40e74f0 ***buffering progress 76%***
10:43:46.455 mdk-logs    0x71c40e74f0 ***buffering progress 78%***
10:43:46.455 mdk-logs    0x71c40e74f0 ***buffering progress 81%***
10:43:46.457 mdk-logs    0x71c40e74f0 ***buffering progress 83%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 85%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 87%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 89%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 91%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 93%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 96%***
10:43:46.458 mdk-logs    0x71c40e74f0 ***buffering progress 98%***
10:43:46.461 mdk-logs    0x71c40e74f0 ***buffering progress 100%***
10:43:46.461 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X114=>0X124
10:43:46.463 mdk-logs    ++++++++++++BUFFERING END++++++++++++
10:43:46.463 mdk-logs    
10:43:46.512 mdk-logs    0x71e413fd60>6836 00:00:06.8/00:00:46 cache 0v 1.1s/14577KB 15050KB/s
10:43:46.640 mdk-logs    0x71e413fd60>6964 00:00:06.9/00:00:46 cache 0v 1.0s/15096KB 15050KB/s
10:43:46.768 mdk-logs    0x71e413fd60>7092 00:00:07.0/00:00:46 cache 0v 0.9s/15574KB 15050KB/s
10:43:46.896 mdk-logs    0x71e413fd60>7221 00:00:07.2/00:00:46 cache 0v 0.7s/16092KB 15050KB/s
10:43:47.025 mdk-logs    0x71e413fd60>7347 00:00:07.3/00:00:46 cache 0v 0.6s/16611KB 15050KB/s
10:43:47.153 mdk-logs    0x71e413fd60>7477 00:00:07.4/00:00:46 cache 0v 0.5s/17090KB 15050KB/s
10:43:47.279 mdk-logs    0x71e413fd60>7604 00:00:07.5/00:00:46 cache 0v 0.4s/17608KB 15050KB/s
10:43:47.408 mdk-logs    0x71e413fd60>7733 00:00:07.7/00:00:46 cache 0v 0.2s/18127KB 15050KB/s
10:43:47.535 mdk-logs    0x71e413fd60>7860 00:00:07.8/00:00:46 cache 0v 0.1s/18605KB 15050KB/s
10:43:47.622 mdk-logs    0x71c40e74f0 ***buffering progress 0%***
10:43:47.622 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X124=>0X114
10:43:47.624 mdk-logs    ++++++++++++BUFFERING START++++++++++++
10:43:47.624 mdk-logs    
10:43:47.635 mdk-logs    0x71c40e74f0 ***buffering progress 2%***
10:43:47.635 mdk-logs    0x71c40e74f0 ***buffering progress 4%***
10:43:47.635 mdk-logs    0x71c40e74f0 ***buffering progress 6%***
10:43:47.635 mdk-logs    0x71c40e74f0 ***buffering progress 8%***
10:43:47.635 mdk-logs    0x71c40e74f0 ***buffering progress 10%***
10:43:47.636 mdk-logs    0x71c40e74f0 ***buffering progress 12%***
10:43:47.641 mdk-logs    0x71c40e74f0 ***buffering progress 14%***
10:43:47.641 mdk-logs    0x71c40e74f0 ***buffering progress 17%***
10:43:47.641 mdk-logs    0x71c40e74f0 ***buffering progress 19%***
10:43:47.641 mdk-logs    0x71c40e74f0 ***buffering progress 21%***
10:43:47.643 mdk-logs    0x71c40e74f0 ***buffering progress 23%***
10:43:47.643 mdk-logs    0x71c40e74f0 ***buffering progress 25%***
10:43:47.643 mdk-logs    0x71c40e74f0 ***buffering progress 27%***
10:43:47.644 mdk-logs    0x71c40e74f0 ***buffering progress 29%***
10:43:47.644 mdk-logs    0x71c40e74f0 ***buffering progress 31%***
10:43:47.644 mdk-logs    0x71c40e74f0 ***buffering progress 34%***
10:43:47.644 mdk-logs    0x71c40e74f0 ***buffering progress 36%***
10:43:47.644 mdk-logs    0x71c40e74f0 ***buffering progress 38%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 40%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 42%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 44%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 46%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 48%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 51%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 53%***
10:43:47.647 mdk-logs    0x71c40e74f0 ***buffering progress 55%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 57%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 59%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 61%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 63%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 65%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 68%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 70%***
10:43:47.650 mdk-logs    0x71c40e74f0 ***buffering progress 72%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 74%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 76%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 78%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 80%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 83%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 85%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 87%***
10:43:47.652 mdk-logs    0x71c40e74f0 ***buffering progress 89%***
10:43:47.655 mdk-logs    0x71c40e74f0 ***buffering progress 91%***
10:43:47.655 mdk-logs    0x71c40e74f0 ***buffering progress 93%***
10:43:47.655 mdk-logs    0x71c40e74f0 ***buffering progress 96%***
10:43:47.656 mdk-logs    0x71c40e74f0 ***buffering progress 98%***
10:43:47.656 mdk-logs    0x71c40e74f0 ***buffering progress 100%***
10:43:47.656 mdk-logs    default 0x71c40e74f0 FrameReader::update MediaStatus 0X114=>0X124
10:43:47.658 mdk-logs    ++++++++++++BUFFERING END++++++++++++
10:43:47.658 mdk-logs    
10:43:47.666 mdk-logs    0x71e413fd60>7988 00:00:07.9/00:00:46 cache 0v 1.1s/19797KB 24657KB/s
10:43:47.793 mdk-logs    0x71e413fd60>8116 00:00:08.0/00:00:46 cache 0v 1.0s/20358KB 24657KB/s
10:43:47.921 mdk-logs    0x71e413fd60>8245 00:00:08.2/00:00:46 cache 0v 0.8s/20966KB 24657KB/s
10:43:48.048 mdk-logs    0x71e413fd60>8372 00:00:08.3/00:00:46 cache 0v 0.7s/21573KB 24657KB/s
10:43:48.176 mdk-logs    0x71e413fd60>8501 00:00:08.4/00:00:46 cache 0v 0.6s/22133KB 24657KB/s
10:43:48.228 mdk-logs    0x71a40b26f0 player.set(2)
10:43:48.228 mdk-logs    0x71e413fd60 virtual void mdk::MediaControlPush::setState(PlaybackState)@1101 requested state 1=>2, current state 1. status: 0X124
10:43:48.229 mdk-logs    default FrameReader0x71c40e74f0 request to pause 1, loaded: 4.
10:43:48.229 mdk-logs    default FrameReader0x71c40e74f0 state: 1=>1=>2, 0
10:43:48.229 mdk-logs    default FrameReader0x71c40e74f0 state requested: 2, current: 1
10:43:48.239 mdk-logs    default FrameReader0x71c40e74f0 state: 1=>2=>2, 1
10:43:48.239 mdk-logs    default FrameReader0x71c40e74f0 update state: 1=>2
Enregistrement.de.l.ecran.2025-01-30.a.11.00.07.mov
@wang-bin
Copy link
Owner

what about not decode to surfaceview? if decode to surfaceview, subtitle will not be rendered, you have to draw subtitle yourself

@sbenmeddour
Copy link
Author

doc says
jni surface ptr(jobject): decode to provided surface, video tunnel mode. Usually you have to use the return value of NewGlobalRef()

I tried this because I wasn't able to get the HDMI device (television) turn ON dolby vision or HDR mode automatically when playing dovi files or HDR
I tought tunnel mode would achieve it

By the way if you know how to achieve it please let me know

@wang-bin
Copy link
Owner

decode to surfaceview can support hdr, but not dolby vision. dolby vision requires decoder support, for example using decoder AMediaCodec:dv=1, but not all systems support it(and it seems broken in my latest sdk). mdk's renderers and decoders can support hdr and dolby vision on all platforms. With the latest sdk, disable tunnel mode, call player->set(ColorSpaceUnknown) can enable hdr color space and metadata passthrough. I only tested on my xiaomi phone, tv should be ok too. setting environment var putenv(EGL_HDR_METADATA=0) can disable hdr metadata passthrough, then the result is the same as xiaomi's system player. putenv(EGL_HDR_METADATA=1) (it's the default) will enable metadata passthrough, seems better (brighter) than system player. I also updated android example https://github.com/wang-bin/mdk-android , you can switch HDR to see the effect

@wang-bin
Copy link
Owner

Can you share your example so I can test the freeze?

@sbenmeddour
Copy link
Author

decode to surfaceview can support hdr, but not dolby vision. dolby vision requires decoder support, for example using decoder AMediaCodec:dv=1, but not all systems support it(and it seems broken in my latest sdk). mdk's renderers and decoders can support hdr and dolby vision on all platforms. With the latest sdk, disable tunnel mode, call player->set(ColorSpaceUnknown) can enable hdr color space and metadata passthrough. I only tested on my xiaomi phone, tv should be ok too. setting environment var putenv(EGL_HDR_METADATA=0) can disable hdr metadata passthrough, then the result is the same as xiaomi's system player. putenv(EGL_HDR_METADATA=1) (it's the default) will enable metadata passthrough, seems better (brighter) than system player. I also updated android example https://github.com/wang-bin/mdk-android , you can switch HDR to see the effect

I can confirm decode to surface view is the only way I found to get Dolby Vision to toggle on on TV (I am using a Google Streamer with LG C4 OLED tv, both DV compatible)

without this, the television never toggles Dolby vision. Same thing on MPV (vo:mediacodec_embed,hwdec:mediacodec) and setting "wid" (same behavior as decode to surface)

This is not an issue for me to use decode to surfaceview, but I can't disable subtitles rendering (setting "subtitle" or "cc" to 0 has no effect)

@sbenmeddour
Copy link
Author

Can you share your example so I can test the freeze?

Do you mean video file or code ?

file is https://github.com/ietf-wg-cellar/matroska-test-files/raw/master/test_files/test5.mkv

I you want code, I need to create a small repro, project is quite large

@wang-bin
Copy link
Owner

dolby vision profile 5 or 8? decode to surfaceview can't display dolby vision on my phone. my example can toggle hdr10, and i render dolby vision as hdr10.

i need the code

@sbenmeddour
Copy link
Author

  private val surfaceCallback = object : SurfaceHolder.Callback {

    private var currentRef: Long = 0L
      set(value) {
        field = value
        if (mdkConfig.decodeToSurfaceView) {
          LibMdkJni.setProperty(handle, "video.decoder", "surface=$value")
        }
      }

    override fun surfaceCreated(holder: SurfaceHolder) {
      currentRef = LibJni.deleteGlobalRef(currentRef)
      currentRef = LibJni.createGlobalRef(holder.surface)
      if (mdkConfig.decodeToSurfaceView) return
      LibMdkJni.updateNativeSurface(handle, 0, 0, 0, 0)
      LibMdkJni.updateNativeSurface(handle, currentRef, -1, -1, 0)
    }

    override fun surfaceDestroyed(holder: SurfaceHolder) {
      currentRef = LibJni.deleteGlobalRef(currentRef)
      if (mdkConfig.decodeToSurfaceView) return
      LibMdkJni.updateNativeSurface(handle, 0, 0, 0, 0)
    }

    override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
      if (mdkConfig.decodeToSurfaceView) return
      LibMdkJni.updateNativeSurface(handle, currentRef, width, height, 0)
    }


  }

DV SAMPLE FILES:

dv 5, 8.4, 8.1

They all work with MPV even 5 (it should not work on google streamer O_o)
With mdk, 8.4, 8.1 works but not 5 (this is normal, device has a codec issue)

video decoders:

AMediaCodec:java=0:surface=1:image=1:acquire=latest:copy=0:async=1:dv=1, FFmpeg

so when mdkConfig.decodeToSurfaceView == true
Tv goes in dolby vision mode, this is perfect
else nothing happens (dolby images are still decoded well, but tv won't use its max luminosity and it is like sdr eventualy)

Tried to change colorspace without effect

@sbenmeddour
Copy link
Author

By the way dolby vision is not an issue anymore, the main issue is subtitle rendering.

I can use new api to get subs as text and display them in an Android view, but calling player->setTracks causes the video freeze

  • Tried property "cc": 0
  • Tried property "subtitle": 0

No effect, video still freezes after track selection

@wang-bin
Copy link
Owner

wang-bin commented Jan 30, 2025

i don't think dv can be turned on if decode to surfaceview but without additional settings. no effect on my phone. can you show me mpv and mdk log? AMediaVodec:dv=1 will output sdr image iirc. i also need the log with set(colorspaceunknown)

can you modify my android example so i can test the freeze soon. i'm not familiar with ui.

@sbenmeddour
Copy link
Author

Will fork project tomorrow and update it

@sbenmeddour
Copy link
Author

Are you using AMediaFormat in your internal mdk code ?

@wang-bin
Copy link
Owner

Are you using AMediaFormat in your internal mdk code ?

yes

@sbenmeddour
Copy link
Author

If the TV does not enable DV mode automatically, maybe there is missing info in MediaFormat?

Exoplayer's implementation does this in case of DV video:

MediaCodecUtil.java
MediaCodecVideoRenderer.java

MediaFormatUtil.maybeSetColorInfo(mediaFormat, format.colorInfo);
    if (MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
      // Some phones require the profile to be set on the codec.
      // See https://github.com/google/ExoPlayer/pull/5438.
      Pair<Integer, Integer> codecProfileAndLevel = MediaCodecUtil.getCodecProfileAndLevel(format);
      if (codecProfileAndLevel != null) {
        MediaFormatUtil.maybeSetInteger(
            mediaFormat, MediaFormat.KEY_PROFILE, codecProfileAndLevel.first);
      }
    }
  @Nullable
  public static Pair<Integer, Integer> getCodecProfileAndLevel(Format format) {
    if (format.codecs == null) {
      return null;
    }
    String[] parts = format.codecs.split("\\.");
    // Dolby Vision can use DV, AVC or HEVC codec IDs, so check the MIME type first.
    if (MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
      return getDolbyVisionProfileAndLevel(format.codecs, parts);
    }
    switch (parts[0]) {
      case CODEC_ID_AVC1:
      case CODEC_ID_AVC2:
        return getAvcProfileAndLevel(format.codecs, parts);
      case CODEC_ID_VP09:
        return getVp9ProfileAndLevel(format.codecs, parts);
      case CODEC_ID_HEV1:
      case CODEC_ID_HVC1:
        return getHevcProfileAndLevel(format.codecs, parts, format.colorInfo);
      case CODEC_ID_AV01:
        return getAv1ProfileAndLevel(format.codecs, parts, format.colorInfo);
      case CODEC_ID_MP4A:
        return getAacCodecProfileAndLevel(format.codecs, parts);
      default:
        return null;
    }
  }

@Nullable
  private static Pair<Integer, Integer> getDolbyVisionProfileAndLevel(
      String codec, String[] parts) {
    if (parts.length < 3) {
      // The codec has fewer parts than required by the Dolby Vision codec string format.
      Log.w(TAG, "Ignoring malformed Dolby Vision codec string: " + codec);
      return null;
    }
    // The profile_space gets ignored.
    Matcher matcher = PROFILE_PATTERN.matcher(parts[1]);
    if (!matcher.matches()) {
      Log.w(TAG, "Ignoring malformed Dolby Vision codec string: " + codec);
      return null;
    }
    @Nullable String profileString = matcher.group(1);
    @Nullable Integer profile = dolbyVisionStringToProfile(profileString);
    if (profile == null) {
      Log.w(TAG, "Unknown Dolby Vision profile string: " + profileString);
      return null;
    }
    String levelString = parts[2];
    @Nullable Integer level = dolbyVisionStringToLevel(levelString);
    if (level == null) {
      Log.w(TAG, "Unknown Dolby Vision level string: " + levelString);
      return null;
    }
    return new Pair<>(profile, level);
  }

@sbenmeddour
Copy link
Author

Updated sample to latest android dev practices (UI is pretty similar to flutter)

By the way I find something

  • After selecting many subtitle tracks on android, they are all selected
    Have to call setProperty("subtitle.tracks", "-1) then setProperty("subtitle.tracks", $1)
  • If decodeToSurfaceView + AMediaCodec:async=1 -> Video freezes when selecting a track
Enregistrement.de.l.ecran.2025-01-31.a.11.26.42.mov

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants