Skip to content

Releases: wang-bin/mdk-sdk

Version 0.16.0

28 Aug 14:13
Compare
Choose a tag to compare
  • Blackmagic RAW playback support, decoder name is BRAW. Plugin is opensource
  • Seek callback will always report the correct result position
  • Improve seek
  • Fix D3D/MFT decoder + WGL on windows may displays green image
  • Supports DNG
  • More pixel formats, bayer, float rgb etc.
  • Fix audio crash on win7
  • Fix snapshot crash if render with transform, fix incorrect transform if point map is set
  • VideoFrame.to() will copy to host memory first if necessary
  • Fix decoded video timestamp maybe not monotonic

Version 0.15.0

01 Jul 02:25
Compare
Choose a tag to compare
  • Add new decoder "hap" to decode Hap1, Hap5, HapY and HapM videos into compressed gpu textures(BC1~4). Only desktop platforms are enabled. It's preferred over "FFmpeg" if Player.setDecoders() is not called by user. See https://github.com/wang-bin/mdk-sdk/wiki/Decoders#hap
  • Support gpu accelerated Hap rendering via decoder name "hap".
  • Support backward seek by frame. pos in seek(pos, SeekFlag::FromNow|SeekFlag::Frame) can be negative, -1 means go back 1 frame.
  • Add SeekFlag::InCache to support seeking in cached data to improve online video seeking. Target position must be in range (position(), position() + Player.buffered()].
  • VT Supports mpeg2video
  • VideoFrame.save() can save original data. Also select closest format if save as an image.
  • Improve rendering RGB with X/0(unused alpha channel) formats
  • Fix position() is not correctly when seeking by frame.
  • Fix playback may stop unexpected, and seeking is slow if seek near EOF
  • Fix wrong playback speed if resume from paused state on apple platforms
  • Fix empty png snapshot
  • Fix snapshot error on OpenGL ES2
  • Fix A-B loop may block if too many players
  • Fix wrong Player.position() and audio timestamp if playbackRate() != 1
  • Fix prepare() callback not called or called many times
  • Fix shader compiling affected by locale and may crash, e.g. LC_ALL == de_CH
  • FFmpeg:
    • Improve avdevice playback
    • Supports ffmpeg 5.1+

Version 0.14.2

30 Apr 10:22
Compare
Choose a tag to compare
  • CUDA decoder:
    • support av1 8 and 10 bit
    • support gray format (mjpeg)
    • fix context error, which results in jpeg decode error
  • VT decoder:
    • support deinterlace and enabled by default
    • add "threads" property for software decoding
    • support 16bit yuv with alpha, e.g. ProRes with alpha
    • disable h264 422 10bit for macOS < 11.0. decoded image is corrupt(macOS bug?)
    • fix color info from decoder
  • Support dav1d 1.0
  • Improve playing live recording ts file near EOF
  • Fix record before running state
  • Fix recorded video may be malformed when using hardware decoders
  • Fix loop at end does not work if "continue_at_end" property is set

Version 0.14.1

18 Mar 15:00
Compare
Choose a tag to compare
  • Fix android undefined __emutls_get_address
  • Improve accurate seek and seek callback
  • D3D11: fix rendering MFT output w/o hw decoding
  • D3D11: Wait for fence in gpu
  • Support rendering float 16/32 textures
  • Fix packed yuv may not be correctly rendered
  • Fix mediaInfo() crash
  • Support exr image
  • VT: support more codecs, including ProRes Raw

Version 0.14.0

01 Feb 09:02
Compare
Choose a tag to compare
  • API:
    • Add Player.setPointMap()
  • Fix Player::foreignGLContextDestroyed() does nothing. Useful to realease gl resources if player is destroyed before context
  • Release GL resources ASAP.
  • Fix realtime streams frame drop
  • Fix rtp decode error
  • Fix a crash if recreate opengl context frequently
  • Fix macCatalyst build, fix macOS < 11
  • Fix ffmpeg av1 can not fallback to dav1d
  • Fix metal snapshot and resize renders a green frame
  • Fix seeking may output a frame with wrong timestamp

Version 0.13.0

26 Dec 16:06
Compare
Choose a tag to compare
  • API:
    • Add Player.setFrameRate(). Default is 25fps if no timestamp in stream.
  • MFT:
    • Fix crash on some new drivers
    • Add "activate" property to select mft plugin
    • Add "threads" property for software decoding
  • VT:
    • Support more 420, 422 16 bit semi-planar formats, use the closest format
    • Support HEVC with alpha
    • Support HEVC gray formats
  • AMediaCodec:
    • Support decoding dolby vision profile 5
  • Enable YUV with alpha for all renderers
  • Support semi-planar yuv with alpha: NV12A, P416A, 16bit gray format L016
  • GL, D3D11, Metal timestamp query
  • Fix fail to render hw frame mapped to host for all renderers
  • Fix wrong OpenGL blend state
  • Fix D3D11 renderer crash on device change
  • Use vulkan loader set by env var QT_VULKAN_LIB or VULKAN_LIB
  • Fix CUDA decoder crash
  • Fix subtitle endless decode loop at EOF
  • Compat with latest FFmpeg 5.0 abi

Version 0.12.0

28 Jun 06:18
Compare
Choose a tag to compare
  • API:
    • Add Player.setVolume(float value, int channel) to control channel volume
    • Deprecate setState(State), use set(State)
    • Add GetGlobalOption()
  • Fix uyvy422, yuvy422 rendering
  • Fix MediaInfo.start_time if < 0
  • Fix crash in decoder name is not supported
  • Fix a track may endless wait for loop end
  • Fix muti-tracks stream can not loop
  • Fix slow down near EOF in loop mode at high playback rate
  • Fix VAAPI not work in wayland
  • VT decoder:
    • Fix decoder stops when bad data error occurs
    • Fix frames are out of order from the 2nd loop
  • D3D11 prefers fence for synchronization.
  • FFmpeg: support 4.x and 5.x abi, prefer 5.x

version 0.11.1

17 May 02:39
Compare
Choose a tag to compare
  • Deprecate Player.setState(State), use Player.set(State)
  • Add VideoFrame.save() to encode and save as a file
  • Buffer range for realtime streams(rtsp, rtp etc.) is unlimited by default
  • Unify pixel format channel map algorithm. Fix incorrect color for some formats(e.g. nv21)
  • Ignore incorrect hdr metadata
  • Allow renderVideo() in RenderCallback
  • VT decoder:
    • Support jpeg, more prores profiles
    • Support h264, hevc GBRP 8bit input pixel format
  • MFT:
    • Fix h264 profile check
    • Add property "blacklist", default is "mpeg4", mpeg4 is not well supported so disabled for now
  • FFmpeg:
    • continue to decode by default if error ocurrs. can stop decoding by setting property "error=0"
    • Use 4.4 instead of master because of abi break
  • Auto reset log handler to fix potential crash when exiting
  • Fix seek on pause may never be executed forever without resume playback
  • Fix endless wait if seek near EOF in loop mode
  • Fix license check, appid is utf8. License generator and validator is opensource now as appke
  • Fix crash if snapshot failed

version 0.11.0

01 Apr 05:13
Compare
Choose a tag to compare
  • API changes:
    • Add setActiveTracks()
    • Deprecate javaVM(JavaVM*), use SetGlobalOption("jvm", void*) instead. See Wiki
    • Deprecate setLogLevel(LogLevel), use SetGlobalOption("logLevel", name or LogLevel or int value) instead. See Wiki](https://github.com/wang-bin/mdk-sdk/wiki/Global-Options)
    • Deprecate Player.setVideoDecoders(...) and Player.setAudioDecoders(...), use Player.setDecoders(MediaType, ...) instead
    • Add VideoFrame.isValid()
  • Add "dav1d" decoder. Default load libdav1d.5.dylib, libdav1d.so(android), libdav1d.so.5(linux), libdav1d.dll(windows), or set library name via environment var "DAV1D_LIB"
  • Support frame step forward via seek(1, SeekFlag::FromNow|SeekFlag::Frame), also support N frame forward
  • seek() supports seeking to the last frame or the last key frame(has SeekFlag::KeyFrame) if target position > duration
  • Improve video decoder switch
  • setLogHandler(nullptr) once to log to std::clog, set again to disable log completely
  • Fix potential endless wait if stop playback in loop mode
  • Fix the first frame after seek is not the latest frame
  • Fix music cover image not rendered if prepare from pos > 0
  • Fix wrong position() and prepared callback invoked multiple times if play with an audio track file
  • Fix the first frame rendered after seek is not the lastest frame
  • FFmpeg:
    • Support avdevice via "avdevice://format:filename"
    • Support avformat options via url query, starts with "mdkopt=avformat", e.g. "some_url?mdkopt=avformat&fflags=nobuffer"

Release Version 0.10.4

17 Feb 06:32
Compare
Choose a tag to compare
  • Support macCatalyst
  • Support vulkan on apple silicon
  • VT decoder:
    • Support VP9 on macOS 11+. Profile 0 and 2 are confirmed
    • Support more(all) semi-planar formats, output a format with the same chroma subsample size as original format, e.g. 'p410' for hevc yuv444p10le.
    • Fix high depth channel formats output error on apple silicon. It's r10g10a10a2 for 10bit Y plane, but not support yet in renderer, so use p010('x420')
    • Add "hardware" property to enable/disable hardware acceleration
    • Add "width" and "height" property
    • Support HDR in mkv
    • Reduce compressed packet copy
  • VAAPI, VDPAU: fix not work since 0.10.2
  • MFT video decoder: fix h264 constrained baseline profile check
  • CUDA decoder: fix chroma format
  • FFmpeg:
    • Fix a crash if avio open error
    • Fix "drop" option does not work correctly
  • Improve decoder switch in paused state
  • Fix can't switch to a new decoder via setVideoDecoders() since 0.10.0
  • Fix a blank frame in gapless playback
  • Fix 2 crashes in player dtor, 1 race in setNextMedia(), 1 race/crash if faile to open a media
  • Examples:
    • Enable glfw for apple silicon