add bat 4 install LAVFilters and update requestments

parent f8dc8db5
LAV DirectShow Filters Changelog
===================================
0.77.2 - 2023/03/08
LAV Splitter
- NEW: Added identification for spatial/immersive audio extensions (Atmos, DTS:X)
- Changed: More reasonable rounding for odd aspect ratios, avoiding issues with some video pipelines
- Fixed: Improved compatibility with some FTP servers
LAV Audio
- Fixed: Restored the default channel layouts for 5.1 and 7.1 to the correct layout (accidentally changed in 0.77, causing some playback issues)
- Fixed: Some TrueHD files would not decode correctly
- Fixed: Clipping protection did not engage when using Integer output
0.77.1 - 2022/11/15
LAV Splitter
- Fixed: More MP4 keyframe information fixes
0.77.0 - 2022/11/10
LAV Splitter
- Fixed: Improved handling of multichannel PCM channel assignments
- Fixed: MP4 Keyframe information could be wrong
LAV Audio
- NEW: Support for audio with more then 8 channel, including automatic downmixing if required
0.76.1 - 2022/02/28
LAV Splitter
- Changed: When requesting a HTTP URL, the URL itself is send as a referrer to increase compatibility
- Fixed: The priority of "Default" subtitle tracks in MKV files was wrong when a forced track was present
LAV Video
- Changed: Improved color reporting for DVD menus/subtitles
- Fixed: D3D11 surface clearing did not work properly on Intel GPUs
0.76.0 - 2022/01/22
LAV Splitter
- NEW: Added an option to re-evaluate subtitle stream selection when the audio language changes
- NEW: Improved advanced subtitle selection syntax with negated flags (positive and negative flags can now be combined for more flexible selection)
- Changed: Improved variant/stream selection in DASH and HLS streams
- Changed: Video streams with the highest bitrate are preferred (if equal resolution)
LAV Video
- NEW: Support for passing DoVi metadata to video renderers
- NEW: BobWeaver (BWDIF) software deinterlacer (a blend of YADIF and Weston, focusing on their individual strengths)
- NEW: Support for FIC screen capture video
- Changed: D3D11 video surfaces are flushed to black before decoding, avoiding green artifacts
- Changed: D3D11 devices are created up to feature level 12.1
LAV Audio
- Fixed: TrueHD bitstreaming could result in A/V sync issues or drop-outs
- Removed: Support for the external DTS decoder (dtsdecoderdll.dll) has been removed
0.75.1 - 2021/06/21
LAV Splitter
- Changed: AV1 files with no extradata will now generate a format header with stream information for decoders to use
- Fixed: Improved stream selection when multiple "default" video tracks are present
LAV Video
- Changed: Updated dav1d for significant improvements in AV1 10-bit decoding performance
- Changed: AV1 hardware decoding will more reliably engage when provided with additional stream information from the demuxer
LAV Audio
- Fixed: Opus decoding had audible artifacts in some files in 0.75
0.75.0 - 2021/03/30
LAV Splitter
- NEW: Support for DASH streaming
- NEW: WebVTT support in Matroska/WebM
- Changed: Improved Font support from Matroska files
- Fixed: Large queue size limits could result in the wrong limit being applied
- Fixed: Resolved a memory leak in Matroska demuxing
- Fixed: Avoid selecting a stream with only a single video frame in MP4 files, which is often a cover art
- Fixed: Seeking in Matroska files with only audio cue points did not function
- Fixed: Seeking to the beginning of certain HLS streams did not work properly
- Fixed: Duration information in Matroska files is more reliable
LAV Video
- NEW: AV1 DXVA2/D3D11 hardware decoding support
- NEW: ProRes 4444 XQ support
- Faster: Updated dav1d decoder and improved thread configuration for significantly improved AV1 decoding speed
- Fixed: Added a workaround for VP9 hardware decoding on AMD video cards
- Fixed: H.264 streams exceeding the Level 5.1 DPB limit will no longer be hardware decoded
- Fixed: Improved handling of missing reference frames in H.264 streams with hardware decoding
- Fixed: HEVC streams encoding 8-bit video in a Main10 profile can be properly hardware decoded
- Deprecated: NVIDIA CUVID and Intel QuickSync have been deprecated for future removal/replacement
LAV Audio
- Fixed: Resolved an issue with glitching TrueHD bitstreaming on seamless-branching titles
- Fixed: Resolved a compatibility issue with some playback applications
- Deprecated: Support for the binary DTS decoder (dtsdecoderdll.dll) has been deprecated for future removal
0.74.1 - 2019/03/19
LAV Video
- Fixed: VP9 video could produce wrong timestamps, resulting in a black screen or other playback disruptions
- Fixed: Decoding VP9 from a non-keyframe (ie. after a seek, or badly cut file) would not always recover properly once a keyframe was encountered
0.74.0 - 2019/03/16
LAV Splitter
- Changed: Using GnuTLS for HTTPS and other TLS protocols, improving performance and compatibility with a lot of web streaming services (ie. YouTube Live Streams through youtube-dl, and more)
- Fixed: Keyframes in MP4 files were being reported with a slightly offset timestamp, resulting in slow keyframe seeking
- Fixed: Subtitles that stretch over chapter boundaries could be lost in Ordered Chapter MKV files
- Fixed: Fonts embedded in MKVs without a proper mimetype were not being imported (now it checks the file extensions for .ttf/.otf as well)
LAV Video
- NEW: Initial support for parsing HDR10+ (SMPTE ST 2094-40) metadata, and passing it to the video renderer
- NEW: Using the dav1d AV1 decoder for significantly improved AV1 decoding performance
- Changed: Re-enabled experimental hardware acceleration for H.264 MVC 3D decoding on Intel GPUs, disabled by default
- Changed: Updated Intel MediaSDK dispatchers to the latest Media SDK, fixing compatibility with newer runtimes in the Intel DCH drivers
- Changed: Improved support for additional UtVideo subtypes
LAV Audio
- Changed: Added an option to disable the PCM fallback when bitstreaming is requested
- Fixed: Further improvements to TrueHD Bitstreaming, resolving glitching on more new titles (particularly seamless branching titles)
- Fixed: Automatic fallback from bitstreaming to PCM could crash in some situations
0.73.1 - 2018/10/11
LAV Video
- Fixed: Container-provided color information will only overwrite video bitstream color information if its set and valid
LAV Audio
- Fixed: Certain multi-channel AAC streams did not decode in 0.73
0.73.0 - 2018/10/05
LAV Splitter
- Changed: Export the description of cover art and attachments for use by players
- Fixed: Properly marked the packet allocator as providing read-only packets, to avoid crashes with in-place transform filters
LAV Video
- NEW: Support for AV1 decoding using libaom
- Changed: Enabled VP9 hardware acceleration by default
- Fixed: The aspect ratio of certain WMV/VC-1 files was not being properly respected in the WMV9 MFT decoder
0.72.0 - 2018/06/19
LAV Video
- Changed: Enabled CineformHD decoding by default, since the decoder has much improved
- Fixed: Decoding Matroska files with Linked Segments which used old x264 4:4:4 encodes could result in corruption
LAV Audio
- NEW: Blu-ray Dolby Digital Plus 7.1 decoding and bitstreaming support
- NEW: LAV Audio will fallback to audio decoding if bitstreaming is not supported by the audio renderer/hardware
- Fixed: DTS-HD HRA bitstreaming did not work properly with many A/V receivers
- Fixed: TrueHD bitstreaming could result in drop-outs on high bitrate TrueHD+Atmos streams
0.71.0 - 2018/02/15
General
- LAV Filters now requires Windows Vista or newer, Windows XP is no longer supported
LAV Splitter
- NEW: Preliminary support for UHD Blu-ray parsing
LAV Video
- NEW: D3D11 hardware accelerated decoding (native mode with madVR, Copy-Back otherwise)
- Fixed: HDR metadata was not properly communicated to madVR in DXVA2-Native mode
- Fixed: Anamorphic WMV9/VC-1 videos were not being played back with the correct aspect ratio in all cases
- Fixed: Changing certain settings while playback was paused could result in a deadlock
- Fixed: Playing severely corrupted HEVC streams with hardware decoding could result in playback failing entirely, instead of skipping over the corruption
LAV Audio
- NEW: Basic support for AAC 960 streams (common in DVB radio streams)
0.70.2 - 2017/07/06
LAV Video
- Fixed: DXVA2 decoding could fail in 0.70 after a dynamic media type change
0.70.1 - 2017/07/01
LAV Video
- NEW: DXVA2-CopyBack uses D3D9Ex to allow headless operation
- Changed: Increased the maximum number of decode threads to 32
- Changed: Rebalanced the "Auto" thread strategy to use the exact number of available CPU cores, instead of 1.5x the cores
- Fixed: Certain H264 streams could crash in 0.70 due to lack of buffer padding
0.70.0 - 2017/06/15
General
- Official LAV Filters builds require a SSE2 capable CPU
LAV Splitter
- Fixed: Certain MP4/MOV files didn't play or seek correctly in recent versions of LAV Splitter
- Fixed: HEVC in MP4 without PTS timestamp is being signaled appropriately
- Fixed: Closing RTSP streams did not properly call the TEARDOWN function
LAV Video
- NEW: CUVID support for VP9 8/10-bit and HEVC 10/12-bit decoding
- NEW: DXVA2 support for VP9 10-bit decoding
- Changed: Simplified the internal dataflow to reduce overhead and improve performance
- Changed: Enabled P010 output to EVR on Windows 10 Creators Update
- Fixed: Y416 output was incorrect (required by madVR 0.91.8 and newer)
- Fixed: Parsing H.264 MVC SEI NALs could fail in some cases
- Fixed: CUVID decoding could deinterlace progressive streams under certain circumstances, degrading the quality
LAV Audio
- Fixed: LATM AAC streams with Program Config Elements (PCE) (common in DVB-T2 broadcast) played with audible distortions
- Fixed: Very short PCM audio streams didn't play properly
0.69.0 - 2016/12/11
LAV Splitter
- NEW: Support for extracting HDR metadata from YouTube HDR VP9 streams
- Fixed: Reading MKV files could crash when encountering tags for unknown or disabled streams
LAV Video
- NEW: Support for 10-bit UtVideo
- NEW: MagicYUV decoding support
- NEW: Experimental support for CineformHD decoding
- Fixed: Converting 12-bit 4:4:4 YCbCr to RGB32 would result in a garbled image
- Fixed: Decoding certain H.264 streams could drop a few frames at the start of playback
LAV Audio
- NEW: DTS Express (LBR) decoding support
0.68.1 - 2016/05/05
LAV Splitter
- NEW: Support for reading metadata tags from MKV files (including the "3d-plane" MVC 3D tag from MakeMKV 1.9.10 and newer)
- Fixed: Improved handling of QuickTime codecs in MKV files
- Fixed: S302M audio streams with non-pcm content did not work anymore (requires an external decoder)
LAV Video
- Changed: Flags for BT.2020 are exported in DXVA2_ExtendedFormat (previously only reported to madVR, since the Windows SDK did not specify them)
- Changed: Prevent connections to the "AVI Decompressor" filter which could result in a broken image or crashes otherwise
- Fixed: Some progressive files could report the wrong FPS when software deinterlacing was turned on
- Fixed: MPEG-2 streams using "intra refresh" did not decode properly
LAV Audio
- Fixed: Decoding MPEG Audio streams from the Microsoft MPEG-1 Splitter could result in playback starting with an audible glitch
0.68.0 - 2016/03/08
LAV Splitter
- NEW: H.264 MVC 3D demuxing from MKV 3D, Blu-ray discs and Blu-ray SSIF files
- Fixed: The bitdepth of DTS-HD MA streams is reported properly in the stream information
LAV Video
- NEW: H.264 MVC 3D decoding (requires madVR 0.90 or newer)
- NEW: HEVC HDR streams export the HDR metadata to the video renderer (requires madVR 0.89.18 or newer)
- NEW: VP9 DXVA2 Hardware Acceleration
- NEW: Weston Three Field Deinterlacing filter (w3fdif)
- NEW: Ability to choose which GPU is used for DXVA2-CopyBack decoding
- Changed: Removed the CUVID HQ processing option, it is now automatically used when appropriate
- Fixed: CUVID would crash when playing certain HEVC files
- Fixed: Some pixel format conversions were much slower than expected
- Fixed: Pixel Format changes mid-stream were not re-negotiated with the renderer in all cases
- Fixed: Changes in the framerate due to software deinterlacing are properly reflected in the media type
LAV Audio
- Fixed: Increased PCM buffering to avoid stuttering with TrueHD on some audio devices
0.67.0 - 2015/11/15
LAV Splitter
- NEW: Support for HTTPS URLs
- NEW: Automatic selection of the highest quality variant in HLS streams
- Changed: Reverted back to the old ASF demuxer
- Changed: Backported ASF seeking improvements to the old ASF demuxer
- Fixed: ASS in AVI did not work in recent versions
- Fixed: RTP/RTSP did not work properly in 0.66
LAV Video
- NEW: Improved DVD subtitle and menu drawing with madVR (support for madVRs subtitle repositioning and lower latency)
- Changed: HEVC and 4K HWAccel is enabled by default
- Changed: Enabled DXVA2-CB Direct Mode with YV12 output on 8-bit sources
- Fixed: DVD menus could show a black screen instead of the menu in some situations
LAV Audio
- Fixed: Improved clipping behavior in badly mastered DTS-HD tracks
0.66.0 - 2015/09/22
LAV Splitter
- NEW: Added options to increase the queue size for increased buffering
- Changed: Switched ASF/WMV demuxing to a new demuxer from Libav
- Fixed: Improved seeking with MPEG-TS files which contain teletext streams
LAV Video
- NEW: Support for DXVA2-Native decoding of HEVC 10-bit with EVR on supported GPUs
- Changed: 4K Video Decoding on AMD graphics card is now enabled (needs recent drivers to work properly)
- Changed: DXVA2-CB decoding uses less memory on NVIDIA graphics cards
- Fixed: H264 DXVA2 decoding failed when no SPS/PPS was available in the media type
- Fixed: Conversion of RGB48 to RGB32/24 did not properly use dithering
- Fixed: Improved handling of a few DVD menu quirks
- Fixed: Decoding 10-bit video with EVR could result in a black screen
LAV Audio
- Changed: 5.1 audio favors the "Side" 5.1 layout, which conforms to modern surround standards
0.65.0 - 2015/04/21
LAV Splitter
- NEW: Support for MKV subtitle Cues to show subtitles immediately after a seek
- NEW: Attachments and embedded cover art images are exported through the IDSMResourceBag interface
- Fixed: Improved demuxing of HEVC in MPEG-TS and increased the reliability of the SPS/PPS/VPS extraction
- Fixed: Demuxing Blu-rays/MPEG-TS where the first stream was not a video stream could result in broken timestamps
- Fixed: Seeking in MKVs which are currently being written is more reliable
LAV Video
- Fixed: Improved HEVC DXVA2 decoding on a few samples
- Fixed: Playback of VFR MPEG-4 in AVI had wrong timestamps in 0.64
- Fixed: Improved handling of DVD subtitles without timestamps
LAV Audio:
- NEW: Native DTS-HD decoding using libdcadec
- Changed: 5.1 audio prefers the speaker mask with side channels, to match recent specifications
0.64.0 - 2015/02/13
General
- NEW: Individual LAV Filters can now be blacklisted through the registry by creating a key with the executable name in HKCU\Software\LAV\<Filter>\Blacklist
LAV Splitter
- NEW: Support for RTMP using rtmpdump-style parameter syntax
- NEW: Support for Opus-in-TS
- Fixed: The language reported for audio/subtitle streams on some Blu-rays could be wrong
LAV Video
- NEW: HEVC Main10 decoding in DXVA2 Copy-Back mode
- Faster: DXVA2 Copy-Back in direct output mode uses up to 50% less CPU and performance is improved accordingly
- Fixed: H.264 streams with only DTS timestamps would play out of sync with DXVA2
- Fixed: DXVA2 could crash on some MPEG-2 streams
- Fixed: Improved compatibility with a few HEVC streams when using DXVA2
0.63.0 - 2014/10/03
LAV Splitter
- NEW: Support for playing AES encrypted HLS streams
- NEW: Advanced Subtitle selection allows selecting subtitles by a string match on the stream title
- NEW: Support for rtspu, rtspm, rtspt and rtsph URLs to force the RTSP transport protocol
- NEW: Animated GIF image support
- Fixed: Improved timestamp handling of badly muxed/corrupted H.264 streams
- Fixed: 4K ProRes streams in MKV didn't play reliably
- Fixed: Some HEVC streams in MKV/MP4 didn't play properly
- Fixed: VobSubs in MP4 didn't properly export their color palette
- Fixed: Streaming MP3s through the Microsoft URL filter could result in the last audio frame to be partially repeated
- Fixed: The duration of MP3 files would be wrong if it contained long IDv3 tags
- Fixed: TrueHD streams with an Dolby Atmos sub-stream were not demuxed properly
LAV Video
- NEW: Experimental support for CUVID and DXVA2 HEVC acceleration
- Faster: HEVC decoding is up to 100% faster
- Fixed: DVD subtitle rendering could crash in 64-bit builds
LAV Audio
- Fixed: TrueHD streams with an Dolby Atmos sub-stream did not decode
0.62.0 - 2014/06/12
LAV Splitter
- Fixed: The filtered Forced Subtitles stream did not properly send all related subtitle data in some cases
LAV Video
- NEW: Implemented a WMV9 MFT decoder to replace the old DMO decoder for VC-1/WMV3 on Windows 7 and above
- NEW: Support for VP7 video
- Fixed: Multi-threaded video decoding could result in a handle leak on some systems
- Fixed: Video processing was slow on Windows XP due to inefficient memcpy use
- Fixed: DVD subtitles could overlap on some discs
LAV Audio
- Fixed: Dynamic format switching to an audio stream with a different sample rate did not work in some cases
0.61.2 - 2014/04/08
General
- Installer: The installer does now backup DirectShow registry settings before overwriting them, allowing uninstall to restore them
LAV Splitter
- NEW: Support for ProRes in MKV
- Fixed: Opening AviSynth scripts with LAV Splitter which used DirectShowSource to load LAV Splitter again caused a deadlock
- Fixed: Audio-only AviSynth scripts did not show a duration.
- Fixed: Cue Sheets with directives with empty parameters could cause a crash
LAV Video
- Fixed: AVC1 video streams without SPS/PPS in the configuration record did not decode properly
- Fixed: Decoding H.264 streams with a resolution change using the DXVA2 Copy-Back decoder could crash
- Fixed: YUV->RGB conversion produced the wrong output for the last line of odd-height 4:2:2 or 4:4:4 files
LAV Audio
- Changed: LAV Audio offers more alternate output configurations to the audio renderer if the audio renderer refuses our preferred format.
- Fixed: Decoding AC3 audio with corrupted audio frames could cause unnecessary format changes to occur and disrupt playback
- Fixed: Decoding DTS audio on a CPU without SSE2 support could crash on some streams
0.61.1 - 2014/03/07
LAV Splitter
- NEW: Support for opening "icyx://" stream URLs
- Fixed: Opening of some Blu-ray discs would take several minutes and could hang the player.
LAV Video
- Fixed: Aggressive Deinterlacing is no longer applied to soft-telecined content, which caused severe playback issues.
0.61.0 - 2014/03/04
LAV Splitter
- NEW: Support for "demuxing" AviSynth scripts (requires AviSynth, 2.6 recommended)
- NEW: Support for reading ICY stream metadata from ShoutCast streams
- Fixed: The duration of DVB MPEG-TS files is being detected more reliably
- Fixed: The ITrackInfo interface was not available in the last few versions
- Fixed: The duration of certain Ogg Vorbis streams was wrong
- Changed: DTS-HD audio tracks are now exposed using the official DTS-HD media type, in addition to the old DTS type
- Workaround: Block WMP/WMC from always overwriting the initial track selection
LAV Video
- NEW: Support for Duck TrueMotion 1/2
- NEW: Support for BT.2020 in YCbCr -> RGB conversions
- Fixed: Format conversion could cause out of memory errors when converting high-resolution videos
- Fixed: The decoder could crash if DXVA2 decoding failed and the software decoder is unavailable
- Fixed: Reduced binary bloat caused by the YCbCr -> RGB converter, reducing binary size to nearly half
- Fixed: Playback of RV30/RV40 was not smooth in 0.60
- Fixed: Video corruption when using DXVA2 on Intel GPUs when decoding certain VC-1 or MPEG-2 clips
- Fixed: Decoding WMV3 Complex profile automatically falls back to software, since hardware decoding is unsupported.
- Faster: DXVA2 Copy-Back decoding on Intel GPUs is significantly faster
- Changed: If the wmv9dmo decoder is unavailable, the FFmpeg decoder is automatically used instead
- Changed: Updated QuickSync decoder to the latest version, fixes a few timestamp issues.
- Changed: Relaxed the resolution checks for H.264 decoding on AMD GPUs, allowing files with 2K resolutions to be decoded (ie. 2048x1280, etc.)
LAV Audio
- NEW: Support for ATRAC3+
- Fixed: Decoding AC3 audio could produce glitches in playback due to too aggressive error checking.
0.60.1 - 2014/01/14
LAV Splitter
- Fixed a crash when opening MPEG-2 files with Stereo3D Metadata
- Improved the format of the chapter names created from embedded cue sheets
- Fixed an incompatibility in the IPropertyBag metadata interface with a few players
0.60.0 - 2014/01/12
LAV Splitter
- Improved playback of a few Blu-ray discs, avoids a hiccup at clip change
- Support for reading embedded Cue Sheets from audio files as chapters
- Added support for reporting the stream bitrate through IBitrateInfo (for MPC-HC et al.)
- Additional metadata from the source file is exported through IPropertyBag (including "ROTATION" for video orientation information)
- Fixed demuxing of MKV files with huge SSA/ASS format blocks (> 1MB)
- Fixed playback of certain MPEG4 ASP streams in MKV to be smooth
LAV Video
- Added support for VC-1/WMV3 DXVA2 decoding on recent Intel GPUs (Ivy Bridge/Haswell, needs recent drivers)
- Fixed a crash when stopping playback or seeking on AMD when using DXVA2 Native
- Fixed playback of WMVA videos in software mode
- Fixed a few issues with output of odd-height videos when converting to various pixel formats
- Fixed a few corner cases when reporting the video range to madVR
- Fixed a crash when playing raw video files with unaligned width (non mod16)
LAV Audio
- The version of the DTS DLL decoder is now checked, and versions before 1.1.0.0 are blocked (since they do not work)
- Fixed an issue with DTS parsing which could result in occasional audio stutter
- Improved support for Opus audio pre-skip
0.59.1 - 2013/11/04
LAV Splitter
- Fixed a regression when demuxing AAC audio from MP4/MOV files
0.59.0 - 2013/11/03
LAV Splitter
- Support for demuxing H.265/HEVC and VP9
- Improvements for H.264 in AVI or as raw video streams
- Improved stream detection in files which start with a few seconds audio before the video
- Improved timestamp handling when demuxing seamless branching Blu-rays, fixes a few hicups/freezes mid-stream
LAV Video
- Support for decoding H.265/HEVC and VP9
- Accept H.264 from the MainConcept demuxer
- Added support for DV Video from Canopus cameras
LAV Audio
- Fixed playback issues on a few DTS and DTS-HD tracks
0.58.2 - 2013/07/26
LAV Splitter
- Fixed demuxing of WavPack from MKV
LAV Video
- Fixed a crash when YADIF was being used on a single- or dual-core CPU
LAV Audio
- Fixed decoding of DTS streams with a frame size change mid-stream
0.58.1 - 2013/07/09
LAV Splitter
- Improved UDP network streaming
- Added a new option to configure the stream analysis duration of network streams
- Reduced subtitle delay on certain Blu-ray titles
- Improved detection of DTS-in-WAV
- Improved I/O behaviour for sequential reading from optical media
LAV Video
- Fixed dynamic reconnection on parameter changes (Aspect Ratio, etc) with VMR-9
- Support for Apple Intermediate Codec (ICOD)
- dxva2: added a check for AMD UVD/UVD+ GPUs to ensure the H.264 Level 4.1 DPB restrictions are met
LAV Audio
- Fixed a regression decoding certain Ogg Vorbis streams
0.58.0 - 2013/06/23
General
- LAV Filters now includes a manifest file to control DLL loading
- Fixed the shortcuts to the configuration dialogs created by the installer in the start menu
LAV Splitter
- Handle the "Default" flag in MKV files with multiple video streams
- Fixed a regression in VC-1 demuxing which caused some streams to fail decoding with the WMV9 DMO decoder
- Improved transition between ordered chapters in certain (badly formed) MKV files
- Improved handling of AVC1 in AVI files
- Improved accuracy of IAMStreamSelect::get_CurrentMarker
- Several potential crash fixes and stability improvements
LAV Video
- YADIF deinterlacing is now multi-threaded, significant performance improvement on multi-core CPUs
- Improved detection of progressive streams to ensure deinterlacing is disabled, especially when "Aggressive Deinterlacing" is used
- Restored Fraps constant frame rate output by proper handling of repeated frames
- Support for the new UtVideo sub-types, and fixed a regression in UtVideo decoding
- cuvid: fix double-rate deinterlacing on certain streams without timing information
- Updated the Intel QuickSync Decoder to 0.44
0.57.0 - 2013/05/20
LAV Splitter
- Added a Popup Menu to the Tray Icon which allows Stream, Edition and Chapter switching
- Improved stream selection in files with multiple video streams
- Improved performance when opening MKVs with linked segments
- Fixed playback of MKVs with Segment Linking and Vorbis Audio
LAV Video
- Enabled Hardware/GPU Deinterlacing when using the QuickSync decoder
- Support for JPEG2000 DCinema streams
- Support for RGB48 output, and high-quality dithering of RGB48 to RGB32
- Fixed a crash with DXVA2 Native on AMD GPUs in certain situations
- Improved detection of H.264 RGB streams, improves support with EVR
- Adjusted performance tuning for consistent performance in both playback and transcoding (in 0.56, transcoding could be slow)
LAV Audio
- Use the FLAC channel mask from metadata, fixes playback of FLAC files with non-standard channel layouts
0.56.2 - 2013/04/19
LAV Splitter
- Emit the EC_LENGTH_CHANGED event when the edition is changed, to help players update their playback duration
LAV Video
- dxva2: fixed corruption/dropped frames after seeking in interlaced MPEG-2/VC-1 streams
- dxva2: fixed corruption after seeking in interlaced H.264 on AMD GPUs
- dxva2: fixed decoding of H.264 on AMD UVD/UVD+ GPUs (HD 2xxx/3xxx Series)
- dxva2: disabled wmv3 decoding on AMD UVD/UVD+ GPUs (until it can be fixed)
- Fixed colorspace used for YUV Fraps to always be BT.709
- Added support for MPEG-4 Video with the BLZ0 FourCC (used in older Blizzard games)
0.56.1 - 2013/04/13
LAV Splitter
- Fixed various crashes with ordered chapter MKVs
- Fixed a crash when playing an MKV with a disabled subtitle track
- Fixed switching between video streams with different codecs (ie. H264 -> MPEG2)
LAV Video
- Fixed a crash on close with DXVA2 Native
- Re-tuned YADIF for smooth playback instead of benchmarking
0.56.0 - 2013/04/10
General
- Major ffmpeg update, the DLLs have had their version number increased
LAV Splitter
- Support for Matroska Ordered Chaptes / Segment Linking
- Improved support for parsing language tags from OGM files
- Small performance improvements by avoiding copying the stream data in memory needlessly
- Improved duration calculation for MP3 files
LAV Video
- Performance improvements for single-threaded decoders and YADIF (up to 20% in some situations)
0.55.3 - 2013/02/10
LAV Splitter
- Improved handling of Annex B H.264 in many containers
- Improved support for external source filters without seeking ability (live sources)
- Fixed duration in some MP4/MOV files
- Fixed stream program assignment for some MPEG-TS files (resulted in some streams not visible)
LAV Video
- Added support for TSCC2
- Fixed a crash when playing certain H.264 files with QuickSync or CUVID
0.55.2 - 2013/01/25
LAV Splitter
- Improved support for MP4-style H.264 in AVI
- Further improvements for AAC in MPEG-TS
- Small improvements to handling Blu-rays with odd stream configurations
- Improved handling of Ogg Vorbis streams
LAV Video
- Basic support for playing DVDs in different playback rates
- Fixed DXVA2 resource cleanup which may have caused a crash in some situations with DXVA2-Native
- Fixed A/V Sync when using the WMV9 DMO decoder (especially noticeable after seeking)
LAV Audio
- Improved AC3 decoding quality (thanks to madshi for the patch in ffmpeg)
0.55.1 - 2013/01/11
General
- Clicking the Tray Icon with a Property Page already active brings it back to the front
LAV Splitter
- Added an option to disable quality-based audio stream selection (selects the first stream matching the language preferences)
- Removed Bitrate from audio quality criteria, because its too unreliable at this point.
LAV Video
- Fixed YADIF deinterlacing (broken after a ffmpeg update on 0.55)
LAV Audio
- Switched to Triangular Dithering for 16-bit Integer conversions
0.55.0 - 2013/01/09
General
- All Filters now have an optional tray icon which can open the property sheet when clicked (disabled by default)
LAV Splitter
- Improved FPS detection for interlaced H.264 streams in Matroska
- Fixed H.264 in Ogg and PMP
- Fixed seeking in RMVB files with AAC audio
- Improved support for AAC in MPEG-TS (especially in ISDB-T)
- Fixed Key-Frame seeking for AVI and added support for MP4
LAV Video
- Improved handling of raw RGB video with LAV Splitter (Video was upside-down in some cases)
- Improved support for the Overlay Mixer renderer
- Fixed decoding of non-mod16 video with CUVID
- Fixed DXVA2 decoding of H.264 MBAFF content with >= 16px cropping
- Support for fade in/out animations in DVD subtitles
- Fixed DVD menu overlays showing too early on some discs
- Fixed forced DVD subtitles being stuck on the screen until the next subtitle line
- Improved playback of MPEG-1 in MKV with Haali Splitter
LAV Audio
- Fixed 6.1 to 7.1 upmixing when the standard channel layout option is turned off
- Dithering when converting audio to 16-bit Integer
- Fallback to DTS "Core" bitstreaming if DTS-HD fails
0.54.1 - 2012/11/27
LAV Splitter
- Improved seeking in MP4 files created by Windows Live Movie Maker
LAV Video
- Improved H.264 DXVA on recent Intel GPUs (Sandy/Ivy Bridge and newer Atoms)
- Fixed corruption with high number of reference frames ( > 11 )
- Fixed corruption in MBAFF interlaced content
- Fixed an issue that caused DVD menus/subtitles to stop working in DXVA2 Native mode in some situations
0.54.0 - 2012/11/24
LAV Splitter
- Subtitle selection in "Default" mode now properly takes the "Default Track" flag into account
- Fixed an issue that could cause graph flush events to be send out of sync
LAV Video
- The DXVA2 Native decoder can now properly detect hardware support for video resolutions
- Allows 4K DXVA2 decoding on NVIDIA
- New options to control which resolutions are being handled by the hardware decoder (SD, HD and 4K/UHD)
- Added support for DVD menu overlays and DVD subtitles with DXVA2 Native
- Improved DXVA2 Native support with madVR
- Fixed a freeze when playing corrupted H.264 streams in DXVA2 Native
- Fixed a few rare DVD menu issues when using the QuickSync decoder
0.53.2 - 2012/11/11
LAV Video
- Fixed DVD menu still frames with DXVA2 Copy Back
- Fixed Live TV playback with QuickSync
0.53.1 - 2012/11/10
LAV Video
- Fixed initial media type when YADIF is active
- Fixed an image corruption issue with DVD playback
- Improved handling of DVD menus on some discs
- Reduced decode latency with CUVID/DXVA2-CB on DVDs for smoother playback in some situations
- Added an option to toggle HW decoding for DVDs
0.53.0 - 2012/11/05
LAV Splitter
- Added support for reading image files (tiff, png, jpeg, tga, bmp)
- Support for MPEG-4 ASP in MPEG-TS
- Support for reading metadata using the IAMMediaContent interface
- Fixed Aspect Ratio on some wmv/asf files
LAV Video
- Fixed a crash in the WMV9 DMO decoder on Windows 8
- DVD improvements
- Subtitles are properly cleared from the screen, and won't be shown forever on some discs
- Improved subtitle/menu positioning on some PAL discs
- Improved handling of still frame DVD menus
- Fixed a deadlock that caused the player to freeze in some DVD menus
- Improved quality of blending subtitles/menus
- QuickSync improvements
- Support using QuickSync in Fullscreen Exclusive mode (ie. in WMC)
- Improved fallback to software decoding if QuickSync is not available
- Support for DVD decoding
- Added support for Avid DV
- Properly indicate progressive video when YADIF deinterlacing is activated
LAV Audio
- Added proper DirectShow types and config options for AMR-NB, Nellymoser and various (AD)PCM variants
0.52.0 - 2012/10/20
LAV Splitter
- Improved IO performance on network sources
- Added an option to configure the maximum memory usage of the frame queues
- Support ALAC in MKV
- Support SRT subtitles in AVI
- Improved raw video support in combination with LAV Video
LAV Video
- Support for DVD Video decoding
- Slight GPU memory usage reduction with DXVA2 Native
- Fixed video corruption after seeks with VP3/Theora
- Fixed decoding of "old" H.264 4:4:4 lossless files
- More strict handling of output pixel formats, only enabled formats are allowed for output
- QuickSync: Improved compatibility with new driver series
- Improved support for VC-1 with the SageTV MpegDemux
LAV Audio
- Fixed a few issues with audio mixing
- Some channels would occasionally be mixed twice, causing incorrect audio levels
- Downmixing 8ch to stereo could crash on some systems
- Increased maximum LFE coefficient to 3.0 and fixed scale to be consistent with surround/center coefficients
- Added downmixing to Mono
- Clipping protection is no longer reset on seeks
- Added support for Opus
- Fixed excessive memory allocations when decoding MPEG4-ALS
0.51.3 - 2012/07/19
LAV Splitter
- Further improved H264 media type creation
LAV Audio
- Fixed an issue with the initial media types causing graph building failures in some situations
- Fixed a bug with DVBViewer which caused a delay on channel changes
0.51.2 - 2012/07/15
LAV Splitter
- Improved H264 media type creation with some files
- Fixed reading of QuickTime/AppleText chapters in MOV/MP4
LAV Video
- Reduced latency of H264 software decoding (improves Live TV playback)
- Fixed chroma handling of the YCgCo to RGB conversion
- Fixed timestamp handling of MPEG2 (regression introduced in 0.51)
LAV Audio
- Re-Mix audio as a fallback when the audio chain refuses a new channel configuration
- Fixed an error that caused 16-bit FLAC to show as 24-bit on the status panel
0.51.1 - 2012/07/10
LAV Video
- Improved compatibility between DXVA and certain DVB players
0.51.0 - 2012/07/09
LAV Splitter
- Increased IO responsiveness on high-latency network connections
- Improved timestamp handling for MPEG-PS (.mpg/.vob/.evo)
- Improved support for H264 streams in SSIF MPEG-TS files
- Added an option to control the priority of audio streams for the hearing/visually impaired
- Added new flags to the advanced subtitle selection
- "h" for hearing impaired
- "n" for normal streams (no flags)
- "!" NOT operator for inverting the meaning of the flags
LAV Video
- Improved DXVA2 Native to software fallback in some situations
- Support for YCgCo to RGB conversion
- Added a new smart Stream Aspect Ratio mode
- Will only use Stream AR when the container does not provide a realiable AR
LAV Audio
- Improved decoding performance of MP4 ALS and a few other formats
- Fixed playback of COOK with the MPC-HC RM Splitter
- Auto A/V Sync is now automatically disabled on pure-audio files to avoid potential conflicts
- Audio Down-Mixing support
0.50.5 - 2012/05/12
LAV Video
- Fixed a crash in DXVA2-Native decoding (introduced in 0.50.4)
0.50.4 - 2012/05/12
LAV Video
- Fixed seeking with QuickSync running in madVR Exclusive Mode
0.50.3 - 2012/05/11
LAV Splitter
- Fixed playback of raw PCM in AVI streams
- Fixed a rare misdetection of MPEG-2 as VC-1
LAV Video
- QuickSync: Fixed playback of some H.264 streams that would run out of sync on newer drivers
- Fixed a memory leak when playing H.264 RGB (and some other formats)
- Improved behaviour for H.264 and MPEG-2 on Live TV channel changes
LAV Audio
- Added support for Speex (via libspeex)
- Improved support for AMR-NB/WB (using OpenCore decoder)
0.50.2 - 2012/04/26
LAV Splitter
- Improved support for Playback Rates other then 1.0x
- Improved demuxing performance by implementing a custom Sample Allocator to avoid one extra memory copy
LAV Video
- Fixed a rare crash when using YV12 output on non-mod16 video
- Fixed excessive memory consumption with Haali Splitter and DXVA2-CB
- Fixed a deadlock on dynamic format changes with DXVA2 Native
- Added support for YV24 output
LAV Audio
- Improved support for Playback Rates other then 1.0x
- Support for ALAC and ALS with the MPC-HC MP4 splitter
- Improved A/V Sync on dynamic format changes
- Improved Auto A/V Sync Correction algorithm (lower threshold, faster reaction)
- Fixed audio pitch when bitstreaming 44.1KHz AC3/DTS
0.50.1 - 2012/03/29
LAV Splitter
- Fixed Stream Detection on some Blu-rays with short Logo clips before the main movie
- Fixed a crash when processing invalid/broken PGS subtitles
LAV Video
- Fixed a crash on dynamic format changes (stream change, Blu-ray clip change)
0.50 - 2012/03/27
LAV Splitter
- Improved support for H264 Elementary Streams
- Fixed a regression with seeking in MPEG-TS files recorded by some HD-PVR devices
LAV Video
- New Worker Thread design for Decoding/Deinterlacing
- WMV9+YADIF is up to 40% faster
- Improved DXVA2 for MPEG-2 interlaced
- Improved H264 DXVA2 on AMD with certain streams
- Improved CUVID support for 4K streams on supported hardware (GT520, GTX680, other VP5 hardware)
LAV Audio
- Added support for RealAudio Lossless (RALF)
0.49 - 2012/03/10
LAV Splitter
- Improved MKV demuxing performance from slow sources (network streaming, etc)
- Improved stream detection on Blu-rays
- Improved support for RealAudio (COOK, SIPR, etc) in MKV
- Support for streaming from HTTP URLs
LAV Audio
- Improved support for DTS files with Little-Endian or 14B encodings
LAV Video
- New VC1/WMV3 decoder based on the Microsoft DMO Decoder (new default)
- Updated Intel QuickSync decoder (0.29, r44)
- Fixed decoding of some MBAFF H264 streams with DXVA2
- Improved Stream Aspect Ratio logic in the CUVID decoder for H264 streams
- Fixed Deinterlacing when DXVA2 Native is active in certain situations
0.48 - 2012/02/24
LAV Splitter
- Improved Video/Audio stream detection in some MPEG-TS files
LAV Video
- Fixed a potential crash with native DXVA2 when the software fallback was used
0.47 - 2012/02/20
LAV Audio
- Fixed seeking in COOK audio with the MPC-HC RealMedia splitter
LAV Video
- New DXVA2 "native" decoder (see release notes)
- Updated Intel QuickSync decoder and tweaked configuration (0.28, r41)
- Overall performance improvements
- Multi-threaded decoding for Fraps
- Fixed a regression that resulted in only single-threaded playback on certain H264 files
- Fixed a crash in the CUVID decoder introduced in 0.46 under certain circumstances
0.46 - 2012/02/12
LAV Splitter
- Experimental support for streaming protocols (RTSP, RTP, MMS)
- Support for IBufferInfo (Buffer Status in MPC-HC "Statistics" pane)
- Added a memory limit to avoid too high memory use from the frame queues
- Fixed playback of files with Subtitles in WMP/WMC in some cases
LAV Audio
- Improved playback of files with bad audio frame interleaving
- Improved support of COOK, ATRAC and SIPR (RealAudio codecs)
LAV Video
- Updated and improved Intel QuickSync decoder (0.26, r38)
- Fixed DXVA2 software fallback on some lossless H264 clips
- Improved Fraps decoding with EVR
- Improved playback of MPEG4 in MP4
- Multi-threaded decoding for Lagarith
- Fixed playback of Theora with the MPC-HC Ogg Splitter
- Dithering Enhancements:
- New "Random Dithering" option (new default)
- Improved "Ordered Dithering" in the RGB converter
- Support for decoding v210/v410 raw formats
- Support for Snow and FFV1
0.45 - 2012/01/28
LAV Splitter
- Improved playback of concatenated H.264 MOV/MP4 files
- Adjusted FLAC MediaType to avoid ReClock stealing the connection
- Improved playback of MPEG-TS with timestamp discontinuities
LAV Audio
- Fixed playback of very short PCM samples
- Improved COOK decoding without LAV Splitter
LAV Video
- New DXVA2 "copy back" decoder (see release notes)
- Updated Intel QuickSync decoder (r29)
- Multi-threaded decoding for RV30/40, UtVideo and DNxHD
- Support for the "FCC" color matrix
- Improved Dirac support
- CUVID support for MPEG-4 ASP (experimental)
- Support for Intel Indeo 4, MS Video 1, 8BPS, LOCO, ZMBV, VCR1, AASC
0.44 - 2012/01/07
LAV Splitter
- Fixed a seeking regression in the mkv demuxer introduced in 0.43
- Fixed a bug that caused stream descriptions to vanish after the file finished playing
- Improved playback of WMVA video with commercial decoders
- Added support for the new OpenType MIME type produced by mkvtoolnix > 5.2.0
LAV Audio
- Fixed LATM AAC playback with some source filters
LAV Video
- Added Intel QuickSync hardware decoder
- Added support for YADIF with hardware decoding
- Added support for Dirac decoding
- Added support for DNxHD decoding
- Added support for v210/v410 output
- Improved dynamic reconnection with post-processing filters
- Fixed a seeking related corruption issue with MPEG4-ASP
0.43 - 2011/12/21
LAV Splitter
- Improved MKV seeking and demuxing performance
- Improved buffering for smoother playback (especially at start/after seeks)
- Fixed a few audio media type issues
- Fixed a minor resource handle leak
LAV Audio
- Updated to new ffmpeg audio decoding API
- Disabled Float Audio output on Windows XP by default
LAV Video
- Fixed handling of soft-telecined MPEG2/H264 broadcasts in CUVID mode
- Improved support for 4:2:2 10-bit streams
- Fixed a crash related to unaligned memory buffers on Windows XP
- Added support for decoding AMV streams
0.42 - 2011/11/30
LAV Splitter
- Fixed a timestamping bug in the new MKV demuxer
- Further enhancements to explorer thumbnail generation
0.41 - 2011/11/29
LAV Splitter
- New MKV Demuxer (see release notes for details)
- Fixed a bug with the Vorbis Media Type
- Disabled Subtitles when generating Thumbnails in Explorer
LAV Video
- Fixed a overflow in 10 -> 8 bit dithering and NV12 output
0.40 - 2011/11/21
LAV Splitter
- Improved demuxing of raw PCM streams
- Fixed VC-1 in MP4 with the MS WMVideo Decoder
- Improved playback of files with TrueHD audio streams
- Added support for a requested stop time from the player
- Improved playback of Blu-ray rips created by EasyBD
- Added support for RGB24 raw video in AVI
LAV Audio
- Improved decoding of formats with extremely large audio frames
LAV Video
- Added YADIF software deinterlacing
- Rewritten Interlaced options
- Added new "Aggressive" deinterlacing mode
- Moved many interlaced related options to global level
- Fixed an issue with stream compatibility detection in the CUVID decoder, causing a software fallback when not required
0.39 - 2011/11/07
LAV Splitter
- Fixed a bug that caused MPEG-2 and VC-1 parsers to produce wrong timestamps after a seek
- Fixed playback of raw .h264 files
LAV Video
- NV12 is now the preferred YUV 4:2:0 output format
- Fixed handling of the "As Input" RGB output setting
- Improved VP6 cropping
- Don't report completely progressive movies as interlaced to the renderer
- Fixed playback of some broken MPEG-2 MKV muxes
- RGB will now by default be offered as Bottom-Up instead of Top-Down for improved compatibility
0.38 - 2011/11/01
LAV Splitter
- New subtitle selection options (see release notes or readme)
- Improved handling of languages with more then one ISO 639-2 code (f.ex. German, French, etc)
- Improved seeking to the start of the file
- Added support for VobSubs in MP4
- Added support for MKV nested chapters
- Improved playback of RV40 in MKV
- Improved support of H264 in WTV
LAV Audio
- Fixed a crash with raw audio and SPDIF processing
- Improved support for COOK
- Improved DTS-in-WAV detection
LAV Video
- Fixed a issue that caused MPC-HCs EVR-CP to produce wrong colors when using CUVID decoding
- Support Multi-Threading and CUVID decoding for MPEG-1
- Improve decoder flushing
- Fixed a potential freeze on load and dynamic type changes
- Fixed a freeze on seeking with certain VP8 files
- Added support for UtVideo
- Added support for H264 4:2:2
0.37 - 2011/10/06
LAV Splitter
- Improved handling of failures on the output pins
- Improved VC-1 in EVO timestamps
LAV Audio
- Added support for dynamic channel count changes in AAC
- Implemented support for sample format conversions
- Implemented Audio Delay options
- Disabled the WMA codecs by default
- Improved Bitstreaming data flow
LAV Video
- Fixed cropping of VP6 video
- New SSE2 YUV420 -> YUV422 converter
- Performance enhancements in the CUVID decoder on some systems
- Fixed playback with the XP Overlay Mixer
- Fixed a crash when decoding RGB video (Fraps, etc)
0.36 - 2011/09/29
LAV Splitter
- Improved support for ADTS AAC
- Fixed MPEG-2 timestamps in VOB
- Fixed MPEG-2 frame rate reporting for telecined/interlaced
LAV Video
- Integrated NVIDIA CUVID Hardware decoder
- Performance enhancements in 10bit decoding
- Support for Flash Screen Video (FSV1)
- Support for Apple ProRes
- Improved MPEG-2 playback
- Improved A/V sync with VC-1 and MPEG4-ASP
0.35 - 2011/09/07
LAV Splitter
- Fixed a crash in IAMStreamSelect::Info handling with certain applications
- Improve duration calculation for MPEG files
LAV Audio
- Fix playback of DTS streams which change the channel mid-playback
LAV Video
- Fixed a crash with 10-bit decoding and benchmarking tools
- Fixed a H264 NALU parsing issue with certain streams
0.34 - 2011/09/04
LAV Splitter
- Improve playback of VC-1 in EVO
- Support for SSA subtitles in AVI
- Support for H264 in VFW mode in MKV
LAV Video
- New optimized pixel format converters (faster and more accurate)
- New YUV->RGB converter
- Support for PNG video
0.33 - 2011/08/22
LAV Splitter
- Improved compatibility with the MS WMVideo decoder
- Fixed the mediatype for raw PCM streams
LAV Audio
- Added support for Vorbis streams demuxed by Haali and MPC-HC Splitters
LAV Video
- VC-1 decoding is now disabled by default
- Fixed behaviour of the Stream AR option
- The maximum number of decoding threads is now 16
- Free decoding buffers when the input pin disconnects to avoid big memory leaks
0.32 - 2011/08/19
General
- The installer will now add shortcuts to the start menu to open the filter configurations
- The ffmpeg DLLs have been renamed to carry a "lav" suffix to avoid collisions with other components
LAV Splitter
- Improved detection of AAC LATM tracks (previously mis-detected as mp1/mp2)
- Fixed playback of badly interleaved AVI files
- Smarter default stream selection for RealMedia files
- Improved stream language handling for Blu-rays
- Fixed a crash issue with the Forced Subtitle pin on Blu-rays
LAV Audio
- DTS decoding failures are now handled more gracefully
- Fixed Media Types for Stereo 44.1kHz Audio
LAV Video
- First official version - refer to release notes for details
0.31 - 2011/07/28
LAV Splitter
- Improved audio codec selection priorities
- Improved VC-1 playback when using the madVR internal decoder
- Improved playback of MPEG-TS files with a timestamp wrap right at the beginning of a file
- Reduced amount of data required for file probing, resulting in faster startup time
- Fixed demuxing/timestamping of RealMedia files
LAV Audio
- Fixed a bug in the DTS parser which caused occasional hiccups on DTS-HD content
- Added the ability to detect DTS-in-WAV
0.30 - 2011/07/15
LAV Splitter
- Improved VC-1 playback with ffdshow DXVA
- Added support for outputting MPEG-4 Timed Text subtitles (only pure text supported)
- Better support for MLP audio
- I/O performance enhancements
- Added an option to toggle how LAV Splitter handles audio stream switching
- Added a hard-limit on queue sizes to avoid excessive memory usage when transcoding
- Added an experimental interface for the Player to control graph rebuilding
LAV Audio
- Further improvements to the DTS-HD parsing
- Better support for MLP audio
- Added more E-AC3 subtypes
0.29 - 2011/06/09
LAV Splitter
- The language code is now always shown in the stream changer (as a hint to easily know what to put into the preferred languages fields)
- Enabled ITrackInfo
- Improved H264 in MPEG-TS playback (including an option to try to fix broken HD-PVR recordings)
- Added a programmatic configuration interface for players to configure LAV Splitter
LAV Audio
- Added support for decoding encrypted DVD audio
- Fix decoding of some DTS-HD streams with the ArcSoft decoder
- Added a programmatic configuration interface for players to configure LAV Audio
0.28 - 2011/05/27
LAV Splitter
- Improved PGS filtering, forced subtitles should be cleared off the screen properly more often.
- Improved playback of H264 in MPEG-TS with certain files (mostly from camcorders, but some Blu-rays as well)
- Fixed 16-bit LPCM on DVDs
- Fixed the Media Types for uncompressed video
LAV Audio
- Added the ability to decode DTS Express when using the ArcSoft DTS Decoder
- Fixed missing audio after seeks with Ogg Vorbis
0.27 - 2011/05/24
General
- Added debug versions which generate log files on your desktop
LAV Splitter
- Fixed a memory leak when switching streams
- Increased probe buffer size (which results in files to be properly detected in more cases)
- Fixed playback of MPEG-TS files with a odd program configuration
LAV Audio
- Improvements to the DTS decoder interface
- Support for 1.1.0.0
- Try to reverse any channel upmixing done by the decoder, outputting the audio as close to the original source as possible.
- New Channel Mapping functionality
- Output only "standard" channel layouts (Mono, Stereo, 5.1, 6.1, 7.1), filling non-existent channels with silence. Required by some HDMI receivers with "odd" source layouts. (default)
- Convert Mono to Stereo (simply double the audio channel)
- Convert 6.1 to 7.1 (Back Center gets doubled into both back channels)
0.26 - 2011/05/15
General
- The VC2010 runtime is no longer required to be installed
LAV Splitter
- Further VC-1 in MKV improvements
- Added a separate "mpegvideo" (m2v files) option to the Format section
- Added a flag for secondary audio streams
- Changed the default DTS media type (better compatibility)
LAV Audio
- Added the ability to use the ArcSoft DTS decoder directly through LAV Audio
- Added an automatic algorithm to keep A/V sync stable
- Improved Bitstreaming with splitters other then LAV Splitter
- Improved timestamp generation when bitstreaming
- Fixed LPCM 24-bit Media Types
0.25 - 2011/05/06
LAV Splitter
- Added the ability to filter Blu-ray PGS subtitles, so only frames flagged as "forced" are delivered
- Either through a new "Forced Subtitles" stream (default)
- Or, filtering for every PGS stream (configurable)
- Improved support for H264 in AVI
- Improved timings for TrueHD in MKV
- m2ts files directly openend inside a Blu-ray structure should now properly display stream languages
- Alot of fixes and enhancements for format compatibility (especially MPEG-TS)
- Support using the ArcSoft HD Audio Decoder for E-AC3
LAV Audio
- Audio bitstreaming (pass-through) for HDMI and S/PDIF
- Support for AC3, E-AC3, TrueHD, DTS and DTS-HD
- Use the float decoders for mp1/mp2
- Added official support for WMAv1, WMAv2 and WMA Pro
- Fixed an issue that caused sync issues with FLAC audio, and FLAC is once again enabled by default
0.24 - 2011/04/25
General
- Big ffmpeg update! Libraries have been renamed (version increase)
LAV Splitter
- Obviously wrong frame rates will no longer be reported to the decoder
- Improved mpeg2 playback
- Improved dynamic media type changes
- Fix the first few frames of ASS/SSA subtitles in Matroska
- Fix an issue with the display of some codec names
- Add proper subtypes for little-endian PCM
- Fix subtypes for QT PCM
LAV Audio
- Support processing of 64-bit double output from the decoders
- PCM data will be buffered before its send to the renderer/post processor
0.23 - 2011/04/21
General
- There is now an installer available in addition to the trusted old .zip files!
LAV Splitter
- Added support for using the "File Source (Async)" (and others) together with LAV Splitter
- This is the new default mode for improved compatibility!
- Check release notes for additional informations.
- Added configuration which input formats will be demuxed
- Improved VC-1 in MKV playback
LAV Audio
- Fixed playback of lossless formats with huge sample sizes
- Improved A/V sync with TrueHD (and possibly others)
- FLAC decoding is now disabled by default, because the decoder is not 100% working
0.22 - 2011/04/11
LAV Splitter
- Added support for MKV embedded fonts
- Improved VC-1 and H264 parsing
- Fixed choppy XVID playback in MKV
- Fixed a seeking issues that caused incompatibilitys with certain decoders (eg. a crash in ffdshow libmpeg2)
- No longer report incomplete lists of keyframes via IKeyFrameInfo, as it would break seeking in certain players.
- Allow opening all .mpls files if the user directly specifys to open one, even if it contains loops or duplicate titles.
- Improved playback of MPEG-TS with multiple programs
- Added new debugging option (Generate missing timestamps)
0.21 - 2011/04/07
LAV Splitter
- Improve MPEG-TS program handling in some special circumstances
- Filter out misdetected audio streams (unsupported DTS Express on BluRays)
- Increase the priority of DTS-HD over normal DTS
- Use the official AVI MEDIASUBTYPE instead of a custom one
- Added options to completly disable stream parsing
- Added a new VC-1 parser which will take over when VC-1 timestamp adjustments are turned off
0.20 - 2011/04/05
LAV Splitter
- Added first BluRay support (see Release Notes or README for more details)
LAV Audio
- Removed static jitter check which caused corruptions in some audio streams
- Improved error resilience - broken streams should now play in many more cases
0.19 - 2011/03/19
General
- Version Information has been added to the filter .ax files, as well as shown on the property pages.
LAV Splitter
- Redesigned stream name generations
- Codec profiles are now shown (if known - supported are H264, VC1, MPEG2 and DTS)
- Audio bit-depth is no longer shown for lossy codecs, as it doesn't apply there
- Improved logic that parses the stream flags
- Names for the subtitle codecs have been added
- If the language is "Undetermined", it'll no longer be shown
- Size of the packet queue has been increased (solves subtitle issues, as well as improves playback stability)
- Redesigned the way the splitter registers for formats in the registry for better compatibility
- Changed the stream change handling for better compatibility with certain players (Media Portal, and others)
- Improved handling of unknown streams (no codec information present)
- Added a new option that controls if substreams should be exposed in the stream selector (Only AC3 in TrueHD supported)
LAV Audio
- Added a new configuration panel which allows to configure which formats the decoder should handle
0.18 - 2011/03/09
LAV Splitter
- Improved compatibility when decoding VC-1 with the ArcSoft and Cyberlink Decoders
- Increased the splitters merit
- Fixed an issue that caused the splitter to deadlock when changing streams with madVR
LAV Audio Decoder
- Fixed a bug that caused sample durations to be calculated wrong, causing playback glitches
0.17 - 2011/02/27
LAV Splitter
- Fixed seeking before starting playback
0.16 - 2011/02/27
LAV Audio Decoder
- Fixed missing audio after seeks
0.15 - 2011/02/27
LAV Splitter
- Fixed automatic selection of forced subtitle stream if the "Only Forced Subs" mode is active.
- Fixed a bug in file handling that caused file sizes above 4GB to overflow, causing invalid durations to be reported in some files.
- Improved performance on file opening
LAV Audio Decoder
- Enabled the ffmpeg codec parsers, which should improve compatibility with other DirectShow splitters.
- Added a audio channel activity display to the status property page (for debugging channel assignments)
0.14 - 2011/02/10
General
- The project and filters have been renamed slightly for consistency
LAV Splitter
- The settings have been moved to a different place in the Registry. You will need to re-apply them.
- Improved MPEG-TS duration calculations.
- The settings will now always be properly saved and loaded.
- Disabled the limit of 20 Streams per file.
- Fixed two separate issues that caused files to not start playing.
LAV Audio Decoder
- Property Page for Configuration and Status has been added
- Dynamic Range Compression is now off by default, but configurable.
- Media Type creation has been improved, fixes filter connection issues.
- Processing of UINT8 Samples has been fixed.
- Fixed a crash with some Audio codecs.
- Fixed Channel Order for 7.1 Streams
- Increased the decoders Merit
- Added support for decoding QT PCM
0.13 - 2011/01/29
LAVFSplitter
- Added support for demuxing BluRay LPCM tracks into the MPC-HC format
- Added a new LAVFSplitter specific media type to all audio streams
LAVCAudio
- First version of LAVCAudio implemented
0.12 - 2011/01/21
- Fixed a crash issue with certain configurations and files with subtitles
- Revisited file duration logic, now tries to prefer the duration of the video stream. This fixes MPEG-TS duration issues.
- Updated ffmpeg (a lot of issues resolved)
0.11 - 2010/11/06
- Smart stream pre-selection based on language, flags and quality
- Properties page for configuration (languages, stream selection logic)
- Added support for AAC LATM (single stream)
- Changed the "No Subtitles" pin to a more "friendly" Media Type
- Fixed a crash with certain AAC tracks
0.10 - 2010/10/26
- Added more MOV/MP4 byte markers
- Added support for multichannel PCM tracks
- Added support for DVD LPCM tracks
- Added support for usign the ArcSoft HD decoder for DTS and TrueHD tracks
- Send the proper media type for TrueHD instead of trying to connect with AC-3
- Improved H264 frame rate detection
- Improved FLAC support
- Fix loading of files with unicode characters in their names
- Fixed timestamping issues that caused certain videos to play too fast
- Fixed M-JPEG media type
- Fixed corruption with MPEG-4 ASP (DivX/Xvid) when using the Xvid decoder
0.9 - 2010/09/12
- Added support for distinguishing hearing impaired subtitles in mpeg-ts streams
- Added BluRay LPCM support
- MP1/MP2 audio media type fixes
- Honor the original FourCC of the file in media type generation
- Added support for using the Cyberlink VC-1 decoder
- Fixed an issue with some H264/AVC1 files that caused video to not play at all
- Fixed unicode in chapter names
- Fixed getting the current chapter
0.8 - 2010/08/30
- Alot of internal changes to enhance performance and maintainability
- Fixed a potential deadlock on seeking
- Fixed playing files without a video stream
- Fixed an issue that caused some players to hang on playback start
- Improved language detection
0.7 - 2010/08/23
- Further improvements to aspect ratio detection
- Restore old FPS detection
- Adjusted flushing to fix subtitle delays
- Reverted a timing change that broke TrueHD
0.6 - 2010/08/22
- Added support for E-AC3
- Fixed MPEG2 Media Types
- Added support for RealVideo in MKV
- Set proper aspect ratio in media type
- Fixed memory leaks in packet handling code
- Unicode support for stream names
- Threading changes for more fluid playback at startup
- Changed Flushing behaviour that solves a conflict with the MS DTV-DVD Decoder
- Better support for Vorbis audio
- Registers for the OGG Container Format
0.5 - 2010/08/18
- Fixed duration of MPEG-TS files
- Added support for DVB subtitles
- Fixed switching of Audio and Subtitle Streams
- Added a "No Subtitles" Stream
0.4 - 2010/08/16
- Improved SSA Subtitle support
- Fixed freeze-on-stop issue
0.3 - 2010/08/15
- Added Chapter support
- Improved stream descriptions
- 64-bit support
0.2 - 2010/08/14
- Fixed overflow in timestamp calculation causing AVIs to play too fast
0.1 - 2010/08/14
- Initial Release
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type='win32' name='LAVFilters.Dependencies' version='1.0.0.0' />
<file name="avutil-lav-57.dll" />
<file name="swresample-lav-4.dll" />
<file name="avcodec-lav-59.dll" />
<file name="avformat-lav-59.dll" />
<file name="swscale-lav-6.dll" />
<file name="avfilter-lav-8.dll" />
<file name="libbluray.dll" />
</assembly>
LAV Filters - ffmpeg based DirectShow Splitter and Decoders
LAV Filters are a set of DirectShow filters based on the libavformat and libavcodec libraries
from the ffmpeg project, which will allow you to play virtually any format in a DirectShow player.
The filters are still under development, so not every feature is finished, or every format supported.
Install
=============================
- Unpack
- Register (install_*.bat files)
Registering requires administrative rights, and an elevated shell ("Run as Administrator")
Using it
=============================
By default, the splitter will register for all media formats that have been
tested and found working at least partially.
This currently includes (but is not limited to)
MKV/WebM, AVI, MP4/MOV, TS/M2TS/MPG, FLV, OGG, BluRay (.bdmv and .mpls)
However, some other splitters register in a "bad" way and force all players
to use them. The Haali Media Splitter is one of those, and to give priority
to the LAVFSplitter you have to either uninstall Haali or rename its .ax file
at least temporarily.
The Audio and Video Decoder will register with relatively high merit, which should make
it the preferred decoder by default. Most players offer a way to choose the preferred
decoder however.
Automatic Stream Selection
=============================
LAV Splitter offers different ways to pre-select streams when opening a file.
The selection of video streams is not configurable, and LAV Splitter will quite simply
pick the one with the best quality.
Audio stream selection offers some flexibility, specifically you can configure your preferred languages.
The language configuration is straightforward. Just enter a list of 3-letter language codes (ISO 639-2),
separated by comma or space.
For example: "eng ger fre". This would try to select a stream matching one of these languages,
in the order you specified them. First, check if an English track is present, and only if not,
go to German, and after that, go to French.
If multiple audio tracks match one language, the choice is based on the quality. The primary attribute here
is the number of channels, and after that is the codec used. PCM and lossless codecs have a higher priority
than lossy codecs.
Subtitle selection offers the most flexibility.
There are 4 distinct modes of subtitle selection.
"No Subtitles"
This mode is simple, by default subtitles will be off.
"Only Forced Subtitles"
This mode will only pre-select subtitles flagged with the "forced" flag. It'll also obey the language preferences, of course.
"Default"
The default mode will select subtitles matching your language preference. If there is no match, or you didn't configure
languages, no subtitles will be activated. In addition, subtitles flagged "default" or "forced" will always be used.
"Advanced"
The advanced mode lets you write your own combinations of rules with a special syntax. It also allows selecting subtitles
based on the audio language of the file.
The base syntax is simple, it always requires a pair of audio and subtitle language, separated by a colon, for example: "eng:ger"
In this example, LAV Splitter would select German subtitles if English audio was found.
Instead of language codes, the advanced mode supports two special cases: "*" and "off".
When you specify "*" for a language code, it'll match everything. For example "*:eng" will activate English subtitles, independent
of the audio language. The reverse is also possible: "eng:*" will activate any subtitles when the audio is English.
The "off" flag is only valid for the subtitle language, and it instructs LAV Splitter to turn the subtitles off.
So "eng:off" means that when the audio is English, the subtitles will be deactivated.
Additionally to the syntax above, the following flags can be appended to the subtitle token separated by a pipe symbol ("|"):
- "d" for default subtitles
- "f" for forced subtitles
- "h" for hearing impaired
- "n" for normal streams (not default, forced, or impaired).
In addition, you can also check for the absence of flags by preceding the flags with a "!".
The advanced rules can be combined into a complete logic for subtitle selection by just appending them, separated with a comma or a space.
The rules will always be parsed from left to right, the first match taking precedence.
Example: (basic flag usage)
"*:*|f"
Explanation:
On any audio language, load any subtitles that are flagged forced.
Example: (basic ruleset)
"eng:eng|f eng:ger|f eng:off *:eng *:ger"
Explanation:
If the audio is English, load an English or a German forced subtitle track, otherwise, turn subtitles off.
If the audio is not English, load English or German subtitles.
Example: (flag usage with negation)
"jpn:ger|d!f"
Explanation:
In the Japanese language, load German subtitles that have the default-flag but not together with forced-flag.
This is useful when you have files where the default and forced flags are set together.
Example: (advanced ruleset for files with multiple audio and subtitle-tracks)
"jpn:ger|d!f jpn:ger|!f jpn:ger ger:ger|f ger:eng|f ger:*|f"
Explanation:
On Japanese audio, try to load German full subs (default but not forced), then unforced, and at last any german subs if there are no unforced subs.
On German audio load only forced subs in the following order: German, English, any.
BluRay Support
=============================
To play a BluRay, simply open the index.bdmv file in the BDMV folder on the BluRay disc.
LAV Splitter will then automatically detect the longest track on the disc (usually the main movie),
and start playing.
Alternatively, you can also open a playlist file (*.mpls, located in BDMV/PLAYLIST), and LAV Splitter
will then play that specific title.
In future versions, you'll be able to choose the title from within the player, as well.
Compiling
=============================
Compiling is pretty straightforward using VS2019 (included project files).
Older versions of Visual Studio are not officially supported, but may still work.
It does, however, require that you build your own ffmpeg and libbluray.
You need to place the full ffmpeg package in a directory called "ffmpeg" in the
main source directory (the directory this file was in). There are scripts to
build a proper ffmpeg included.
I recommend using my fork of ffmpeg, as it includes additional patches for
media compatibility:
https://git.1f0.de/gitweb?p=ffmpeg.git;a=summary
libbluray is compiled with the MSVC project files, however, a specially modified
version of libbluray is required. Similar to ffmpeg, just place the full tree
inside the "libbluray" directory in the main directory.
You can get the modified version here:
https://git.1f0.de/gitweb?p=libbluray.git;a=summary
Feedback
=============================
GitHub Project: https://github.com/Nevcairiel/LAVFilters
Doom9: https://forum.doom9.org/showthread.php?t=156191
/*
* (C) 2003-2006 Gabest
* (C) 2006-2013 MPC-HC Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
interface __declspec(uuid("EB2CD9E6-BA08-4acb-AA0F-3D8D0DD521CA"))
IBitRateInfo :
public IUnknown {
STDMETHOD_(DWORD, GetCurrentBitRate)() PURE;
STDMETHOD_(DWORD, GetAverageBitRate)() PURE;
};
/*
* $Id: IBufferInfo.h 2786 2010-12-17 16:42:55Z XhmikosR $
*
* (C) 2003-2006 Gabest
* (C) 2006-2010 see AUTHORS
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#pragma once
interface __declspec(uuid("46070104-1318-4A82-8822-E99AB7CD15C1")) IBufferInfo : public IUnknown
{
// Number of Buffers
STDMETHOD_(int, GetCount()) = 0;
// Get Info about Buffer "i" (0-based index up to count)
// samples: number of frames in the buffer
// size: total size in bytes of the buffer
STDMETHOD(GetStatus(int i, int &samples, int &size)) = 0;
// Get priority of the demuxing thread
STDMETHOD_(DWORD, GetPriority()) = 0;
};
// -----------------------------------------------------------------
// ID3DVideoMemoryConfiguration interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
// -----------------------------------------------------------------
// Control D3D11 Hardware Decoding between decoder and renderer
// -----------------------------------------------------------------
// A video renderer can implement this interface on its input pin
// to signal to a decoder that its capable of accepting D3D11 texture
// samples directly, without copying to system memory.
//
// The decoder will create the D3D11 device and a mutex to protect it,
// and share it with the renderer in this interface.
//
// To facilitate dynamic switching of the adapter used for decoding, the
// renderer should disconnect the decoder and re-connect it. At that
// point the decoder should query GetD3D11AdapterIndex() again and
// create a new decoder on the new device, as appropriate.
interface __declspec(uuid("2BB66002-46B7-4F13-9036-7053328742BE")) ID3D11DecoderConfiguration : public IUnknown
{
// Set the surface format the decoder is going to send.
// If the renderer is not ready to accept this format, an error will be returned.
virtual HRESULT STDMETHODCALLTYPE ActivateD3D11Decoding(ID3D11Device * pDevice, ID3D11DeviceContext * pContext,
HANDLE hMutex, UINT nFlags) = 0;
// Get the currently preferred D3D11 adapter index (to be used with IDXGIFactory1::EnumAdapters1)
virtual UINT STDMETHODCALLTYPE GetD3D11AdapterIndex() = 0;
};
// -----------------------------------------------------------------
// Media Sample to hold a D3D11 texture
// -----------------------------------------------------------------
// D3D11 textures used for decoding are typically array-textures,
// a single ID3D11Texture2D object containing an array of textures
// individually addressable by the ArraySlice index.
//
// The texture lifetime is bound to the media samples lifetime. The
// media sample can only be released when the texture is no longer in
// use, otherwise the texture will be re-used by the decoder.
//
// The texture is AddRef'ed when retrieved through this interface,
// and should be Released when no longer needed.
interface __declspec(uuid("BC8753F5-0AC8-4806-8E5F-A12B2AFE153E")) IMediaSampleD3D11 : public IUnknown
{
// Get the D3D11 texture for the specified view.
// 2D images with only one view always use view 0. For 3D, view 0 specifies the base view, view 1 the extension
// view.
virtual HRESULT STDMETHODCALLTYPE GetD3D11Texture(int nView, ID3D11Texture2D **ppTexture, UINT *pArraySlice) = 0;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
interface __declspec(uuid("EBAFBCBE-BDE0-489A-9789-05D5692E3A93")) IDSMResourceBag : public IUnknown
{
STDMETHOD_(DWORD, ResGetCount)() PURE;
STDMETHOD(ResGet)(DWORD iIndex, BSTR * ppName, BSTR * ppDesc, BSTR * ppMime, BYTE * *ppData, DWORD * pDataLen, DWORD_PTR * pTag) PURE;
STDMETHOD(ResSet)(DWORD iIndex, LPCWSTR pName, LPCWSTR pDesc, LPCWSTR pMime, const BYTE *pData, DWORD len, DWORD_PTR tag) PURE;
STDMETHOD(ResAppend)(LPCWSTR pName, LPCWSTR pDesc, LPCWSTR pMime, BYTE * pData, DWORD len, DWORD_PTR tag) PURE;
STDMETHOD(ResRemoveAt)(DWORD iIndex) PURE;
STDMETHOD(ResRemoveAll)(DWORD_PTR tag) PURE;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {17989414-C927-4D73-AB6C-19DF37602AC4}
DEFINE_GUID(IID_IGraphRebuildDelegate, 0x17989414, 0xc927, 0x4d73, 0xab, 0x6c, 0x19, 0xdf, 0x37, 0x60, 0x2a, 0xc4);
interface __declspec(uuid("17989414-C927-4D73-AB6C-19DF37602AC4")) IGraphRebuildDelegate : public IUnknown
{
// Called by the splitter to let the player know that a certain pin needs to be rebuild.
//
// This function is called on any stream or title changes that would cause the content of the pin to change.
// The Splitter will stop the graph prior to this call, and it will return the graph to its previous state
// afterwards.
//
// When this function is called, the pin will already have the new media types set, so the usual functions to query
// the media types can be used. EnmuMediaTypes is OK (or any wrappers of this in the base classes),
// ConnectionMediaType is not OK, for obvious reasons.
//
// Following return values are supported:
// S_OK - The player took complete control over the rebuild, the splitter will do no further actions regarding
// the pin S_FALSE - The player may or may not have changed the pin, and the splitter is instructed to send a media
// type with the next packet. E_FAIL - The player failed, and the splitter should try to rebuild the pin
STDMETHOD(RebuildPin)(IFilterGraph * pGraph, IPin * pPin) = 0;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
interface __declspec(uuid("01A5BBD3-FE71-487C-A2EC-F585918A8724")) IKeyFrameInfo : public IUnknown
{
// Get the number of (known) keyframes in the file
STDMETHOD(GetKeyFrameCount)(UINT & nKFs) = 0; // returns S_FALSE when every frame is a keyframe
// Get the times of the key frames, if available.
//
// pFormat: GUID of the time format (see http://msdn.microsoft.com/en-us/library/dd407205(v=vs.85).aspx, usually
// TIME_FORMAT_MEDIA_TIME) pKFs: Caller allocated memory for the timestamps of the keyframes (should be
// sizeof(REFERENCE_TIME) * nKFs at least!) nKF: Number of keyframes requested/returned - no more then nKFs key
// frames will be returned.
STDMETHOD(GetKeyFrames)(const GUID *pFormat, REFERENCE_TIME *pKFs, UINT &nKFs /* in, out*/) = 0;
};
\ No newline at end of file
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {8FBB906B-D1DB-4528-9498-563241CCD43D}
DEFINE_GUID(IID_ILAVDynamicAllocator, 0x8fbb906b, 0xd1db, 0x4528, 0x94, 0x98, 0x56, 0x32, 0x41, 0xcc, 0xd4, 0x3d);
interface __declspec(uuid("8FBB906B-D1DB-4528-9498-563241CCD43D")) ILAVDynamicAllocator : public IUnknown
{
// Query wether this allocator is using dynamic allocation of samples and will not run out of samples
STDMETHOD_(BOOL, IsDynamicAllocator)() PURE;
};
// -----------------------------------------------------------------
// IMediaSample3D interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
interface __declspec(uuid("E92D790E-BF54-43C4-B394-8CA0A41BF9EC")) IMediaSample3D : public IMediaSample2
{
STDMETHOD(Enable3D)() = 0;
STDMETHOD(GetPointer3D)(BYTE **ppBuffer) = 0;
};
// -----------------------------------------------------------------
// IMediaSideData interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
#include <stdint.h>
// -----------------------------------------------------------------
// Interface to exchange binary side data
// -----------------------------------------------------------------
// This interface should be implemented in IMediaSample objects and accessed through IUnknown
// It allows binary side data to be attached to the media samples and delivered with them
// Restrictions: Only one side data per type can be attached
interface __declspec(uuid("F940AE7F-48EB-4377-806C-8FC48CAB2292")) IMediaSideData : public IUnknown
{
// Set the side data identified by guidType to the data provided
// The provided data will be copied and stored internally
STDMETHOD(SetSideData)(GUID guidType, const BYTE *pData, size_t size) PURE;
// Get the side data identified by guidType
// The caller receives pointers to the internal data, and the pointers shall stay
// valid for the lifetime of the object
STDMETHOD(GetSideData)(GUID guidType, const BYTE **pData, size_t *pSize) PURE;
};
// -----------------------------------------------------------------
// High-Dynamic-Range (HDR) Side Data
// -----------------------------------------------------------------
// {53820DBC-A7B8-49C4-B17B-E511591A790C}
DEFINE_GUID(IID_MediaSideDataHDR, 0x53820dbc, 0xa7b8, 0x49c4, 0xb1, 0x7b, 0xe5, 0x11, 0x59, 0x1a, 0x79, 0xc);
#pragma pack(push, 1)
struct MediaSideDataHDR
{
// coordinates of the primaries, in G-B-R order
double display_primaries_x[3];
double display_primaries_y[3];
// white point
double white_point_x;
double white_point_y;
// luminance
double max_display_mastering_luminance;
double min_display_mastering_luminance;
};
#pragma pack(pop)
// {ED6AE576-7CBE-41A6-9DC3-07C35DC13EF9}
DEFINE_GUID(IID_MediaSideDataHDRContentLightLevel, 0xed6ae576, 0x7cbe, 0x41a6, 0x9d, 0xc3, 0x7, 0xc3, 0x5d, 0xc1, 0x3e,
0xf9);
#pragma pack(push, 1)
struct MediaSideDataHDRContentLightLevel
{
// maximum content light level (cd/m2)
unsigned int MaxCLL;
// maximum frame average light level (cd/m2)
unsigned int MaxFALL;
};
#pragma pack(pop)
// {183ED511-8910-4262-88F6-4946BC799C84}
DEFINE_GUID(IID_MediaSideDataHDR10Plus, 0x183ed511, 0x8910, 0x4262, 0x88, 0xf6, 0x49, 0x46, 0xbc, 0x79, 0x9c, 0x84);
#pragma pack(push, 1)
// HDR10+ metadata according to SMPTE 2094-40
// Refer to the specification for the meaning of the fields
//
// All pixel values are kept as-is, rational values are normalized as double-precision floating point
struct MediaSideDataHDR10Plus
{
// number of windows (1-3)
unsigned int num_windows;
// processing windows
struct
{
unsigned int upper_left_corner_x;
unsigned int upper_left_corner_y;
unsigned int lower_right_corner_x;
unsigned int lower_right_corner_y;
unsigned int center_of_ellipse_x;
unsigned int center_of_ellipse_y;
unsigned int rotation_angle;
unsigned int semimajor_axis_internal_ellipse;
unsigned int semimajor_axis_external_ellipse;
unsigned int semiminor_axis_external_ellipse;
unsigned int overlap_process_option;
double maxscl[3];
double average_maxrgb;
unsigned int num_distribution_maxrgb_percentiles;
struct
{
unsigned int percentage;
double percentile;
} distribution_maxrgb_percentiles[15];
double fraction_bright_pixels;
unsigned int tone_mapping_flag;
double knee_point_x;
double knee_point_y;
unsigned int num_bezier_curve_anchors;
double bezier_curve_anchors[15];
unsigned int color_saturation_mapping_flag;
double color_saturation_weight;
} windows[3];
double targeted_system_display_maximum_luminance;
unsigned int targeted_system_display_actual_peak_luminance_flag;
unsigned int num_rows_targeted_system_display_actual_peak_luminance;
unsigned int num_cols_targeted_system_display_actual_peak_luminance;
double targeted_system_display_actual_peak_luminance[25][25];
unsigned int mastering_display_actual_peak_luminance_flag;
unsigned int num_rows_mastering_display_actual_peak_luminance;
unsigned int num_cols_mastering_display_actual_peak_luminance;
double mastering_display_actual_peak_luminance[25][25];
};
#pragma pack(pop)
// {BAE40E6C-5B93-4170-90CC-5D5F02A29638}
DEFINE_GUID(IID_MediaSideDataDOVIRPU, 0xbae40e6c, 0x5b93, 0x4170, 0x90, 0xcc, 0x5d, 0x5f, 0x2, 0xa2, 0x96, 0x38);
// {277EE779-13F4-434E-BDEC-3D6F8C0E15D2}
DEFINE_GUID(IID_MediaSideDataDOVIMetadata, 0x277ee779, 0x13f4, 0x434e, 0xbd, 0xec, 0x3d, 0x6f, 0x8c, 0xe, 0x15, 0xd2);
#pragma pack(push, 1)
// Dolby Vision metadata
// Refer to the specification for the meaning of the fields
struct MediaSideDataDOVIMetadata
{
struct
{
uint8_t rpu_type;
uint16_t rpu_format;
uint8_t vdr_rpu_profile;
uint8_t vdr_rpu_level;
uint8_t chroma_resampling_explicit_filter_flag;
uint8_t coef_data_type; /* informative, lavc always converts to fixed */
uint8_t coef_log2_denom;
uint8_t vdr_rpu_normalized_idc;
uint8_t bl_video_full_range_flag;
uint8_t bl_bit_depth; /* [8, 16] */
uint8_t el_bit_depth; /* [8, 16] */
uint8_t vdr_bit_depth; /* [8, 16] */
uint8_t spatial_resampling_filter_flag;
uint8_t el_spatial_resampling_filter_flag;
uint8_t disable_residual_flag;
} Header;
struct
{
uint8_t vdr_rpu_id;
uint8_t mapping_color_space;
uint8_t mapping_chroma_format_idc;
struct
{
#define LAV_DOVI_MAX_PIECES 8
uint8_t num_pivots; /* [2, 9] */
uint16_t pivots[LAV_DOVI_MAX_PIECES + 1]; /* sorted ascending */
uint8_t mapping_idc[LAV_DOVI_MAX_PIECES]; /* 0 polynomial, 1 mmr */
/* polynomial */
uint8_t poly_order[LAV_DOVI_MAX_PIECES]; /* [1, 2] */
int64_t poly_coef[LAV_DOVI_MAX_PIECES][3]; /* x^0, x^1, x^2 */
/* mmr */
uint8_t mmr_order[LAV_DOVI_MAX_PIECES]; /* [1, 3] */
int64_t mmr_constant[LAV_DOVI_MAX_PIECES];
int64_t mmr_coef[LAV_DOVI_MAX_PIECES][3 /* order - 1 */][7];
} curves[3]; /* per component */
/* Non-linear inverse quantization */
uint8_t nlq_method_idc; // -1 none, 0 linear dz
uint32_t num_x_partitions;
uint32_t num_y_partitions;
struct
{
uint16_t nlq_offset;
uint64_t vdr_in_max;
/* linear dz */
uint64_t linear_deadzone_slope;
uint64_t linear_deadzone_threshold;
} nlq[3]; /* per component */
} Mapping;
struct
{
uint8_t dm_metadata_id;
uint8_t scene_refresh_flag;
/**
* Coefficients of the custom Dolby Vision IPT-PQ matrices. These are to be
* used instead of the matrices indicated by the frame's colorspace tags.
* The output of rgb_to_lms_matrix is to be fed into a BT.2020 LMS->RGB
* matrix based on a Hunt-Pointer-Estevez transform, but without any
* crosstalk. (See the definition of the ICtCp colorspace for more
* information.)
*/
double ycc_to_rgb_matrix[9]; /* before PQ linearization */
double ycc_to_rgb_offset[3]; /* input offset of neutral value */
double rgb_to_lms_matrix[9]; /* after PQ linearization */
/**
* Extra signal metadata (see Dolby patents for more info).
*/
uint16_t signal_eotf;
uint16_t signal_eotf_param0;
uint16_t signal_eotf_param1;
uint32_t signal_eotf_param2;
uint8_t signal_bit_depth;
uint8_t signal_color_space;
uint8_t signal_chroma_format;
uint8_t signal_full_range_flag; /* [0, 3] */
uint16_t source_min_pq;
uint16_t source_max_pq;
uint16_t source_diagonal;
} ColorMetadata;
};
#pragma pack(pop)
// -----------------------------------------------------------------
// 3D Plane Offset Side Data
// -----------------------------------------------------------------
// {F169B76C-75A3-49E6-A23A-14983EBF4370}
DEFINE_GUID(IID_MediaSideData3DOffset, 0xf169b76c, 0x75a3, 0x49e6, 0xa2, 0x3a, 0x14, 0x98, 0x3e, 0xbf, 0x43, 0x70);
#pragma pack(push, 1)
struct MediaSideData3DOffset
{
// Number of valid offsets (up to 32)
int offset_count;
// Offset Value, can be positive or negative
// positive values offset closer to the viewer (move right on the left view, left on the right view)
// negative values offset further away from the viewer (move left on the left view, right on the right view)
int offset[32];
};
#pragma pack(pop)
// -----------------------------------------------------------------
// EIA-608/708 Closed Caption Data
// -----------------------------------------------------------------
// {40FEFD7F-85DD-4335-A804-8A33B0BF7B81}
DEFINE_GUID(IID_MediaSideDataEIA608CC, 0x40fefd7f, 0x85dd, 0x4335, 0xa8, 0x4, 0x8a, 0x33, 0xb0, 0xbf, 0x7b, 0x81);
// There is no struct definition. The data is supplied as a list of 3 byte CC data packets (control byte + cc_data1/2)
// -----------------------------------------------------------------
// Media Control Flags
// -----------------------------------------------------------------
// {B5411CE3-3B21-4FD6-80A8-CE682969F795}
DEFINE_GUID(IID_MediaSideDataControlFlags, 0xb5411ce3, 0x3b21, 0x4fd6, 0x80, 0xa8, 0xce, 0x68, 0x29, 0x69, 0xf7, 0x95);
// No struct definition, just a single DWORD for additional flags
enum MediaSideDataControlFlags
{
MediaSideDataControlFlags_EndOfSequence = (1 << 0),
};
#pragma once
// -----------------------------------------------------------------
// IPin Segmenting Extension
// -----------------------------------------------------------------
// This extension allows upstream filters to cleanly terminate segments,
// indicating to downstream components that any data should be flushed
// to the renderer.
// This call should be followed by a call to IPin::NewSegment to start a
// new segment afterwards.
interface __declspec(uuid("8B81E022-52C7-4B89-9F11-ACFD063AABB4")) IPinSegmentEx : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE EndOfSegment(void) = 0;
};
/*
* (C) 2003-2006 Gabest
* (C) 2006-2010 MPC-HC Authors
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#pragma once
#include <OCIdl.h>
interface __declspec(uuid("03481710-D73E-4674-839F-03EDE2D60ED8")) ISpecifyPropertyPages2 : public ISpecifyPropertyPages
{
STDMETHOD(CreatePage)(const GUID &guid, IPropertyPage **ppPage) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// NOTICE: This interface is still experimental and may change in the future. Do NOT use it yet unless you absolutely
// know what you are doing.
// Interface for high-level streaming source filters
// The source can implement proper seeking and duration retrieval based on its underlying protocol.
// This interface should be exposed on the output pin or the filter itself of the streaming source, similar to the
// IAsyncReader interface
// {C0BE9565-4C05-4644-9492-57547A4048DC}
DEFINE_GUID(IID_IStreamSourceControl, 0xc0be9565, 0x4c05, 0x4644, 0x94, 0x92, 0x57, 0x54, 0x7a, 0x40, 0x48, 0xdc);
interface __declspec(uuid("C0BE9565-4C05-4644-9492-57547A4048DC")) IStreamSourceControl : public IUnknown
{
// Get the duration of the stream being played.
// Duration is in DirectShow reference time, 100ns units.
STDMETHOD(GetStreamDuration)(REFERENCE_TIME * prtDuration) PURE;
// Seek the stream to a specified time
//
// Position is in DirectShow reference time, 100ns units.
//
// If the source returns a failure code, the demuxer will do byte-based seeking itself (ie. when the stream supports
// this) On success, it'll re-open the stream and start reading from the start (byte position 0).
STDMETHOD(SeekStream)(REFERENCE_TIME rtPosition) PURE;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
typedef enum TrackType
{
TypeVideo = 1,
TypeAudio = 2,
TypeComplex = 3,
TypeLogo = 0x10,
TypeSubtitle = 0x11,
TypeControl = 0x20
} TrackType;
#pragma pack(push, 1)
struct TrackElement
{
WORD Size; // Size of this structure
BYTE Type; // See TrackType
BOOL FlagDefault; // Set if the track is the default for its TrackType.
BOOL FlagForced; // Set if that track MUST be used during playback.
BOOL FlagLacing; // Set if the track may contain blocks using lacing.
UINT MinCache; // The minimum number of frames a player should be able to cache during playback.
UINT MaxCache; // The maximum cache size required to store referenced frames in and the current frame. 0 means no
// cache is needed.
CHAR Language[4]; // Specifies the language of the track, in the ISO-639-2 form. (end with '\0')
};
struct TrackExtendedInfoVideo
{
WORD Size; // Size of this structure
BOOL Interlaced; // Set if the video is interlaced.
UINT PixelWidth; // Width of the encoded video frames in pixels.
UINT PixelHeight; // Height of the encoded video frames in pixels.
UINT DisplayWidth; // Width of the video frames to display.
UINT DisplayHeight; // Height of the video frames to display.
BYTE DisplayUnit; // Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches).
BYTE AspectRatioType; // Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect
// ratio, 2: fixed).
};
struct TrackExtendedInfoAudio
{
WORD Size; // Size of this structure
FLOAT SamplingFreq; // Sampling frequency in Hz.
FLOAT OutputSamplingFrequency; // Real output sampling frequency in Hz (used for SBR techniques).
UINT Channels; // Numbers of channels in the track.
UINT BitDepth; // Bits per sample, mostly used for PCM.
};
#pragma pack(pop)
interface __declspec(uuid("03E98D51-DDE7-43aa-B70C-42EF84A3A23D")) ITrackInfo : public IUnknown
{
STDMETHOD_(UINT, GetTrackCount)() = 0;
// \param aTrackIdx the track index (from 0 to GetTrackCount()-1)
STDMETHOD_(BOOL, GetTrackInfo)(UINT aTrackIdx, struct TrackElement * pStructureToFill) = 0;
// Get an extended information struct relative to the track type
STDMETHOD_(BOOL, GetTrackExtendedInfo)(UINT aTrackIdx, void *pStructureToFill) = 0;
STDMETHOD_(BSTR, GetTrackCodecID)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecInfoURL)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecDownloadURL)(UINT aTrackIdx) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {4158A22B-6553-45D0-8069-24716F8FF171}
DEFINE_GUID(IID_ILAVAudioSettings, 0x4158a22b, 0x6553, 0x45d0, 0x80, 0x69, 0x24, 0x71, 0x6f, 0x8f, 0xf1, 0x71);
// {A668B8F2-BA87-4F63-9D41-768F7DE9C50E}
DEFINE_GUID(IID_ILAVAudioStatus, 0xa668b8f2, 0xba87, 0x4f63, 0x9d, 0x41, 0x76, 0x8f, 0x7d, 0xe9, 0xc5, 0xe);
// Codecs supported in the LAV Audio configuration
// Codecs not listed here cannot be turned off. You can request codecs to be added to this list, if you wish.
typedef enum LAVAudioCodec
{
Codec_AAC,
Codec_AC3,
Codec_EAC3,
Codec_DTS,
Codec_MP2,
Codec_MP3,
Codec_TRUEHD,
Codec_FLAC,
Codec_VORBIS,
Codec_LPCM,
Codec_PCM,
Codec_WAVPACK,
Codec_TTA,
Codec_WMA2,
Codec_WMAPRO,
Codec_Cook,
Codec_RealAudio,
Codec_WMALL,
Codec_ALAC,
Codec_Opus,
Codec_AMR,
Codec_Nellymoser,
Codec_MSPCM,
Codec_Truespeech,
Codec_TAK,
Codec_ATRAC,
Codec_AudioNB // Number of entries (do not use when dynamically linking)
} LAVAudioCodec;
// Bitstreaming Codecs supported in LAV Audio
typedef enum LAVBitstreamCodec
{
Bitstream_AC3,
Bitstream_EAC3,
Bitstream_TRUEHD,
Bitstream_DTS,
Bitstream_DTSHD,
Bitstream_NB // Number of entries (do not use when dynamically linking)
} LAVBitstreamCodec;
// Supported Sample Formats in LAV Audio
typedef enum LAVAudioSampleFormat
{
SampleFormat_None = -1,
SampleFormat_16,
SampleFormat_24,
SampleFormat_32,
SampleFormat_U8,
SampleFormat_FP32,
SampleFormat_Bitstream,
SampleFormat_NB // Number of entries (do not use when dynamically linking)
} LAVAudioSampleFormat;
typedef enum LAVAudioMixingMode
{
MatrixEncoding_None,
MatrixEncoding_Dolby,
MatrixEncoding_DPLII,
MatrixEncoding_NB
} LAVAudioMixingMode;
// LAV Audio configuration interface
interface __declspec(uuid("4158A22B-6553-45D0-8069-24716F8FF171")) ILAVAudioSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Audio without interfering with the users settings in the
// registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does not
// change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Audio is connected to other filters.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Dynamic Range Compression
// pbDRCEnabled: The state of DRC
// piDRCLevel: The DRC strength (0-100, 100 is maximum)
STDMETHOD(GetDRC)(BOOL * pbDRCEnabled, int *piDRCLevel) = 0;
STDMETHOD(SetDRC)(BOOL bDRCEnabled, int iDRCLevel) = 0;
// Configure which codecs are enabled
// If aCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetFormatConfiguration)(LAVAudioCodec aCodec) = 0;
STDMETHOD(SetFormatConfiguration)(LAVAudioCodec aCodec, BOOL bEnabled) = 0;
// Control Bitstreaming
// If bsCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetBitstreamConfig)(LAVBitstreamCodec bsCodec) = 0;
STDMETHOD(SetBitstreamConfig)(LAVBitstreamCodec bsCodec, BOOL bEnabled) = 0;
// Should "normal" DTS frames be encapsulated in DTS-HD frames when bitstreaming?
STDMETHOD_(BOOL, GetDTSHDFraming)() = 0;
STDMETHOD(SetDTSHDFraming)(BOOL bHDFraming) = 0;
// Control Auto A/V syncing
STDMETHOD_(BOOL, GetAutoAVSync)() = 0;
STDMETHOD(SetAutoAVSync)(BOOL bAutoSync) = 0;
// Convert all Channel Layouts to standard layouts
// Standard are: Mono, Stereo, 5.1, 6.1, 7.1
STDMETHOD_(BOOL, GetOutputStandardLayout)() = 0;
STDMETHOD(SetOutputStandardLayout)(BOOL bStdLayout) = 0;
// Expand Mono to Stereo by simply doubling the audio
STDMETHOD_(BOOL, GetExpandMono)() = 0;
STDMETHOD(SetExpandMono)(BOOL bExpandMono) = 0;
// Expand 6.1 to 7.1 by doubling the back center
STDMETHOD_(BOOL, GetExpand61)() = 0;
STDMETHOD(SetExpand61)(BOOL bExpand61) = 0;
// Allow Raw PCM and SPDIF encoded input
STDMETHOD_(BOOL, GetAllowRawSPDIFInput)() = 0;
STDMETHOD(SetAllowRawSPDIFInput)(BOOL bAllow) = 0;
// Configure which sample formats are enabled
// Note: SampleFormat_Bitstream cannot be controlled by this
STDMETHOD_(BOOL, GetSampleFormat)(LAVAudioSampleFormat format) = 0;
STDMETHOD(SetSampleFormat)(LAVAudioSampleFormat format, BOOL bEnabled) = 0;
// Configure a delay for the audio
STDMETHOD(GetAudioDelay)(BOOL * pbEnabled, int *pDelay) = 0;
STDMETHOD(SetAudioDelay)(BOOL bEnabled, int delay) = 0;
// Enable/Disable Mixing
STDMETHOD(SetMixingEnabled)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetMixingEnabled)() = 0;
// Control Mixing Layout
STDMETHOD(SetMixingLayout)(DWORD dwLayout) = 0;
STDMETHOD_(DWORD, GetMixingLayout)() = 0;
#define LAV_MIXING_FLAG_UNTOUCHED_STEREO 0x0001
#define LAV_MIXING_FLAG_NORMALIZE_MATRIX 0x0002
#define LAV_MIXING_FLAG_CLIP_PROTECTION 0x0004
// Set Mixing Flags
STDMETHOD(SetMixingFlags)(DWORD dwFlags) = 0;
STDMETHOD_(DWORD, GetMixingFlags)() = 0;
// Set Mixing Mode
STDMETHOD(SetMixingMode)(LAVAudioMixingMode mixingMode) = 0;
STDMETHOD_(LAVAudioMixingMode, GetMixingMode)() = 0;
// Set Mixing Levels
STDMETHOD(SetMixingLevels)(DWORD dwCenterLevel, DWORD dwSurroundLevel, DWORD dwLFELevel) = 0;
STDMETHOD(GetMixingLevels)(DWORD * dwCenterLevel, DWORD * dwSurroundLevel, DWORD * dwLFELevel) = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Toggle Dithering for sample format conversion
STDMETHOD(SetSampleConvertDithering)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetSampleConvertDithering)() = 0;
// Suppress sample format changes. This will allow channel count to increase, but not to reduce, instead adding
// empty channels This option is NOT persistent
STDMETHOD(SetSuppressFormatChanges)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetSuppressFormatChanges)() = 0;
// Use 5.1 legacy layout (using back channels instead of side)
STDMETHOD_(BOOL, GetOutput51LegacyLayout)() = 0;
STDMETHOD(SetOutput51LegacyLayout)(BOOL b51Legacy) = 0;
// Fallback to audio decoding if bitstreaming is not supported by the audio renderer/hardware
STDMETHOD_(BOOL, GetBitstreamingFallback)() = 0;
STDMETHOD(SetBitstreamingFallback)(BOOL bBitstreamingFallback) = 0;
};
// LAV Audio Status Interface
// Get the current playback stats
interface __declspec(uuid("A668B8F2-BA87-4F63-9D41-768F7DE9C50E")) ILAVAudioStatus : public IUnknown
{
// Check if the given sample format is supported by the current playback chain
STDMETHOD_(BOOL, IsSampleFormatSupported)(LAVAudioSampleFormat sfCheck) = 0;
// Get details about the current decoding format
STDMETHOD(GetDecodeDetails)
(LPCSTR * pCodec, LPCSTR * pDecodeFormat, int *pnChannels, int *pSampleRate, DWORD *pChannelMask) = 0;
// Get details about the current output format
STDMETHOD(GetOutputDetails)(LPCSTR * pOutputFormat, int *pnChannels, int *pSampleRate, DWORD *pChannelMask) = 0;
// Enable Volume measurements
STDMETHOD(EnableVolumeStats)() = 0;
// Disable Volume measurements
STDMETHOD(DisableVolumeStats)() = 0;
// Get Volume Average for the given channel
STDMETHOD(GetChannelVolumeAverage)(WORD nChannel, float *pfDb) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <Unknwn.h> // IUnknown and GUID Macros
// {774A919D-EA95-4A87-8A1E-F48ABE8499C7}
DEFINE_GUID(IID_ILAVFSettings, 0x774a919d, 0xea95, 0x4a87, 0x8a, 0x1e, 0xf4, 0x8a, 0xbe, 0x84, 0x99, 0xc7);
typedef enum LAVSubtitleMode
{
LAVSubtitleMode_NoSubs,
LAVSubtitleMode_ForcedOnly,
LAVSubtitleMode_Default,
LAVSubtitleMode_Advanced
} LAVSubtitleMode;
interface __declspec(uuid("774A919D-EA95-4A87-8A1E-F48ABE8499C7")) ILAVFSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Splitter without interfering with the users settings in
// the registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does
// not change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Splitter opens a file.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Retrieve the preferred languages as ISO 639-2 language codes, comma separated
// If the result is NULL, no language has been set
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetPreferredLanguages)(LPWSTR * ppLanguages) = 0;
// Set the preferred languages as ISO 639-2 language codes, comma separated
// To reset to no preferred language, pass NULL or the empty string
STDMETHOD(SetPreferredLanguages)(LPCWSTR pLanguages) = 0;
// Retrieve the preferred subtitle languages as ISO 639-2 language codes, comma separated
// If the result is NULL, no language has been set
// If no subtitle language is set, the main language preference is used.
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetPreferredSubtitleLanguages)(LPWSTR * ppLanguages) = 0;
// Set the preferred subtitle languages as ISO 639-2 language codes, comma separated
// To reset to no preferred language, pass NULL or the empty string
// If no subtitle language is set, the main language preference is used.
STDMETHOD(SetPreferredSubtitleLanguages)(LPCWSTR pLanguages) = 0;
// Get the current subtitle mode
// See enum for possible values
STDMETHOD_(LAVSubtitleMode, GetSubtitleMode)() = 0;
// Set the current subtitle mode
// See enum for possible values
STDMETHOD(SetSubtitleMode)(LAVSubtitleMode mode) = 0;
// Get the subtitle matching language flag
// TRUE = Only subtitles with a language in the preferred list will be used; FALSE = All subtitles will be used
// @deprecated - do not use anymore, deprecated and non-functional, replaced by advanced subtitle mode
STDMETHOD_(BOOL, GetSubtitleMatchingLanguage)() = 0;
// Set the subtitle matching language flag
// TRUE = Only subtitles with a language in the preferred list will be used; FALSE = All subtitles will be used
// @deprecated - do not use anymore, deprecated and non-functional, replaced by advanced subtitle mode
STDMETHOD(SetSubtitleMatchingLanguage)(BOOL dwMode) = 0;
// Control whether a special "Forced Subtitles" stream will be created for PGS subs
STDMETHOD_(BOOL, GetPGSForcedStream)() = 0;
// Control whether a special "Forced Subtitles" stream will be created for PGS subs
STDMETHOD(SetPGSForcedStream)(BOOL bFlag) = 0;
// Get the PGS forced subs config
// TRUE = only forced PGS frames will be shown, FALSE = all frames will be shown
STDMETHOD_(BOOL, GetPGSOnlyForced)() = 0;
// Set the PGS forced subs config
// TRUE = only forced PGS frames will be shown, FALSE = all frames will be shown
STDMETHOD(SetPGSOnlyForced)(BOOL bForced) = 0;
// Get the VC-1 Timestamp Processing mode
// 0 - No Timestamp Correction, 1 - Always Timestamp Correction, 2 - Auto (Correction for Decoders that need it)
STDMETHOD_(int, GetVC1TimestampMode)() = 0;
// Set the VC-1 Timestamp Processing mode
// 0 - No Timestamp Correction, 1 - Always Timestamp Correction, 2 - Auto (Correction for Decoders that need it)
STDMETHOD(SetVC1TimestampMode)(int iMode) = 0;
// Set whether substreams (AC3 in TrueHD, for example) should be shown as a separate stream
STDMETHOD(SetSubstreamsEnabled)(BOOL bSubStreams) = 0;
// Check whether substreams (AC3 in TrueHD, for example) should be shown as a separate stream
STDMETHOD_(BOOL, GetSubstreamsEnabled)() = 0;
// @deprecated - no longer required
STDMETHOD(SetVideoParsingEnabled)(BOOL bEnabled) = 0;
// @deprecated - no longer required
STDMETHOD_(BOOL, GetVideoParsingEnabled)() = 0;
// Set if LAV Splitter should try to fix broken HD-PVR streams
// @deprecated - no longer required
STDMETHOD(SetFixBrokenHDPVR)(BOOL bEnabled) = 0;
// Query if LAV Splitter should try to fix broken HD-PVR streams
// @deprecated - no longer required
STDMETHOD_(BOOL, GetFixBrokenHDPVR)() = 0;
// Control whether the given format is enabled
STDMETHOD_(HRESULT, SetFormatEnabled)(LPCSTR strFormat, BOOL bEnabled) = 0;
// Check if the given format is enabled
STDMETHOD_(BOOL, IsFormatEnabled)(LPCSTR strFormat) = 0;
// Set if LAV Splitter should always completely remove the filter connected to its Audio Pin when the audio stream
// is changed
STDMETHOD(SetStreamSwitchRemoveAudio)(BOOL bEnabled) = 0;
// Query if LAV Splitter should always completely remove the filter connected to its Audio Pin when the audio stream
// is changed
STDMETHOD_(BOOL, GetStreamSwitchRemoveAudio)() = 0;
// Advanced Subtitle configuration. Refer to the documentation for details.
// If no advanced config exists, will be NULL.
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetAdvancedSubtitleConfig)(LPWSTR * ppAdvancedConfig) = 0;
// Advanced Subtitle configuration. Refer to the documentation for details.
// To reset the config, pass NULL or the empty string.
// If no subtitle language is set, the main language preference is used.
STDMETHOD(SetAdvancedSubtitleConfig)(LPCWSTR pAdvancedConfig) = 0;
// Set if LAV Splitter should prefer audio streams for the hearing or visually impaired
STDMETHOD(SetUseAudioForHearingVisuallyImpaired)(BOOL bEnabled) = 0;
// Get if LAV Splitter should prefer audio streams for the hearing or visually impaired
STDMETHOD_(BOOL, GetUseAudioForHearingVisuallyImpaired)() = 0;
// Set the maximum queue size, in megabytes
STDMETHOD(SetMaxQueueMemSize)(DWORD dwMaxSize) = 0;
// Get the maximum queue size, in megabytes
STDMETHOD_(DWORD, GetMaxQueueMemSize)() = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
// Get Tray Icon
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Toggle whether higher quality audio streams are preferred
STDMETHOD(SetPreferHighQualityAudioStreams)(BOOL bEnabled) = 0;
// Toggle whether higher quality audio streams are preferred
STDMETHOD_(BOOL, GetPreferHighQualityAudioStreams)() = 0;
// Toggle whether Matroska Linked Segments should be loaded from other files
STDMETHOD(SetLoadMatroskaExternalSegments)(BOOL bEnabled) = 0;
// Get whether Matroska Linked Segments should be loaded from other files
STDMETHOD_(BOOL, GetLoadMatroskaExternalSegments)() = 0;
// Get the list of available formats
// Memory for the string array will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetFormats)(LPSTR * *formats, UINT * nFormats) = 0;
// Set the duration (in ms) of analysis for network streams (to find the streams and codec parameters)
STDMETHOD(SetNetworkStreamAnalysisDuration)(DWORD dwDuration) = 0;
// Get the duration (in ms) of analysis for network streams (to find the streams and codec parameters)
STDMETHOD_(DWORD, GetNetworkStreamAnalysisDuration)() = 0;
// Set the maximum queue size, in number of packets
STDMETHOD(SetMaxQueueSize)(DWORD dwMaxSize) = 0;
// Get the maximum queue size, in number of packets
STDMETHOD_(DWORD, GetMaxQueueSize)() = 0;
// Set if LAV Splitter should reselect subs based on given rules when audio stream is changed
STDMETHOD(SetStreamSwitchReselectSubtitles)(BOOL bEnabled) = 0;
// Query if LAV Splitter should reselect subs based on given rules when audio stream is changed
STDMETHOD_(BOOL, GetStreamSwitchReselectSubtitles)() = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F}
DEFINE_GUID(IID_ILAVVideoSettings, 0xfa40d6e9, 0x4d38, 0x4761, 0xad, 0xd2, 0x71, 0xa9, 0xec, 0x5f, 0xd3, 0x2f);
// {1CC2385F-36FA-41B1-9942-5024CE0235DC}
DEFINE_GUID(IID_ILAVVideoStatus, 0x1cc2385f, 0x36fa, 0x41b1, 0x99, 0x42, 0x50, 0x24, 0xce, 0x2, 0x35, 0xdc);
// Codecs supported in the LAV Video configuration
// Codecs not listed here cannot be turned off. You can request codecs to be added to this list, if you wish.
typedef enum LAVVideoCodec
{
Codec_H264,
Codec_VC1,
Codec_MPEG1,
Codec_MPEG2,
Codec_MPEG4,
Codec_MSMPEG4,
Codec_VP8,
Codec_WMV3,
Codec_WMV12,
Codec_MJPEG,
Codec_Theora,
Codec_FLV1,
Codec_VP6,
Codec_SVQ,
Codec_H261,
Codec_H263,
Codec_Indeo,
Codec_TSCC,
Codec_Fraps,
Codec_HuffYUV,
Codec_QTRle,
Codec_DV,
Codec_Bink,
Codec_Smacker,
Codec_RV12,
Codec_RV34,
Codec_Lagarith,
Codec_Cinepak,
Codec_Camstudio,
Codec_QPEG,
Codec_ZLIB,
Codec_QTRpza,
Codec_PNG,
Codec_MSRLE,
Codec_ProRes,
Codec_UtVideo,
Codec_Dirac,
Codec_DNxHD,
Codec_MSVideo1,
Codec_8BPS,
Codec_LOCO,
Codec_ZMBV,
Codec_VCR1,
Codec_Snow,
Codec_FFV1,
Codec_v210,
Codec_JPEG2000,
Codec_VMNC,
Codec_FLIC,
Codec_G2M,
Codec_ICOD,
Codec_THP,
Codec_HEVC,
Codec_VP9,
Codec_TrueMotion,
Codec_VP7,
Codec_H264MVC,
Codec_CineformHD,
Codec_MagicYUV,
Codec_AV1,
Codec_VideoNB // Number of entries (do not use when dynamically linking)
} LAVVideoCodec;
// Codecs with hardware acceleration
typedef enum LAVVideoHWCodec
{
HWCodec_H264 = Codec_H264,
HWCodec_VC1 = Codec_VC1,
HWCodec_MPEG2 = Codec_MPEG2,
HWCodec_MPEG4 = Codec_MPEG4,
HWCodec_MPEG2DVD,
HWCodec_HEVC,
HWCodec_VP9,
HWCodec_H264MVC,
HWCodec_AV1,
HWCodec_NB,
} LAVVideoHWCodec;
// Flags for HW Resolution support
#define LAVHWResFlag_SD 0x0001
#define LAVHWResFlag_HD 0x0002
#define LAVHWResFlag_UHD 0x0004
// Type of hardware accelerations
typedef enum LAVHWAccel
{
HWAccel_None,
HWAccel_CUDA,
HWAccel_QuickSync,
HWAccel_DXVA2,
HWAccel_DXVA2CopyBack = HWAccel_DXVA2,
HWAccel_DXVA2Native,
HWAccel_D3D11,
HWAccel_NB, // Number of HWAccels
} LAVHWAccel;
// Deinterlace algorithms offered by the hardware decoders
typedef enum LAVHWDeintModes
{
HWDeintMode_Weave,
HWDeintMode_BOB, // Deprecated
HWDeintMode_Hardware
} LAVHWDeintModes;
// Software deinterlacing algorithms
typedef enum LAVSWDeintModes
{
SWDeintMode_None,
SWDeintMode_YADIF,
SWDeintMode_W3FDIF_Simple,
SWDeintMode_W3FDIF_Complex,
SWDeintMode_BWDIF,
} LAVSWDeintModes;
// Deinterlacing processing mode
typedef enum LAVDeintMode
{
DeintMode_Auto,
DeintMode_Aggressive,
DeintMode_Force,
DeintMode_Disable
} LAVDeintMode;
// Type of deinterlacing to perform
// - FramePerField re-constructs one frame from every field, resulting in 50/60 fps.
// - FramePer2Field re-constructs one frame from every 2 fields, resulting in 25/30 fps.
// Note: Weave will always use FramePer2Field
typedef enum LAVDeintOutput
{
DeintOutput_FramePerField,
DeintOutput_FramePer2Field
} LAVDeintOutput;
// Control the field order of the deinterlacer
typedef enum LAVDeintFieldOrder
{
DeintFieldOrder_Auto,
DeintFieldOrder_TopFieldFirst,
DeintFieldOrder_BottomFieldFirst,
} LAVDeintFieldOrder;
// Supported output pixel formats
typedef enum LAVOutPixFmts
{
LAVOutPixFmt_None = -1,
LAVOutPixFmt_YV12, // 4:2:0, 8bit, planar
LAVOutPixFmt_NV12, // 4:2:0, 8bit, Y planar, U/V packed
LAVOutPixFmt_YUY2, // 4:2:2, 8bit, packed
LAVOutPixFmt_UYVY, // 4:2:2, 8bit, packed
LAVOutPixFmt_AYUV, // 4:4:4, 8bit, packed
LAVOutPixFmt_P010, // 4:2:0, 10bit, Y planar, U/V packed
LAVOutPixFmt_P210, // 4:2:2, 10bit, Y planar, U/V packed
LAVOutPixFmt_Y410, // 4:4:4, 10bit, packed
LAVOutPixFmt_P016, // 4:2:0, 16bit, Y planar, U/V packed
LAVOutPixFmt_P216, // 4:2:2, 16bit, Y planar, U/V packed
LAVOutPixFmt_Y416, // 4:4:4, 16bit, packed
LAVOutPixFmt_RGB32, // 32-bit RGB (BGRA)
LAVOutPixFmt_RGB24, // 24-bit RGB (BGR)
LAVOutPixFmt_v210, // 4:2:2, 10bit, packed
LAVOutPixFmt_v410, // 4:4:4, 10bit, packed
LAVOutPixFmt_YV16, // 4:2:2, 8-bit, planar
LAVOutPixFmt_YV24, // 4:4:4, 8-bit, planar
LAVOutPixFmt_RGB48, // 48-bit RGB (16-bit per pixel, BGR)
LAVOutPixFmt_NB // Number of formats
} LAVOutPixFmts;
typedef enum LAVDitherMode
{
LAVDither_Ordered,
LAVDither_Random
} LAVDitherMode;
// LAV Video configuration interface
interface __declspec(uuid("FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F")) ILAVVideoSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Video without interfering with the users settings in the
// registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does not
// change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Video is connected to other filters.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Configure which codecs are enabled
// If vCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetFormatConfiguration)(LAVVideoCodec vCodec) = 0;
STDMETHOD(SetFormatConfiguration)(LAVVideoCodec vCodec, BOOL bEnabled) = 0;
// Set the number of threads to use for Multi-Threaded decoding (where available)
// 0 = Auto Detect (based on number of CPU cores)
// 1 = 1 Thread -- No Multi-Threading
// >1 = Multi-Threading with the specified number of threads
STDMETHOD(SetNumThreads)(DWORD dwNum) = 0;
// Get the number of threads to use for Multi-Threaded decoding (where available)
// 0 = Auto Detect (based on number of CPU cores)
// 1 = 1 Thread -- No Multi-Threading
// >1 = Multi-Threading with the specified number of threads
STDMETHOD_(DWORD, GetNumThreads)() = 0;
// Set whether the aspect ratio encoded in the stream should be forwarded to the renderer,
// or the aspect ratio specified by the source filter should be kept.
// 0 = AR from the source filter
// 1 = AR from the Stream
// 2 = AR from stream if source is not reliable
STDMETHOD(SetStreamAR)(DWORD bStreamAR) = 0;
// Get whether the aspect ratio encoded in the stream should be forwarded to the renderer,
// or the aspect ratio specified by the source filter should be kept.
// 0 = AR from the source filter
// 1 = AR from the Stream
// 2 = AR from stream if source is not reliable
STDMETHOD_(DWORD, GetStreamAR)() = 0;
// Configure which pixel formats are enabled for output
// If pixFmt is invalid, Get will return FALSE and Set E_FAIL
STDMETHOD_(BOOL, GetPixelFormat)(LAVOutPixFmts pixFmt) = 0;
STDMETHOD(SetPixelFormat)(LAVOutPixFmts pixFmt, BOOL bEnabled) = 0;
// Set the RGB output range for the YUV->RGB conversion
// 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
STDMETHOD(SetRGBOutputRange)(DWORD dwRange) = 0;
// Get the RGB output range for the YUV->RGB conversion
// 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
STDMETHOD_(DWORD, GetRGBOutputRange)() = 0;
// Set the deinterlacing field order of the hardware decoder
STDMETHOD(SetDeintFieldOrder)(LAVDeintFieldOrder fieldOrder) = 0;
// get the deinterlacing field order of the hardware decoder
STDMETHOD_(LAVDeintFieldOrder, GetDeintFieldOrder)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintAggressive)(BOOL bAggressive) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintAggressive)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintForce)(BOOL bForce) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintForce)() = 0;
// Check if the specified HWAccel is supported
// Note: This will usually only check the availability of the required libraries (ie. for NVIDIA if a recent enough
// NVIDIA driver is installed) and not check actual hardware support Returns: 0 = Unsupported, 1 = Supported, 2 =
// Currently running
STDMETHOD_(DWORD, CheckHWAccelSupport)(LAVHWAccel hwAccel) = 0;
// Set which HW Accel method is used
// See LAVHWAccel for options.
STDMETHOD(SetHWAccel)(LAVHWAccel hwAccel) = 0;
// Get which HW Accel method is active
STDMETHOD_(LAVHWAccel, GetHWAccel)() = 0;
// Set which codecs should use HW Acceleration
STDMETHOD(SetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec, BOOL bEnabled) = 0;
// Get which codecs should use HW Acceleration
STDMETHOD_(BOOL, GetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec) = 0;
// Set the deinterlacing mode used by the hardware decoder
STDMETHOD(SetHWAccelDeintMode)(LAVHWDeintModes deintMode) = 0;
// Get the deinterlacing mode used by the hardware decoder
STDMETHOD_(LAVHWDeintModes, GetHWAccelDeintMode)() = 0;
// Set the deinterlacing output for the hardware decoder
STDMETHOD(SetHWAccelDeintOutput)(LAVDeintOutput deintOutput) = 0;
// Get the deinterlacing output for the hardware decoder
STDMETHOD_(LAVDeintOutput, GetHWAccelDeintOutput)() = 0;
// deprecated. HQ mode is only supported by NVIDIA CUVID/NVDEC and officially deprecated by NVIDIA
STDMETHOD(SetHWAccelDeintHQ)(BOOL bHQ) = 0;
STDMETHOD_(BOOL, GetHWAccelDeintHQ)() = 0;
// Set the software deinterlacing mode used
STDMETHOD(SetSWDeintMode)(LAVSWDeintModes deintMode) = 0;
// Get the software deinterlacing mode used
STDMETHOD_(LAVSWDeintModes, GetSWDeintMode)() = 0;
// Set the software deinterlacing output
STDMETHOD(SetSWDeintOutput)(LAVDeintOutput deintOutput) = 0;
// Get the software deinterlacing output
STDMETHOD_(LAVDeintOutput, GetSWDeintOutput)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintTreatAsProgressive)(BOOL bEnabled) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintTreatAsProgressive)() = 0;
// Set the dithering mode used
STDMETHOD(SetDitherMode)(LAVDitherMode ditherMode) = 0;
// Get the dithering mode used
STDMETHOD_(LAVDitherMode, GetDitherMode)() = 0;
// Set if the MS WMV9 DMO Decoder should be used for VC-1/WMV3
STDMETHOD(SetUseMSWMV9Decoder)(BOOL bEnabled) = 0;
// Get if the MS WMV9 DMO Decoder should be used for VC-1/WMV3
STDMETHOD_(BOOL, GetUseMSWMV9Decoder)() = 0;
// Set if DVD Video support is enabled
STDMETHOD(SetDVDVideoSupport)(BOOL bEnabled) = 0;
// Get if DVD Video support is enabled
STDMETHOD_(BOOL, GetDVDVideoSupport)() = 0;
// Set the HW Accel Resolution Flags
// flags: bitmask of LAVHWResFlag flags
STDMETHOD(SetHWAccelResolutionFlags)(DWORD dwResFlags) = 0;
// Get the HW Accel Resolution Flags
// flags: bitmask of LAVHWResFlag flags
STDMETHOD_(DWORD, GetHWAccelResolutionFlags)() = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
// Get Tray Icon
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Set the Deint Mode
STDMETHOD(SetDeinterlacingMode)(LAVDeintMode deintMode) = 0;
// Get the Deint Mode
STDMETHOD_(LAVDeintMode, GetDeinterlacingMode)() = 0;
// Set the index of the GPU to be used for hardware decoding
// Only supported for CUVID and DXVA2 copy-back. If the device is not valid, it'll fallback to auto-detection
// Must be called before an input is connected to LAV Video, and the setting is non-persistent
// NOTE: For CUVID, the index defines the index of the CUDA capable device, while for DXVA2, the list includes all
// D3D9 devices
STDMETHOD(SetGPUDeviceIndex)(DWORD dwDevice) = 0;
// Get the number of available devices for the specified HWAccel
STDMETHOD_(DWORD, GetHWAccelNumDevices)(LAVHWAccel hwAccel) = 0;
// Get a list of available HWAccel devices for the specified HWAccel
STDMETHOD(GetHWAccelDeviceInfo)
(LAVHWAccel hwAccel, DWORD dwIndex, BSTR * pstrDeviceName, DWORD * pdwDeviceIdentifier) = 0;
// Get/Set the device for a specified HWAccel
// In contrast to SetGPUDeviceIndex, this setting is hwaccel-specific and persistent
// dwDeviceIdentifier is an optional parameter that identifies the selected device (ie. its device id), set to 0 if
// not used
#define LAVHWACCEL_DEVICE_DEFAULT ((DWORD)-1)
STDMETHOD_(DWORD, GetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD * pdwDeviceIdentifier) = 0;
STDMETHOD(SetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD dwIndex, DWORD dwDeviceIdentifier) = 0;
// Temporary Override for players to disable H.264 MVC decoding
// This is not a permanent setting and not saved, but can be used by players to offer a "Play in 2D" option, or
// similar. A setting of FALSE disable MVC decoding temporarily Note that the override cannot force-enable the
// option if its turned off through SetFormatConfiguration
STDMETHOD(SetH264MVCDecodingOverride)(BOOL bEnabled) = 0;
// Enable the creation of the Closed Caption output pin
STDMETHOD(SetEnableCCOutputPin)(BOOL bEnabled) = 0;
};
// LAV Video status interface
interface __declspec(uuid("1CC2385F-36FA-41B1-9942-5024CE0235DC")) ILAVVideoStatus : public IUnknown
{
// Get the name of the active decoder (can return NULL if none is active)
STDMETHOD_(LPCWSTR, GetActiveDecoderName)() = 0;
// Get the name of the currently active hwaccel device
STDMETHOD(GetHWAccelActiveDevice)(BSTR * pstrDeviceName) = 0;
};
This directory contains header files of non-standard Interfaces that LAV Filters support.
---------------------------------------------------------------------------------------------
----------------------------------------------
IKeyFrameInfo - implemented by LAV Splitter
---------------------------------------------
IKeyFrameInfo allows players to query the position of keyframes, so they can redirect seeking
requests to those positions for very smooth seek events. Only fully supported on MKV files.
----------------------------------------------
ITrackInfo - implemented by LAV Splitter
---------------------------------------------
ITrackInfo is an interface to obtain additional information about the streams in a file.
The order to query the streams is the same as returned by IAMStreamSelect::Info
----------------------------------------------
IGraphRebuildDelegate
---------------------------------------------
IGraphRebuildDelegate is not an interface implemented by LAV Splitter itself.
It is designed to offer the ability to take over the graph-building process from the player's side.
It only exports one function which LAV Splitter will call when a stream change happens on the user's requests,
and then the player can take care of the graph changes itself instead of relying on LAV Splitter to do it.
To use IGraphRebuildDelegate, the player needs to implement it, and share the implementing class with LAV Splitter
through the "IObjectWithSite" interface, which is implemented by LAV Splitter.
----------------------------------------------
LAVSplitterSettings / LAVAudioSettings
----------------------------------------------
These interfaces are used to configure LAV programmatically, so the player can do configuration changes.
cd /d "%~dp0"
regsvr32.exe LAVAudio.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe LAVSplitter.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe LAVVideo.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVAudio.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVSplitter.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVVideo.ax
\ No newline at end of file
LAV DirectShow Filters Changelog
===================================
0.77.2 - 2023/03/08
LAV Splitter
- NEW: Added identification for spatial/immersive audio extensions (Atmos, DTS:X)
- Changed: More reasonable rounding for odd aspect ratios, avoiding issues with some video pipelines
- Fixed: Improved compatibility with some FTP servers
LAV Audio
- Fixed: Restored the default channel layouts for 5.1 and 7.1 to the correct layout (accidentally changed in 0.77, causing some playback issues)
- Fixed: Some TrueHD files would not decode correctly
- Fixed: Clipping protection did not engage when using Integer output
0.77.1 - 2022/11/15
LAV Splitter
- Fixed: More MP4 keyframe information fixes
0.77.0 - 2022/11/10
LAV Splitter
- Fixed: Improved handling of multichannel PCM channel assignments
- Fixed: MP4 Keyframe information could be wrong
LAV Audio
- NEW: Support for audio with more then 8 channel, including automatic downmixing if required
0.76.1 - 2022/02/28
LAV Splitter
- Changed: When requesting a HTTP URL, the URL itself is send as a referrer to increase compatibility
- Fixed: The priority of "Default" subtitle tracks in MKV files was wrong when a forced track was present
LAV Video
- Changed: Improved color reporting for DVD menus/subtitles
- Fixed: D3D11 surface clearing did not work properly on Intel GPUs
0.76.0 - 2022/01/22
LAV Splitter
- NEW: Added an option to re-evaluate subtitle stream selection when the audio language changes
- NEW: Improved advanced subtitle selection syntax with negated flags (positive and negative flags can now be combined for more flexible selection)
- Changed: Improved variant/stream selection in DASH and HLS streams
- Changed: Video streams with the highest bitrate are preferred (if equal resolution)
LAV Video
- NEW: Support for passing DoVi metadata to video renderers
- NEW: BobWeaver (BWDIF) software deinterlacer (a blend of YADIF and Weston, focusing on their individual strengths)
- NEW: Support for FIC screen capture video
- Changed: D3D11 video surfaces are flushed to black before decoding, avoiding green artifacts
- Changed: D3D11 devices are created up to feature level 12.1
LAV Audio
- Fixed: TrueHD bitstreaming could result in A/V sync issues or drop-outs
- Removed: Support for the external DTS decoder (dtsdecoderdll.dll) has been removed
0.75.1 - 2021/06/21
LAV Splitter
- Changed: AV1 files with no extradata will now generate a format header with stream information for decoders to use
- Fixed: Improved stream selection when multiple "default" video tracks are present
LAV Video
- Changed: Updated dav1d for significant improvements in AV1 10-bit decoding performance
- Changed: AV1 hardware decoding will more reliably engage when provided with additional stream information from the demuxer
LAV Audio
- Fixed: Opus decoding had audible artifacts in some files in 0.75
0.75.0 - 2021/03/30
LAV Splitter
- NEW: Support for DASH streaming
- NEW: WebVTT support in Matroska/WebM
- Changed: Improved Font support from Matroska files
- Fixed: Large queue size limits could result in the wrong limit being applied
- Fixed: Resolved a memory leak in Matroska demuxing
- Fixed: Avoid selecting a stream with only a single video frame in MP4 files, which is often a cover art
- Fixed: Seeking in Matroska files with only audio cue points did not function
- Fixed: Seeking to the beginning of certain HLS streams did not work properly
- Fixed: Duration information in Matroska files is more reliable
LAV Video
- NEW: AV1 DXVA2/D3D11 hardware decoding support
- NEW: ProRes 4444 XQ support
- Faster: Updated dav1d decoder and improved thread configuration for significantly improved AV1 decoding speed
- Fixed: Added a workaround for VP9 hardware decoding on AMD video cards
- Fixed: H.264 streams exceeding the Level 5.1 DPB limit will no longer be hardware decoded
- Fixed: Improved handling of missing reference frames in H.264 streams with hardware decoding
- Fixed: HEVC streams encoding 8-bit video in a Main10 profile can be properly hardware decoded
- Deprecated: NVIDIA CUVID and Intel QuickSync have been deprecated for future removal/replacement
LAV Audio
- Fixed: Resolved an issue with glitching TrueHD bitstreaming on seamless-branching titles
- Fixed: Resolved a compatibility issue with some playback applications
- Deprecated: Support for the binary DTS decoder (dtsdecoderdll.dll) has been deprecated for future removal
0.74.1 - 2019/03/19
LAV Video
- Fixed: VP9 video could produce wrong timestamps, resulting in a black screen or other playback disruptions
- Fixed: Decoding VP9 from a non-keyframe (ie. after a seek, or badly cut file) would not always recover properly once a keyframe was encountered
0.74.0 - 2019/03/16
LAV Splitter
- Changed: Using GnuTLS for HTTPS and other TLS protocols, improving performance and compatibility with a lot of web streaming services (ie. YouTube Live Streams through youtube-dl, and more)
- Fixed: Keyframes in MP4 files were being reported with a slightly offset timestamp, resulting in slow keyframe seeking
- Fixed: Subtitles that stretch over chapter boundaries could be lost in Ordered Chapter MKV files
- Fixed: Fonts embedded in MKVs without a proper mimetype were not being imported (now it checks the file extensions for .ttf/.otf as well)
LAV Video
- NEW: Initial support for parsing HDR10+ (SMPTE ST 2094-40) metadata, and passing it to the video renderer
- NEW: Using the dav1d AV1 decoder for significantly improved AV1 decoding performance
- Changed: Re-enabled experimental hardware acceleration for H.264 MVC 3D decoding on Intel GPUs, disabled by default
- Changed: Updated Intel MediaSDK dispatchers to the latest Media SDK, fixing compatibility with newer runtimes in the Intel DCH drivers
- Changed: Improved support for additional UtVideo subtypes
LAV Audio
- Changed: Added an option to disable the PCM fallback when bitstreaming is requested
- Fixed: Further improvements to TrueHD Bitstreaming, resolving glitching on more new titles (particularly seamless branching titles)
- Fixed: Automatic fallback from bitstreaming to PCM could crash in some situations
0.73.1 - 2018/10/11
LAV Video
- Fixed: Container-provided color information will only overwrite video bitstream color information if its set and valid
LAV Audio
- Fixed: Certain multi-channel AAC streams did not decode in 0.73
0.73.0 - 2018/10/05
LAV Splitter
- Changed: Export the description of cover art and attachments for use by players
- Fixed: Properly marked the packet allocator as providing read-only packets, to avoid crashes with in-place transform filters
LAV Video
- NEW: Support for AV1 decoding using libaom
- Changed: Enabled VP9 hardware acceleration by default
- Fixed: The aspect ratio of certain WMV/VC-1 files was not being properly respected in the WMV9 MFT decoder
0.72.0 - 2018/06/19
LAV Video
- Changed: Enabled CineformHD decoding by default, since the decoder has much improved
- Fixed: Decoding Matroska files with Linked Segments which used old x264 4:4:4 encodes could result in corruption
LAV Audio
- NEW: Blu-ray Dolby Digital Plus 7.1 decoding and bitstreaming support
- NEW: LAV Audio will fallback to audio decoding if bitstreaming is not supported by the audio renderer/hardware
- Fixed: DTS-HD HRA bitstreaming did not work properly with many A/V receivers
- Fixed: TrueHD bitstreaming could result in drop-outs on high bitrate TrueHD+Atmos streams
0.71.0 - 2018/02/15
General
- LAV Filters now requires Windows Vista or newer, Windows XP is no longer supported
LAV Splitter
- NEW: Preliminary support for UHD Blu-ray parsing
LAV Video
- NEW: D3D11 hardware accelerated decoding (native mode with madVR, Copy-Back otherwise)
- Fixed: HDR metadata was not properly communicated to madVR in DXVA2-Native mode
- Fixed: Anamorphic WMV9/VC-1 videos were not being played back with the correct aspect ratio in all cases
- Fixed: Changing certain settings while playback was paused could result in a deadlock
- Fixed: Playing severely corrupted HEVC streams with hardware decoding could result in playback failing entirely, instead of skipping over the corruption
LAV Audio
- NEW: Basic support for AAC 960 streams (common in DVB radio streams)
0.70.2 - 2017/07/06
LAV Video
- Fixed: DXVA2 decoding could fail in 0.70 after a dynamic media type change
0.70.1 - 2017/07/01
LAV Video
- NEW: DXVA2-CopyBack uses D3D9Ex to allow headless operation
- Changed: Increased the maximum number of decode threads to 32
- Changed: Rebalanced the "Auto" thread strategy to use the exact number of available CPU cores, instead of 1.5x the cores
- Fixed: Certain H264 streams could crash in 0.70 due to lack of buffer padding
0.70.0 - 2017/06/15
General
- Official LAV Filters builds require a SSE2 capable CPU
LAV Splitter
- Fixed: Certain MP4/MOV files didn't play or seek correctly in recent versions of LAV Splitter
- Fixed: HEVC in MP4 without PTS timestamp is being signaled appropriately
- Fixed: Closing RTSP streams did not properly call the TEARDOWN function
LAV Video
- NEW: CUVID support for VP9 8/10-bit and HEVC 10/12-bit decoding
- NEW: DXVA2 support for VP9 10-bit decoding
- Changed: Simplified the internal dataflow to reduce overhead and improve performance
- Changed: Enabled P010 output to EVR on Windows 10 Creators Update
- Fixed: Y416 output was incorrect (required by madVR 0.91.8 and newer)
- Fixed: Parsing H.264 MVC SEI NALs could fail in some cases
- Fixed: CUVID decoding could deinterlace progressive streams under certain circumstances, degrading the quality
LAV Audio
- Fixed: LATM AAC streams with Program Config Elements (PCE) (common in DVB-T2 broadcast) played with audible distortions
- Fixed: Very short PCM audio streams didn't play properly
0.69.0 - 2016/12/11
LAV Splitter
- NEW: Support for extracting HDR metadata from YouTube HDR VP9 streams
- Fixed: Reading MKV files could crash when encountering tags for unknown or disabled streams
LAV Video
- NEW: Support for 10-bit UtVideo
- NEW: MagicYUV decoding support
- NEW: Experimental support for CineformHD decoding
- Fixed: Converting 12-bit 4:4:4 YCbCr to RGB32 would result in a garbled image
- Fixed: Decoding certain H.264 streams could drop a few frames at the start of playback
LAV Audio
- NEW: DTS Express (LBR) decoding support
0.68.1 - 2016/05/05
LAV Splitter
- NEW: Support for reading metadata tags from MKV files (including the "3d-plane" MVC 3D tag from MakeMKV 1.9.10 and newer)
- Fixed: Improved handling of QuickTime codecs in MKV files
- Fixed: S302M audio streams with non-pcm content did not work anymore (requires an external decoder)
LAV Video
- Changed: Flags for BT.2020 are exported in DXVA2_ExtendedFormat (previously only reported to madVR, since the Windows SDK did not specify them)
- Changed: Prevent connections to the "AVI Decompressor" filter which could result in a broken image or crashes otherwise
- Fixed: Some progressive files could report the wrong FPS when software deinterlacing was turned on
- Fixed: MPEG-2 streams using "intra refresh" did not decode properly
LAV Audio
- Fixed: Decoding MPEG Audio streams from the Microsoft MPEG-1 Splitter could result in playback starting with an audible glitch
0.68.0 - 2016/03/08
LAV Splitter
- NEW: H.264 MVC 3D demuxing from MKV 3D, Blu-ray discs and Blu-ray SSIF files
- Fixed: The bitdepth of DTS-HD MA streams is reported properly in the stream information
LAV Video
- NEW: H.264 MVC 3D decoding (requires madVR 0.90 or newer)
- NEW: HEVC HDR streams export the HDR metadata to the video renderer (requires madVR 0.89.18 or newer)
- NEW: VP9 DXVA2 Hardware Acceleration
- NEW: Weston Three Field Deinterlacing filter (w3fdif)
- NEW: Ability to choose which GPU is used for DXVA2-CopyBack decoding
- Changed: Removed the CUVID HQ processing option, it is now automatically used when appropriate
- Fixed: CUVID would crash when playing certain HEVC files
- Fixed: Some pixel format conversions were much slower than expected
- Fixed: Pixel Format changes mid-stream were not re-negotiated with the renderer in all cases
- Fixed: Changes in the framerate due to software deinterlacing are properly reflected in the media type
LAV Audio
- Fixed: Increased PCM buffering to avoid stuttering with TrueHD on some audio devices
0.67.0 - 2015/11/15
LAV Splitter
- NEW: Support for HTTPS URLs
- NEW: Automatic selection of the highest quality variant in HLS streams
- Changed: Reverted back to the old ASF demuxer
- Changed: Backported ASF seeking improvements to the old ASF demuxer
- Fixed: ASS in AVI did not work in recent versions
- Fixed: RTP/RTSP did not work properly in 0.66
LAV Video
- NEW: Improved DVD subtitle and menu drawing with madVR (support for madVRs subtitle repositioning and lower latency)
- Changed: HEVC and 4K HWAccel is enabled by default
- Changed: Enabled DXVA2-CB Direct Mode with YV12 output on 8-bit sources
- Fixed: DVD menus could show a black screen instead of the menu in some situations
LAV Audio
- Fixed: Improved clipping behavior in badly mastered DTS-HD tracks
0.66.0 - 2015/09/22
LAV Splitter
- NEW: Added options to increase the queue size for increased buffering
- Changed: Switched ASF/WMV demuxing to a new demuxer from Libav
- Fixed: Improved seeking with MPEG-TS files which contain teletext streams
LAV Video
- NEW: Support for DXVA2-Native decoding of HEVC 10-bit with EVR on supported GPUs
- Changed: 4K Video Decoding on AMD graphics card is now enabled (needs recent drivers to work properly)
- Changed: DXVA2-CB decoding uses less memory on NVIDIA graphics cards
- Fixed: H264 DXVA2 decoding failed when no SPS/PPS was available in the media type
- Fixed: Conversion of RGB48 to RGB32/24 did not properly use dithering
- Fixed: Improved handling of a few DVD menu quirks
- Fixed: Decoding 10-bit video with EVR could result in a black screen
LAV Audio
- Changed: 5.1 audio favors the "Side" 5.1 layout, which conforms to modern surround standards
0.65.0 - 2015/04/21
LAV Splitter
- NEW: Support for MKV subtitle Cues to show subtitles immediately after a seek
- NEW: Attachments and embedded cover art images are exported through the IDSMResourceBag interface
- Fixed: Improved demuxing of HEVC in MPEG-TS and increased the reliability of the SPS/PPS/VPS extraction
- Fixed: Demuxing Blu-rays/MPEG-TS where the first stream was not a video stream could result in broken timestamps
- Fixed: Seeking in MKVs which are currently being written is more reliable
LAV Video
- Fixed: Improved HEVC DXVA2 decoding on a few samples
- Fixed: Playback of VFR MPEG-4 in AVI had wrong timestamps in 0.64
- Fixed: Improved handling of DVD subtitles without timestamps
LAV Audio:
- NEW: Native DTS-HD decoding using libdcadec
- Changed: 5.1 audio prefers the speaker mask with side channels, to match recent specifications
0.64.0 - 2015/02/13
General
- NEW: Individual LAV Filters can now be blacklisted through the registry by creating a key with the executable name in HKCU\Software\LAV\<Filter>\Blacklist
LAV Splitter
- NEW: Support for RTMP using rtmpdump-style parameter syntax
- NEW: Support for Opus-in-TS
- Fixed: The language reported for audio/subtitle streams on some Blu-rays could be wrong
LAV Video
- NEW: HEVC Main10 decoding in DXVA2 Copy-Back mode
- Faster: DXVA2 Copy-Back in direct output mode uses up to 50% less CPU and performance is improved accordingly
- Fixed: H.264 streams with only DTS timestamps would play out of sync with DXVA2
- Fixed: DXVA2 could crash on some MPEG-2 streams
- Fixed: Improved compatibility with a few HEVC streams when using DXVA2
0.63.0 - 2014/10/03
LAV Splitter
- NEW: Support for playing AES encrypted HLS streams
- NEW: Advanced Subtitle selection allows selecting subtitles by a string match on the stream title
- NEW: Support for rtspu, rtspm, rtspt and rtsph URLs to force the RTSP transport protocol
- NEW: Animated GIF image support
- Fixed: Improved timestamp handling of badly muxed/corrupted H.264 streams
- Fixed: 4K ProRes streams in MKV didn't play reliably
- Fixed: Some HEVC streams in MKV/MP4 didn't play properly
- Fixed: VobSubs in MP4 didn't properly export their color palette
- Fixed: Streaming MP3s through the Microsoft URL filter could result in the last audio frame to be partially repeated
- Fixed: The duration of MP3 files would be wrong if it contained long IDv3 tags
- Fixed: TrueHD streams with an Dolby Atmos sub-stream were not demuxed properly
LAV Video
- NEW: Experimental support for CUVID and DXVA2 HEVC acceleration
- Faster: HEVC decoding is up to 100% faster
- Fixed: DVD subtitle rendering could crash in 64-bit builds
LAV Audio
- Fixed: TrueHD streams with an Dolby Atmos sub-stream did not decode
0.62.0 - 2014/06/12
LAV Splitter
- Fixed: The filtered Forced Subtitles stream did not properly send all related subtitle data in some cases
LAV Video
- NEW: Implemented a WMV9 MFT decoder to replace the old DMO decoder for VC-1/WMV3 on Windows 7 and above
- NEW: Support for VP7 video
- Fixed: Multi-threaded video decoding could result in a handle leak on some systems
- Fixed: Video processing was slow on Windows XP due to inefficient memcpy use
- Fixed: DVD subtitles could overlap on some discs
LAV Audio
- Fixed: Dynamic format switching to an audio stream with a different sample rate did not work in some cases
0.61.2 - 2014/04/08
General
- Installer: The installer does now backup DirectShow registry settings before overwriting them, allowing uninstall to restore them
LAV Splitter
- NEW: Support for ProRes in MKV
- Fixed: Opening AviSynth scripts with LAV Splitter which used DirectShowSource to load LAV Splitter again caused a deadlock
- Fixed: Audio-only AviSynth scripts did not show a duration.
- Fixed: Cue Sheets with directives with empty parameters could cause a crash
LAV Video
- Fixed: AVC1 video streams without SPS/PPS in the configuration record did not decode properly
- Fixed: Decoding H.264 streams with a resolution change using the DXVA2 Copy-Back decoder could crash
- Fixed: YUV->RGB conversion produced the wrong output for the last line of odd-height 4:2:2 or 4:4:4 files
LAV Audio
- Changed: LAV Audio offers more alternate output configurations to the audio renderer if the audio renderer refuses our preferred format.
- Fixed: Decoding AC3 audio with corrupted audio frames could cause unnecessary format changes to occur and disrupt playback
- Fixed: Decoding DTS audio on a CPU without SSE2 support could crash on some streams
0.61.1 - 2014/03/07
LAV Splitter
- NEW: Support for opening "icyx://" stream URLs
- Fixed: Opening of some Blu-ray discs would take several minutes and could hang the player.
LAV Video
- Fixed: Aggressive Deinterlacing is no longer applied to soft-telecined content, which caused severe playback issues.
0.61.0 - 2014/03/04
LAV Splitter
- NEW: Support for "demuxing" AviSynth scripts (requires AviSynth, 2.6 recommended)
- NEW: Support for reading ICY stream metadata from ShoutCast streams
- Fixed: The duration of DVB MPEG-TS files is being detected more reliably
- Fixed: The ITrackInfo interface was not available in the last few versions
- Fixed: The duration of certain Ogg Vorbis streams was wrong
- Changed: DTS-HD audio tracks are now exposed using the official DTS-HD media type, in addition to the old DTS type
- Workaround: Block WMP/WMC from always overwriting the initial track selection
LAV Video
- NEW: Support for Duck TrueMotion 1/2
- NEW: Support for BT.2020 in YCbCr -> RGB conversions
- Fixed: Format conversion could cause out of memory errors when converting high-resolution videos
- Fixed: The decoder could crash if DXVA2 decoding failed and the software decoder is unavailable
- Fixed: Reduced binary bloat caused by the YCbCr -> RGB converter, reducing binary size to nearly half
- Fixed: Playback of RV30/RV40 was not smooth in 0.60
- Fixed: Video corruption when using DXVA2 on Intel GPUs when decoding certain VC-1 or MPEG-2 clips
- Fixed: Decoding WMV3 Complex profile automatically falls back to software, since hardware decoding is unsupported.
- Faster: DXVA2 Copy-Back decoding on Intel GPUs is significantly faster
- Changed: If the wmv9dmo decoder is unavailable, the FFmpeg decoder is automatically used instead
- Changed: Updated QuickSync decoder to the latest version, fixes a few timestamp issues.
- Changed: Relaxed the resolution checks for H.264 decoding on AMD GPUs, allowing files with 2K resolutions to be decoded (ie. 2048x1280, etc.)
LAV Audio
- NEW: Support for ATRAC3+
- Fixed: Decoding AC3 audio could produce glitches in playback due to too aggressive error checking.
0.60.1 - 2014/01/14
LAV Splitter
- Fixed a crash when opening MPEG-2 files with Stereo3D Metadata
- Improved the format of the chapter names created from embedded cue sheets
- Fixed an incompatibility in the IPropertyBag metadata interface with a few players
0.60.0 - 2014/01/12
LAV Splitter
- Improved playback of a few Blu-ray discs, avoids a hiccup at clip change
- Support for reading embedded Cue Sheets from audio files as chapters
- Added support for reporting the stream bitrate through IBitrateInfo (for MPC-HC et al.)
- Additional metadata from the source file is exported through IPropertyBag (including "ROTATION" for video orientation information)
- Fixed demuxing of MKV files with huge SSA/ASS format blocks (> 1MB)
- Fixed playback of certain MPEG4 ASP streams in MKV to be smooth
LAV Video
- Added support for VC-1/WMV3 DXVA2 decoding on recent Intel GPUs (Ivy Bridge/Haswell, needs recent drivers)
- Fixed a crash when stopping playback or seeking on AMD when using DXVA2 Native
- Fixed playback of WMVA videos in software mode
- Fixed a few issues with output of odd-height videos when converting to various pixel formats
- Fixed a few corner cases when reporting the video range to madVR
- Fixed a crash when playing raw video files with unaligned width (non mod16)
LAV Audio
- The version of the DTS DLL decoder is now checked, and versions before 1.1.0.0 are blocked (since they do not work)
- Fixed an issue with DTS parsing which could result in occasional audio stutter
- Improved support for Opus audio pre-skip
0.59.1 - 2013/11/04
LAV Splitter
- Fixed a regression when demuxing AAC audio from MP4/MOV files
0.59.0 - 2013/11/03
LAV Splitter
- Support for demuxing H.265/HEVC and VP9
- Improvements for H.264 in AVI or as raw video streams
- Improved stream detection in files which start with a few seconds audio before the video
- Improved timestamp handling when demuxing seamless branching Blu-rays, fixes a few hicups/freezes mid-stream
LAV Video
- Support for decoding H.265/HEVC and VP9
- Accept H.264 from the MainConcept demuxer
- Added support for DV Video from Canopus cameras
LAV Audio
- Fixed playback issues on a few DTS and DTS-HD tracks
0.58.2 - 2013/07/26
LAV Splitter
- Fixed demuxing of WavPack from MKV
LAV Video
- Fixed a crash when YADIF was being used on a single- or dual-core CPU
LAV Audio
- Fixed decoding of DTS streams with a frame size change mid-stream
0.58.1 - 2013/07/09
LAV Splitter
- Improved UDP network streaming
- Added a new option to configure the stream analysis duration of network streams
- Reduced subtitle delay on certain Blu-ray titles
- Improved detection of DTS-in-WAV
- Improved I/O behaviour for sequential reading from optical media
LAV Video
- Fixed dynamic reconnection on parameter changes (Aspect Ratio, etc) with VMR-9
- Support for Apple Intermediate Codec (ICOD)
- dxva2: added a check for AMD UVD/UVD+ GPUs to ensure the H.264 Level 4.1 DPB restrictions are met
LAV Audio
- Fixed a regression decoding certain Ogg Vorbis streams
0.58.0 - 2013/06/23
General
- LAV Filters now includes a manifest file to control DLL loading
- Fixed the shortcuts to the configuration dialogs created by the installer in the start menu
LAV Splitter
- Handle the "Default" flag in MKV files with multiple video streams
- Fixed a regression in VC-1 demuxing which caused some streams to fail decoding with the WMV9 DMO decoder
- Improved transition between ordered chapters in certain (badly formed) MKV files
- Improved handling of AVC1 in AVI files
- Improved accuracy of IAMStreamSelect::get_CurrentMarker
- Several potential crash fixes and stability improvements
LAV Video
- YADIF deinterlacing is now multi-threaded, significant performance improvement on multi-core CPUs
- Improved detection of progressive streams to ensure deinterlacing is disabled, especially when "Aggressive Deinterlacing" is used
- Restored Fraps constant frame rate output by proper handling of repeated frames
- Support for the new UtVideo sub-types, and fixed a regression in UtVideo decoding
- cuvid: fix double-rate deinterlacing on certain streams without timing information
- Updated the Intel QuickSync Decoder to 0.44
0.57.0 - 2013/05/20
LAV Splitter
- Added a Popup Menu to the Tray Icon which allows Stream, Edition and Chapter switching
- Improved stream selection in files with multiple video streams
- Improved performance when opening MKVs with linked segments
- Fixed playback of MKVs with Segment Linking and Vorbis Audio
LAV Video
- Enabled Hardware/GPU Deinterlacing when using the QuickSync decoder
- Support for JPEG2000 DCinema streams
- Support for RGB48 output, and high-quality dithering of RGB48 to RGB32
- Fixed a crash with DXVA2 Native on AMD GPUs in certain situations
- Improved detection of H.264 RGB streams, improves support with EVR
- Adjusted performance tuning for consistent performance in both playback and transcoding (in 0.56, transcoding could be slow)
LAV Audio
- Use the FLAC channel mask from metadata, fixes playback of FLAC files with non-standard channel layouts
0.56.2 - 2013/04/19
LAV Splitter
- Emit the EC_LENGTH_CHANGED event when the edition is changed, to help players update their playback duration
LAV Video
- dxva2: fixed corruption/dropped frames after seeking in interlaced MPEG-2/VC-1 streams
- dxva2: fixed corruption after seeking in interlaced H.264 on AMD GPUs
- dxva2: fixed decoding of H.264 on AMD UVD/UVD+ GPUs (HD 2xxx/3xxx Series)
- dxva2: disabled wmv3 decoding on AMD UVD/UVD+ GPUs (until it can be fixed)
- Fixed colorspace used for YUV Fraps to always be BT.709
- Added support for MPEG-4 Video with the BLZ0 FourCC (used in older Blizzard games)
0.56.1 - 2013/04/13
LAV Splitter
- Fixed various crashes with ordered chapter MKVs
- Fixed a crash when playing an MKV with a disabled subtitle track
- Fixed switching between video streams with different codecs (ie. H264 -> MPEG2)
LAV Video
- Fixed a crash on close with DXVA2 Native
- Re-tuned YADIF for smooth playback instead of benchmarking
0.56.0 - 2013/04/10
General
- Major ffmpeg update, the DLLs have had their version number increased
LAV Splitter
- Support for Matroska Ordered Chaptes / Segment Linking
- Improved support for parsing language tags from OGM files
- Small performance improvements by avoiding copying the stream data in memory needlessly
- Improved duration calculation for MP3 files
LAV Video
- Performance improvements for single-threaded decoders and YADIF (up to 20% in some situations)
0.55.3 - 2013/02/10
LAV Splitter
- Improved handling of Annex B H.264 in many containers
- Improved support for external source filters without seeking ability (live sources)
- Fixed duration in some MP4/MOV files
- Fixed stream program assignment for some MPEG-TS files (resulted in some streams not visible)
LAV Video
- Added support for TSCC2
- Fixed a crash when playing certain H.264 files with QuickSync or CUVID
0.55.2 - 2013/01/25
LAV Splitter
- Improved support for MP4-style H.264 in AVI
- Further improvements for AAC in MPEG-TS
- Small improvements to handling Blu-rays with odd stream configurations
- Improved handling of Ogg Vorbis streams
LAV Video
- Basic support for playing DVDs in different playback rates
- Fixed DXVA2 resource cleanup which may have caused a crash in some situations with DXVA2-Native
- Fixed A/V Sync when using the WMV9 DMO decoder (especially noticeable after seeking)
LAV Audio
- Improved AC3 decoding quality (thanks to madshi for the patch in ffmpeg)
0.55.1 - 2013/01/11
General
- Clicking the Tray Icon with a Property Page already active brings it back to the front
LAV Splitter
- Added an option to disable quality-based audio stream selection (selects the first stream matching the language preferences)
- Removed Bitrate from audio quality criteria, because its too unreliable at this point.
LAV Video
- Fixed YADIF deinterlacing (broken after a ffmpeg update on 0.55)
LAV Audio
- Switched to Triangular Dithering for 16-bit Integer conversions
0.55.0 - 2013/01/09
General
- All Filters now have an optional tray icon which can open the property sheet when clicked (disabled by default)
LAV Splitter
- Improved FPS detection for interlaced H.264 streams in Matroska
- Fixed H.264 in Ogg and PMP
- Fixed seeking in RMVB files with AAC audio
- Improved support for AAC in MPEG-TS (especially in ISDB-T)
- Fixed Key-Frame seeking for AVI and added support for MP4
LAV Video
- Improved handling of raw RGB video with LAV Splitter (Video was upside-down in some cases)
- Improved support for the Overlay Mixer renderer
- Fixed decoding of non-mod16 video with CUVID
- Fixed DXVA2 decoding of H.264 MBAFF content with >= 16px cropping
- Support for fade in/out animations in DVD subtitles
- Fixed DVD menu overlays showing too early on some discs
- Fixed forced DVD subtitles being stuck on the screen until the next subtitle line
- Improved playback of MPEG-1 in MKV with Haali Splitter
LAV Audio
- Fixed 6.1 to 7.1 upmixing when the standard channel layout option is turned off
- Dithering when converting audio to 16-bit Integer
- Fallback to DTS "Core" bitstreaming if DTS-HD fails
0.54.1 - 2012/11/27
LAV Splitter
- Improved seeking in MP4 files created by Windows Live Movie Maker
LAV Video
- Improved H.264 DXVA on recent Intel GPUs (Sandy/Ivy Bridge and newer Atoms)
- Fixed corruption with high number of reference frames ( > 11 )
- Fixed corruption in MBAFF interlaced content
- Fixed an issue that caused DVD menus/subtitles to stop working in DXVA2 Native mode in some situations
0.54.0 - 2012/11/24
LAV Splitter
- Subtitle selection in "Default" mode now properly takes the "Default Track" flag into account
- Fixed an issue that could cause graph flush events to be send out of sync
LAV Video
- The DXVA2 Native decoder can now properly detect hardware support for video resolutions
- Allows 4K DXVA2 decoding on NVIDIA
- New options to control which resolutions are being handled by the hardware decoder (SD, HD and 4K/UHD)
- Added support for DVD menu overlays and DVD subtitles with DXVA2 Native
- Improved DXVA2 Native support with madVR
- Fixed a freeze when playing corrupted H.264 streams in DXVA2 Native
- Fixed a few rare DVD menu issues when using the QuickSync decoder
0.53.2 - 2012/11/11
LAV Video
- Fixed DVD menu still frames with DXVA2 Copy Back
- Fixed Live TV playback with QuickSync
0.53.1 - 2012/11/10
LAV Video
- Fixed initial media type when YADIF is active
- Fixed an image corruption issue with DVD playback
- Improved handling of DVD menus on some discs
- Reduced decode latency with CUVID/DXVA2-CB on DVDs for smoother playback in some situations
- Added an option to toggle HW decoding for DVDs
0.53.0 - 2012/11/05
LAV Splitter
- Added support for reading image files (tiff, png, jpeg, tga, bmp)
- Support for MPEG-4 ASP in MPEG-TS
- Support for reading metadata using the IAMMediaContent interface
- Fixed Aspect Ratio on some wmv/asf files
LAV Video
- Fixed a crash in the WMV9 DMO decoder on Windows 8
- DVD improvements
- Subtitles are properly cleared from the screen, and won't be shown forever on some discs
- Improved subtitle/menu positioning on some PAL discs
- Improved handling of still frame DVD menus
- Fixed a deadlock that caused the player to freeze in some DVD menus
- Improved quality of blending subtitles/menus
- QuickSync improvements
- Support using QuickSync in Fullscreen Exclusive mode (ie. in WMC)
- Improved fallback to software decoding if QuickSync is not available
- Support for DVD decoding
- Added support for Avid DV
- Properly indicate progressive video when YADIF deinterlacing is activated
LAV Audio
- Added proper DirectShow types and config options for AMR-NB, Nellymoser and various (AD)PCM variants
0.52.0 - 2012/10/20
LAV Splitter
- Improved IO performance on network sources
- Added an option to configure the maximum memory usage of the frame queues
- Support ALAC in MKV
- Support SRT subtitles in AVI
- Improved raw video support in combination with LAV Video
LAV Video
- Support for DVD Video decoding
- Slight GPU memory usage reduction with DXVA2 Native
- Fixed video corruption after seeks with VP3/Theora
- Fixed decoding of "old" H.264 4:4:4 lossless files
- More strict handling of output pixel formats, only enabled formats are allowed for output
- QuickSync: Improved compatibility with new driver series
- Improved support for VC-1 with the SageTV MpegDemux
LAV Audio
- Fixed a few issues with audio mixing
- Some channels would occasionally be mixed twice, causing incorrect audio levels
- Downmixing 8ch to stereo could crash on some systems
- Increased maximum LFE coefficient to 3.0 and fixed scale to be consistent with surround/center coefficients
- Added downmixing to Mono
- Clipping protection is no longer reset on seeks
- Added support for Opus
- Fixed excessive memory allocations when decoding MPEG4-ALS
0.51.3 - 2012/07/19
LAV Splitter
- Further improved H264 media type creation
LAV Audio
- Fixed an issue with the initial media types causing graph building failures in some situations
- Fixed a bug with DVBViewer which caused a delay on channel changes
0.51.2 - 2012/07/15
LAV Splitter
- Improved H264 media type creation with some files
- Fixed reading of QuickTime/AppleText chapters in MOV/MP4
LAV Video
- Reduced latency of H264 software decoding (improves Live TV playback)
- Fixed chroma handling of the YCgCo to RGB conversion
- Fixed timestamp handling of MPEG2 (regression introduced in 0.51)
LAV Audio
- Re-Mix audio as a fallback when the audio chain refuses a new channel configuration
- Fixed an error that caused 16-bit FLAC to show as 24-bit on the status panel
0.51.1 - 2012/07/10
LAV Video
- Improved compatibility between DXVA and certain DVB players
0.51.0 - 2012/07/09
LAV Splitter
- Increased IO responsiveness on high-latency network connections
- Improved timestamp handling for MPEG-PS (.mpg/.vob/.evo)
- Improved support for H264 streams in SSIF MPEG-TS files
- Added an option to control the priority of audio streams for the hearing/visually impaired
- Added new flags to the advanced subtitle selection
- "h" for hearing impaired
- "n" for normal streams (no flags)
- "!" NOT operator for inverting the meaning of the flags
LAV Video
- Improved DXVA2 Native to software fallback in some situations
- Support for YCgCo to RGB conversion
- Added a new smart Stream Aspect Ratio mode
- Will only use Stream AR when the container does not provide a realiable AR
LAV Audio
- Improved decoding performance of MP4 ALS and a few other formats
- Fixed playback of COOK with the MPC-HC RM Splitter
- Auto A/V Sync is now automatically disabled on pure-audio files to avoid potential conflicts
- Audio Down-Mixing support
0.50.5 - 2012/05/12
LAV Video
- Fixed a crash in DXVA2-Native decoding (introduced in 0.50.4)
0.50.4 - 2012/05/12
LAV Video
- Fixed seeking with QuickSync running in madVR Exclusive Mode
0.50.3 - 2012/05/11
LAV Splitter
- Fixed playback of raw PCM in AVI streams
- Fixed a rare misdetection of MPEG-2 as VC-1
LAV Video
- QuickSync: Fixed playback of some H.264 streams that would run out of sync on newer drivers
- Fixed a memory leak when playing H.264 RGB (and some other formats)
- Improved behaviour for H.264 and MPEG-2 on Live TV channel changes
LAV Audio
- Added support for Speex (via libspeex)
- Improved support for AMR-NB/WB (using OpenCore decoder)
0.50.2 - 2012/04/26
LAV Splitter
- Improved support for Playback Rates other then 1.0x
- Improved demuxing performance by implementing a custom Sample Allocator to avoid one extra memory copy
LAV Video
- Fixed a rare crash when using YV12 output on non-mod16 video
- Fixed excessive memory consumption with Haali Splitter and DXVA2-CB
- Fixed a deadlock on dynamic format changes with DXVA2 Native
- Added support for YV24 output
LAV Audio
- Improved support for Playback Rates other then 1.0x
- Support for ALAC and ALS with the MPC-HC MP4 splitter
- Improved A/V Sync on dynamic format changes
- Improved Auto A/V Sync Correction algorithm (lower threshold, faster reaction)
- Fixed audio pitch when bitstreaming 44.1KHz AC3/DTS
0.50.1 - 2012/03/29
LAV Splitter
- Fixed Stream Detection on some Blu-rays with short Logo clips before the main movie
- Fixed a crash when processing invalid/broken PGS subtitles
LAV Video
- Fixed a crash on dynamic format changes (stream change, Blu-ray clip change)
0.50 - 2012/03/27
LAV Splitter
- Improved support for H264 Elementary Streams
- Fixed a regression with seeking in MPEG-TS files recorded by some HD-PVR devices
LAV Video
- New Worker Thread design for Decoding/Deinterlacing
- WMV9+YADIF is up to 40% faster
- Improved DXVA2 for MPEG-2 interlaced
- Improved H264 DXVA2 on AMD with certain streams
- Improved CUVID support for 4K streams on supported hardware (GT520, GTX680, other VP5 hardware)
LAV Audio
- Added support for RealAudio Lossless (RALF)
0.49 - 2012/03/10
LAV Splitter
- Improved MKV demuxing performance from slow sources (network streaming, etc)
- Improved stream detection on Blu-rays
- Improved support for RealAudio (COOK, SIPR, etc) in MKV
- Support for streaming from HTTP URLs
LAV Audio
- Improved support for DTS files with Little-Endian or 14B encodings
LAV Video
- New VC1/WMV3 decoder based on the Microsoft DMO Decoder (new default)
- Updated Intel QuickSync decoder (0.29, r44)
- Fixed decoding of some MBAFF H264 streams with DXVA2
- Improved Stream Aspect Ratio logic in the CUVID decoder for H264 streams
- Fixed Deinterlacing when DXVA2 Native is active in certain situations
0.48 - 2012/02/24
LAV Splitter
- Improved Video/Audio stream detection in some MPEG-TS files
LAV Video
- Fixed a potential crash with native DXVA2 when the software fallback was used
0.47 - 2012/02/20
LAV Audio
- Fixed seeking in COOK audio with the MPC-HC RealMedia splitter
LAV Video
- New DXVA2 "native" decoder (see release notes)
- Updated Intel QuickSync decoder and tweaked configuration (0.28, r41)
- Overall performance improvements
- Multi-threaded decoding for Fraps
- Fixed a regression that resulted in only single-threaded playback on certain H264 files
- Fixed a crash in the CUVID decoder introduced in 0.46 under certain circumstances
0.46 - 2012/02/12
LAV Splitter
- Experimental support for streaming protocols (RTSP, RTP, MMS)
- Support for IBufferInfo (Buffer Status in MPC-HC "Statistics" pane)
- Added a memory limit to avoid too high memory use from the frame queues
- Fixed playback of files with Subtitles in WMP/WMC in some cases
LAV Audio
- Improved playback of files with bad audio frame interleaving
- Improved support of COOK, ATRAC and SIPR (RealAudio codecs)
LAV Video
- Updated and improved Intel QuickSync decoder (0.26, r38)
- Fixed DXVA2 software fallback on some lossless H264 clips
- Improved Fraps decoding with EVR
- Improved playback of MPEG4 in MP4
- Multi-threaded decoding for Lagarith
- Fixed playback of Theora with the MPC-HC Ogg Splitter
- Dithering Enhancements:
- New "Random Dithering" option (new default)
- Improved "Ordered Dithering" in the RGB converter
- Support for decoding v210/v410 raw formats
- Support for Snow and FFV1
0.45 - 2012/01/28
LAV Splitter
- Improved playback of concatenated H.264 MOV/MP4 files
- Adjusted FLAC MediaType to avoid ReClock stealing the connection
- Improved playback of MPEG-TS with timestamp discontinuities
LAV Audio
- Fixed playback of very short PCM samples
- Improved COOK decoding without LAV Splitter
LAV Video
- New DXVA2 "copy back" decoder (see release notes)
- Updated Intel QuickSync decoder (r29)
- Multi-threaded decoding for RV30/40, UtVideo and DNxHD
- Support for the "FCC" color matrix
- Improved Dirac support
- CUVID support for MPEG-4 ASP (experimental)
- Support for Intel Indeo 4, MS Video 1, 8BPS, LOCO, ZMBV, VCR1, AASC
0.44 - 2012/01/07
LAV Splitter
- Fixed a seeking regression in the mkv demuxer introduced in 0.43
- Fixed a bug that caused stream descriptions to vanish after the file finished playing
- Improved playback of WMVA video with commercial decoders
- Added support for the new OpenType MIME type produced by mkvtoolnix > 5.2.0
LAV Audio
- Fixed LATM AAC playback with some source filters
LAV Video
- Added Intel QuickSync hardware decoder
- Added support for YADIF with hardware decoding
- Added support for Dirac decoding
- Added support for DNxHD decoding
- Added support for v210/v410 output
- Improved dynamic reconnection with post-processing filters
- Fixed a seeking related corruption issue with MPEG4-ASP
0.43 - 2011/12/21
LAV Splitter
- Improved MKV seeking and demuxing performance
- Improved buffering for smoother playback (especially at start/after seeks)
- Fixed a few audio media type issues
- Fixed a minor resource handle leak
LAV Audio
- Updated to new ffmpeg audio decoding API
- Disabled Float Audio output on Windows XP by default
LAV Video
- Fixed handling of soft-telecined MPEG2/H264 broadcasts in CUVID mode
- Improved support for 4:2:2 10-bit streams
- Fixed a crash related to unaligned memory buffers on Windows XP
- Added support for decoding AMV streams
0.42 - 2011/11/30
LAV Splitter
- Fixed a timestamping bug in the new MKV demuxer
- Further enhancements to explorer thumbnail generation
0.41 - 2011/11/29
LAV Splitter
- New MKV Demuxer (see release notes for details)
- Fixed a bug with the Vorbis Media Type
- Disabled Subtitles when generating Thumbnails in Explorer
LAV Video
- Fixed a overflow in 10 -> 8 bit dithering and NV12 output
0.40 - 2011/11/21
LAV Splitter
- Improved demuxing of raw PCM streams
- Fixed VC-1 in MP4 with the MS WMVideo Decoder
- Improved playback of files with TrueHD audio streams
- Added support for a requested stop time from the player
- Improved playback of Blu-ray rips created by EasyBD
- Added support for RGB24 raw video in AVI
LAV Audio
- Improved decoding of formats with extremely large audio frames
LAV Video
- Added YADIF software deinterlacing
- Rewritten Interlaced options
- Added new "Aggressive" deinterlacing mode
- Moved many interlaced related options to global level
- Fixed an issue with stream compatibility detection in the CUVID decoder, causing a software fallback when not required
0.39 - 2011/11/07
LAV Splitter
- Fixed a bug that caused MPEG-2 and VC-1 parsers to produce wrong timestamps after a seek
- Fixed playback of raw .h264 files
LAV Video
- NV12 is now the preferred YUV 4:2:0 output format
- Fixed handling of the "As Input" RGB output setting
- Improved VP6 cropping
- Don't report completely progressive movies as interlaced to the renderer
- Fixed playback of some broken MPEG-2 MKV muxes
- RGB will now by default be offered as Bottom-Up instead of Top-Down for improved compatibility
0.38 - 2011/11/01
LAV Splitter
- New subtitle selection options (see release notes or readme)
- Improved handling of languages with more then one ISO 639-2 code (f.ex. German, French, etc)
- Improved seeking to the start of the file
- Added support for VobSubs in MP4
- Added support for MKV nested chapters
- Improved playback of RV40 in MKV
- Improved support of H264 in WTV
LAV Audio
- Fixed a crash with raw audio and SPDIF processing
- Improved support for COOK
- Improved DTS-in-WAV detection
LAV Video
- Fixed a issue that caused MPC-HCs EVR-CP to produce wrong colors when using CUVID decoding
- Support Multi-Threading and CUVID decoding for MPEG-1
- Improve decoder flushing
- Fixed a potential freeze on load and dynamic type changes
- Fixed a freeze on seeking with certain VP8 files
- Added support for UtVideo
- Added support for H264 4:2:2
0.37 - 2011/10/06
LAV Splitter
- Improved handling of failures on the output pins
- Improved VC-1 in EVO timestamps
LAV Audio
- Added support for dynamic channel count changes in AAC
- Implemented support for sample format conversions
- Implemented Audio Delay options
- Disabled the WMA codecs by default
- Improved Bitstreaming data flow
LAV Video
- Fixed cropping of VP6 video
- New SSE2 YUV420 -> YUV422 converter
- Performance enhancements in the CUVID decoder on some systems
- Fixed playback with the XP Overlay Mixer
- Fixed a crash when decoding RGB video (Fraps, etc)
0.36 - 2011/09/29
LAV Splitter
- Improved support for ADTS AAC
- Fixed MPEG-2 timestamps in VOB
- Fixed MPEG-2 frame rate reporting for telecined/interlaced
LAV Video
- Integrated NVIDIA CUVID Hardware decoder
- Performance enhancements in 10bit decoding
- Support for Flash Screen Video (FSV1)
- Support for Apple ProRes
- Improved MPEG-2 playback
- Improved A/V sync with VC-1 and MPEG4-ASP
0.35 - 2011/09/07
LAV Splitter
- Fixed a crash in IAMStreamSelect::Info handling with certain applications
- Improve duration calculation for MPEG files
LAV Audio
- Fix playback of DTS streams which change the channel mid-playback
LAV Video
- Fixed a crash with 10-bit decoding and benchmarking tools
- Fixed a H264 NALU parsing issue with certain streams
0.34 - 2011/09/04
LAV Splitter
- Improve playback of VC-1 in EVO
- Support for SSA subtitles in AVI
- Support for H264 in VFW mode in MKV
LAV Video
- New optimized pixel format converters (faster and more accurate)
- New YUV->RGB converter
- Support for PNG video
0.33 - 2011/08/22
LAV Splitter
- Improved compatibility with the MS WMVideo decoder
- Fixed the mediatype for raw PCM streams
LAV Audio
- Added support for Vorbis streams demuxed by Haali and MPC-HC Splitters
LAV Video
- VC-1 decoding is now disabled by default
- Fixed behaviour of the Stream AR option
- The maximum number of decoding threads is now 16
- Free decoding buffers when the input pin disconnects to avoid big memory leaks
0.32 - 2011/08/19
General
- The installer will now add shortcuts to the start menu to open the filter configurations
- The ffmpeg DLLs have been renamed to carry a "lav" suffix to avoid collisions with other components
LAV Splitter
- Improved detection of AAC LATM tracks (previously mis-detected as mp1/mp2)
- Fixed playback of badly interleaved AVI files
- Smarter default stream selection for RealMedia files
- Improved stream language handling for Blu-rays
- Fixed a crash issue with the Forced Subtitle pin on Blu-rays
LAV Audio
- DTS decoding failures are now handled more gracefully
- Fixed Media Types for Stereo 44.1kHz Audio
LAV Video
- First official version - refer to release notes for details
0.31 - 2011/07/28
LAV Splitter
- Improved audio codec selection priorities
- Improved VC-1 playback when using the madVR internal decoder
- Improved playback of MPEG-TS files with a timestamp wrap right at the beginning of a file
- Reduced amount of data required for file probing, resulting in faster startup time
- Fixed demuxing/timestamping of RealMedia files
LAV Audio
- Fixed a bug in the DTS parser which caused occasional hiccups on DTS-HD content
- Added the ability to detect DTS-in-WAV
0.30 - 2011/07/15
LAV Splitter
- Improved VC-1 playback with ffdshow DXVA
- Added support for outputting MPEG-4 Timed Text subtitles (only pure text supported)
- Better support for MLP audio
- I/O performance enhancements
- Added an option to toggle how LAV Splitter handles audio stream switching
- Added a hard-limit on queue sizes to avoid excessive memory usage when transcoding
- Added an experimental interface for the Player to control graph rebuilding
LAV Audio
- Further improvements to the DTS-HD parsing
- Better support for MLP audio
- Added more E-AC3 subtypes
0.29 - 2011/06/09
LAV Splitter
- The language code is now always shown in the stream changer (as a hint to easily know what to put into the preferred languages fields)
- Enabled ITrackInfo
- Improved H264 in MPEG-TS playback (including an option to try to fix broken HD-PVR recordings)
- Added a programmatic configuration interface for players to configure LAV Splitter
LAV Audio
- Added support for decoding encrypted DVD audio
- Fix decoding of some DTS-HD streams with the ArcSoft decoder
- Added a programmatic configuration interface for players to configure LAV Audio
0.28 - 2011/05/27
LAV Splitter
- Improved PGS filtering, forced subtitles should be cleared off the screen properly more often.
- Improved playback of H264 in MPEG-TS with certain files (mostly from camcorders, but some Blu-rays as well)
- Fixed 16-bit LPCM on DVDs
- Fixed the Media Types for uncompressed video
LAV Audio
- Added the ability to decode DTS Express when using the ArcSoft DTS Decoder
- Fixed missing audio after seeks with Ogg Vorbis
0.27 - 2011/05/24
General
- Added debug versions which generate log files on your desktop
LAV Splitter
- Fixed a memory leak when switching streams
- Increased probe buffer size (which results in files to be properly detected in more cases)
- Fixed playback of MPEG-TS files with a odd program configuration
LAV Audio
- Improvements to the DTS decoder interface
- Support for 1.1.0.0
- Try to reverse any channel upmixing done by the decoder, outputting the audio as close to the original source as possible.
- New Channel Mapping functionality
- Output only "standard" channel layouts (Mono, Stereo, 5.1, 6.1, 7.1), filling non-existent channels with silence. Required by some HDMI receivers with "odd" source layouts. (default)
- Convert Mono to Stereo (simply double the audio channel)
- Convert 6.1 to 7.1 (Back Center gets doubled into both back channels)
0.26 - 2011/05/15
General
- The VC2010 runtime is no longer required to be installed
LAV Splitter
- Further VC-1 in MKV improvements
- Added a separate "mpegvideo" (m2v files) option to the Format section
- Added a flag for secondary audio streams
- Changed the default DTS media type (better compatibility)
LAV Audio
- Added the ability to use the ArcSoft DTS decoder directly through LAV Audio
- Added an automatic algorithm to keep A/V sync stable
- Improved Bitstreaming with splitters other then LAV Splitter
- Improved timestamp generation when bitstreaming
- Fixed LPCM 24-bit Media Types
0.25 - 2011/05/06
LAV Splitter
- Added the ability to filter Blu-ray PGS subtitles, so only frames flagged as "forced" are delivered
- Either through a new "Forced Subtitles" stream (default)
- Or, filtering for every PGS stream (configurable)
- Improved support for H264 in AVI
- Improved timings for TrueHD in MKV
- m2ts files directly openend inside a Blu-ray structure should now properly display stream languages
- Alot of fixes and enhancements for format compatibility (especially MPEG-TS)
- Support using the ArcSoft HD Audio Decoder for E-AC3
LAV Audio
- Audio bitstreaming (pass-through) for HDMI and S/PDIF
- Support for AC3, E-AC3, TrueHD, DTS and DTS-HD
- Use the float decoders for mp1/mp2
- Added official support for WMAv1, WMAv2 and WMA Pro
- Fixed an issue that caused sync issues with FLAC audio, and FLAC is once again enabled by default
0.24 - 2011/04/25
General
- Big ffmpeg update! Libraries have been renamed (version increase)
LAV Splitter
- Obviously wrong frame rates will no longer be reported to the decoder
- Improved mpeg2 playback
- Improved dynamic media type changes
- Fix the first few frames of ASS/SSA subtitles in Matroska
- Fix an issue with the display of some codec names
- Add proper subtypes for little-endian PCM
- Fix subtypes for QT PCM
LAV Audio
- Support processing of 64-bit double output from the decoders
- PCM data will be buffered before its send to the renderer/post processor
0.23 - 2011/04/21
General
- There is now an installer available in addition to the trusted old .zip files!
LAV Splitter
- Added support for using the "File Source (Async)" (and others) together with LAV Splitter
- This is the new default mode for improved compatibility!
- Check release notes for additional informations.
- Added configuration which input formats will be demuxed
- Improved VC-1 in MKV playback
LAV Audio
- Fixed playback of lossless formats with huge sample sizes
- Improved A/V sync with TrueHD (and possibly others)
- FLAC decoding is now disabled by default, because the decoder is not 100% working
0.22 - 2011/04/11
LAV Splitter
- Added support for MKV embedded fonts
- Improved VC-1 and H264 parsing
- Fixed choppy XVID playback in MKV
- Fixed a seeking issues that caused incompatibilitys with certain decoders (eg. a crash in ffdshow libmpeg2)
- No longer report incomplete lists of keyframes via IKeyFrameInfo, as it would break seeking in certain players.
- Allow opening all .mpls files if the user directly specifys to open one, even if it contains loops or duplicate titles.
- Improved playback of MPEG-TS with multiple programs
- Added new debugging option (Generate missing timestamps)
0.21 - 2011/04/07
LAV Splitter
- Improve MPEG-TS program handling in some special circumstances
- Filter out misdetected audio streams (unsupported DTS Express on BluRays)
- Increase the priority of DTS-HD over normal DTS
- Use the official AVI MEDIASUBTYPE instead of a custom one
- Added options to completly disable stream parsing
- Added a new VC-1 parser which will take over when VC-1 timestamp adjustments are turned off
0.20 - 2011/04/05
LAV Splitter
- Added first BluRay support (see Release Notes or README for more details)
LAV Audio
- Removed static jitter check which caused corruptions in some audio streams
- Improved error resilience - broken streams should now play in many more cases
0.19 - 2011/03/19
General
- Version Information has been added to the filter .ax files, as well as shown on the property pages.
LAV Splitter
- Redesigned stream name generations
- Codec profiles are now shown (if known - supported are H264, VC1, MPEG2 and DTS)
- Audio bit-depth is no longer shown for lossy codecs, as it doesn't apply there
- Improved logic that parses the stream flags
- Names for the subtitle codecs have been added
- If the language is "Undetermined", it'll no longer be shown
- Size of the packet queue has been increased (solves subtitle issues, as well as improves playback stability)
- Redesigned the way the splitter registers for formats in the registry for better compatibility
- Changed the stream change handling for better compatibility with certain players (Media Portal, and others)
- Improved handling of unknown streams (no codec information present)
- Added a new option that controls if substreams should be exposed in the stream selector (Only AC3 in TrueHD supported)
LAV Audio
- Added a new configuration panel which allows to configure which formats the decoder should handle
0.18 - 2011/03/09
LAV Splitter
- Improved compatibility when decoding VC-1 with the ArcSoft and Cyberlink Decoders
- Increased the splitters merit
- Fixed an issue that caused the splitter to deadlock when changing streams with madVR
LAV Audio Decoder
- Fixed a bug that caused sample durations to be calculated wrong, causing playback glitches
0.17 - 2011/02/27
LAV Splitter
- Fixed seeking before starting playback
0.16 - 2011/02/27
LAV Audio Decoder
- Fixed missing audio after seeks
0.15 - 2011/02/27
LAV Splitter
- Fixed automatic selection of forced subtitle stream if the "Only Forced Subs" mode is active.
- Fixed a bug in file handling that caused file sizes above 4GB to overflow, causing invalid durations to be reported in some files.
- Improved performance on file opening
LAV Audio Decoder
- Enabled the ffmpeg codec parsers, which should improve compatibility with other DirectShow splitters.
- Added a audio channel activity display to the status property page (for debugging channel assignments)
0.14 - 2011/02/10
General
- The project and filters have been renamed slightly for consistency
LAV Splitter
- The settings have been moved to a different place in the Registry. You will need to re-apply them.
- Improved MPEG-TS duration calculations.
- The settings will now always be properly saved and loaded.
- Disabled the limit of 20 Streams per file.
- Fixed two separate issues that caused files to not start playing.
LAV Audio Decoder
- Property Page for Configuration and Status has been added
- Dynamic Range Compression is now off by default, but configurable.
- Media Type creation has been improved, fixes filter connection issues.
- Processing of UINT8 Samples has been fixed.
- Fixed a crash with some Audio codecs.
- Fixed Channel Order for 7.1 Streams
- Increased the decoders Merit
- Added support for decoding QT PCM
0.13 - 2011/01/29
LAVFSplitter
- Added support for demuxing BluRay LPCM tracks into the MPC-HC format
- Added a new LAVFSplitter specific media type to all audio streams
LAVCAudio
- First version of LAVCAudio implemented
0.12 - 2011/01/21
- Fixed a crash issue with certain configurations and files with subtitles
- Revisited file duration logic, now tries to prefer the duration of the video stream. This fixes MPEG-TS duration issues.
- Updated ffmpeg (a lot of issues resolved)
0.11 - 2010/11/06
- Smart stream pre-selection based on language, flags and quality
- Properties page for configuration (languages, stream selection logic)
- Added support for AAC LATM (single stream)
- Changed the "No Subtitles" pin to a more "friendly" Media Type
- Fixed a crash with certain AAC tracks
0.10 - 2010/10/26
- Added more MOV/MP4 byte markers
- Added support for multichannel PCM tracks
- Added support for DVD LPCM tracks
- Added support for usign the ArcSoft HD decoder for DTS and TrueHD tracks
- Send the proper media type for TrueHD instead of trying to connect with AC-3
- Improved H264 frame rate detection
- Improved FLAC support
- Fix loading of files with unicode characters in their names
- Fixed timestamping issues that caused certain videos to play too fast
- Fixed M-JPEG media type
- Fixed corruption with MPEG-4 ASP (DivX/Xvid) when using the Xvid decoder
0.9 - 2010/09/12
- Added support for distinguishing hearing impaired subtitles in mpeg-ts streams
- Added BluRay LPCM support
- MP1/MP2 audio media type fixes
- Honor the original FourCC of the file in media type generation
- Added support for using the Cyberlink VC-1 decoder
- Fixed an issue with some H264/AVC1 files that caused video to not play at all
- Fixed unicode in chapter names
- Fixed getting the current chapter
0.8 - 2010/08/30
- Alot of internal changes to enhance performance and maintainability
- Fixed a potential deadlock on seeking
- Fixed playing files without a video stream
- Fixed an issue that caused some players to hang on playback start
- Improved language detection
0.7 - 2010/08/23
- Further improvements to aspect ratio detection
- Restore old FPS detection
- Adjusted flushing to fix subtitle delays
- Reverted a timing change that broke TrueHD
0.6 - 2010/08/22
- Added support for E-AC3
- Fixed MPEG2 Media Types
- Added support for RealVideo in MKV
- Set proper aspect ratio in media type
- Fixed memory leaks in packet handling code
- Unicode support for stream names
- Threading changes for more fluid playback at startup
- Changed Flushing behaviour that solves a conflict with the MS DTV-DVD Decoder
- Better support for Vorbis audio
- Registers for the OGG Container Format
0.5 - 2010/08/18
- Fixed duration of MPEG-TS files
- Added support for DVB subtitles
- Fixed switching of Audio and Subtitle Streams
- Added a "No Subtitles" Stream
0.4 - 2010/08/16
- Improved SSA Subtitle support
- Fixed freeze-on-stop issue
0.3 - 2010/08/15
- Added Chapter support
- Improved stream descriptions
- 64-bit support
0.2 - 2010/08/14
- Fixed overflow in timestamp calculation causing AVIs to play too fast
0.1 - 2010/08/14
- Initial Release
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity type='win32' name='LAVFilters.Dependencies' version='1.0.0.0' />
<file name="avutil-lav-57.dll" />
<file name="swresample-lav-4.dll" />
<file name="avcodec-lav-59.dll" />
<file name="avformat-lav-59.dll" />
<file name="swscale-lav-6.dll" />
<file name="avfilter-lav-8.dll" />
<file name="libbluray.dll" />
</assembly>
LAV Filters - ffmpeg based DirectShow Splitter and Decoders
LAV Filters are a set of DirectShow filters based on the libavformat and libavcodec libraries
from the ffmpeg project, which will allow you to play virtually any format in a DirectShow player.
The filters are still under development, so not every feature is finished, or every format supported.
Install
=============================
- Unpack
- Register (install_*.bat files)
Registering requires administrative rights, and an elevated shell ("Run as Administrator")
Using it
=============================
By default, the splitter will register for all media formats that have been
tested and found working at least partially.
This currently includes (but is not limited to)
MKV/WebM, AVI, MP4/MOV, TS/M2TS/MPG, FLV, OGG, BluRay (.bdmv and .mpls)
However, some other splitters register in a "bad" way and force all players
to use them. The Haali Media Splitter is one of those, and to give priority
to the LAVFSplitter you have to either uninstall Haali or rename its .ax file
at least temporarily.
The Audio and Video Decoder will register with relatively high merit, which should make
it the preferred decoder by default. Most players offer a way to choose the preferred
decoder however.
Automatic Stream Selection
=============================
LAV Splitter offers different ways to pre-select streams when opening a file.
The selection of video streams is not configurable, and LAV Splitter will quite simply
pick the one with the best quality.
Audio stream selection offers some flexibility, specifically you can configure your preferred languages.
The language configuration is straightforward. Just enter a list of 3-letter language codes (ISO 639-2),
separated by comma or space.
For example: "eng ger fre". This would try to select a stream matching one of these languages,
in the order you specified them. First, check if an English track is present, and only if not,
go to German, and after that, go to French.
If multiple audio tracks match one language, the choice is based on the quality. The primary attribute here
is the number of channels, and after that is the codec used. PCM and lossless codecs have a higher priority
than lossy codecs.
Subtitle selection offers the most flexibility.
There are 4 distinct modes of subtitle selection.
"No Subtitles"
This mode is simple, by default subtitles will be off.
"Only Forced Subtitles"
This mode will only pre-select subtitles flagged with the "forced" flag. It'll also obey the language preferences, of course.
"Default"
The default mode will select subtitles matching your language preference. If there is no match, or you didn't configure
languages, no subtitles will be activated. In addition, subtitles flagged "default" or "forced" will always be used.
"Advanced"
The advanced mode lets you write your own combinations of rules with a special syntax. It also allows selecting subtitles
based on the audio language of the file.
The base syntax is simple, it always requires a pair of audio and subtitle language, separated by a colon, for example: "eng:ger"
In this example, LAV Splitter would select German subtitles if English audio was found.
Instead of language codes, the advanced mode supports two special cases: "*" and "off".
When you specify "*" for a language code, it'll match everything. For example "*:eng" will activate English subtitles, independent
of the audio language. The reverse is also possible: "eng:*" will activate any subtitles when the audio is English.
The "off" flag is only valid for the subtitle language, and it instructs LAV Splitter to turn the subtitles off.
So "eng:off" means that when the audio is English, the subtitles will be deactivated.
Additionally to the syntax above, the following flags can be appended to the subtitle token separated by a pipe symbol ("|"):
- "d" for default subtitles
- "f" for forced subtitles
- "h" for hearing impaired
- "n" for normal streams (not default, forced, or impaired).
In addition, you can also check for the absence of flags by preceding the flags with a "!".
The advanced rules can be combined into a complete logic for subtitle selection by just appending them, separated with a comma or a space.
The rules will always be parsed from left to right, the first match taking precedence.
Example: (basic flag usage)
"*:*|f"
Explanation:
On any audio language, load any subtitles that are flagged forced.
Example: (basic ruleset)
"eng:eng|f eng:ger|f eng:off *:eng *:ger"
Explanation:
If the audio is English, load an English or a German forced subtitle track, otherwise, turn subtitles off.
If the audio is not English, load English or German subtitles.
Example: (flag usage with negation)
"jpn:ger|d!f"
Explanation:
In the Japanese language, load German subtitles that have the default-flag but not together with forced-flag.
This is useful when you have files where the default and forced flags are set together.
Example: (advanced ruleset for files with multiple audio and subtitle-tracks)
"jpn:ger|d!f jpn:ger|!f jpn:ger ger:ger|f ger:eng|f ger:*|f"
Explanation:
On Japanese audio, try to load German full subs (default but not forced), then unforced, and at last any german subs if there are no unforced subs.
On German audio load only forced subs in the following order: German, English, any.
BluRay Support
=============================
To play a BluRay, simply open the index.bdmv file in the BDMV folder on the BluRay disc.
LAV Splitter will then automatically detect the longest track on the disc (usually the main movie),
and start playing.
Alternatively, you can also open a playlist file (*.mpls, located in BDMV/PLAYLIST), and LAV Splitter
will then play that specific title.
In future versions, you'll be able to choose the title from within the player, as well.
Compiling
=============================
Compiling is pretty straightforward using VS2019 (included project files).
Older versions of Visual Studio are not officially supported, but may still work.
It does, however, require that you build your own ffmpeg and libbluray.
You need to place the full ffmpeg package in a directory called "ffmpeg" in the
main source directory (the directory this file was in). There are scripts to
build a proper ffmpeg included.
I recommend using my fork of ffmpeg, as it includes additional patches for
media compatibility:
https://git.1f0.de/gitweb?p=ffmpeg.git;a=summary
libbluray is compiled with the MSVC project files, however, a specially modified
version of libbluray is required. Similar to ffmpeg, just place the full tree
inside the "libbluray" directory in the main directory.
You can get the modified version here:
https://git.1f0.de/gitweb?p=libbluray.git;a=summary
Feedback
=============================
GitHub Project: https://github.com/Nevcairiel/LAVFilters
Doom9: https://forum.doom9.org/showthread.php?t=156191
/*
* (C) 2003-2006 Gabest
* (C) 2006-2013 MPC-HC Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#pragma once
interface __declspec(uuid("EB2CD9E6-BA08-4acb-AA0F-3D8D0DD521CA"))
IBitRateInfo :
public IUnknown {
STDMETHOD_(DWORD, GetCurrentBitRate)() PURE;
STDMETHOD_(DWORD, GetAverageBitRate)() PURE;
};
/*
* $Id: IBufferInfo.h 2786 2010-12-17 16:42:55Z XhmikosR $
*
* (C) 2003-2006 Gabest
* (C) 2006-2010 see AUTHORS
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#pragma once
interface __declspec(uuid("46070104-1318-4A82-8822-E99AB7CD15C1")) IBufferInfo : public IUnknown
{
// Number of Buffers
STDMETHOD_(int, GetCount()) = 0;
// Get Info about Buffer "i" (0-based index up to count)
// samples: number of frames in the buffer
// size: total size in bytes of the buffer
STDMETHOD(GetStatus(int i, int &samples, int &size)) = 0;
// Get priority of the demuxing thread
STDMETHOD_(DWORD, GetPriority()) = 0;
};
// -----------------------------------------------------------------
// ID3DVideoMemoryConfiguration interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
// -----------------------------------------------------------------
// Control D3D11 Hardware Decoding between decoder and renderer
// -----------------------------------------------------------------
// A video renderer can implement this interface on its input pin
// to signal to a decoder that its capable of accepting D3D11 texture
// samples directly, without copying to system memory.
//
// The decoder will create the D3D11 device and a mutex to protect it,
// and share it with the renderer in this interface.
//
// To facilitate dynamic switching of the adapter used for decoding, the
// renderer should disconnect the decoder and re-connect it. At that
// point the decoder should query GetD3D11AdapterIndex() again and
// create a new decoder on the new device, as appropriate.
interface __declspec(uuid("2BB66002-46B7-4F13-9036-7053328742BE")) ID3D11DecoderConfiguration : public IUnknown
{
// Set the surface format the decoder is going to send.
// If the renderer is not ready to accept this format, an error will be returned.
virtual HRESULT STDMETHODCALLTYPE ActivateD3D11Decoding(ID3D11Device * pDevice, ID3D11DeviceContext * pContext,
HANDLE hMutex, UINT nFlags) = 0;
// Get the currently preferred D3D11 adapter index (to be used with IDXGIFactory1::EnumAdapters1)
virtual UINT STDMETHODCALLTYPE GetD3D11AdapterIndex() = 0;
};
// -----------------------------------------------------------------
// Media Sample to hold a D3D11 texture
// -----------------------------------------------------------------
// D3D11 textures used for decoding are typically array-textures,
// a single ID3D11Texture2D object containing an array of textures
// individually addressable by the ArraySlice index.
//
// The texture lifetime is bound to the media samples lifetime. The
// media sample can only be released when the texture is no longer in
// use, otherwise the texture will be re-used by the decoder.
//
// The texture is AddRef'ed when retrieved through this interface,
// and should be Released when no longer needed.
interface __declspec(uuid("BC8753F5-0AC8-4806-8E5F-A12B2AFE153E")) IMediaSampleD3D11 : public IUnknown
{
// Get the D3D11 texture for the specified view.
// 2D images with only one view always use view 0. For 3D, view 0 specifies the base view, view 1 the extension
// view.
virtual HRESULT STDMETHODCALLTYPE GetD3D11Texture(int nView, ID3D11Texture2D **ppTexture, UINT *pArraySlice) = 0;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
interface __declspec(uuid("EBAFBCBE-BDE0-489A-9789-05D5692E3A93")) IDSMResourceBag : public IUnknown
{
STDMETHOD_(DWORD, ResGetCount)() PURE;
STDMETHOD(ResGet)(DWORD iIndex, BSTR * ppName, BSTR * ppDesc, BSTR * ppMime, BYTE * *ppData, DWORD * pDataLen, DWORD_PTR * pTag) PURE;
STDMETHOD(ResSet)(DWORD iIndex, LPCWSTR pName, LPCWSTR pDesc, LPCWSTR pMime, const BYTE *pData, DWORD len, DWORD_PTR tag) PURE;
STDMETHOD(ResAppend)(LPCWSTR pName, LPCWSTR pDesc, LPCWSTR pMime, BYTE * pData, DWORD len, DWORD_PTR tag) PURE;
STDMETHOD(ResRemoveAt)(DWORD iIndex) PURE;
STDMETHOD(ResRemoveAll)(DWORD_PTR tag) PURE;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {17989414-C927-4D73-AB6C-19DF37602AC4}
DEFINE_GUID(IID_IGraphRebuildDelegate, 0x17989414, 0xc927, 0x4d73, 0xab, 0x6c, 0x19, 0xdf, 0x37, 0x60, 0x2a, 0xc4);
interface __declspec(uuid("17989414-C927-4D73-AB6C-19DF37602AC4")) IGraphRebuildDelegate : public IUnknown
{
// Called by the splitter to let the player know that a certain pin needs to be rebuild.
//
// This function is called on any stream or title changes that would cause the content of the pin to change.
// The Splitter will stop the graph prior to this call, and it will return the graph to its previous state
// afterwards.
//
// When this function is called, the pin will already have the new media types set, so the usual functions to query
// the media types can be used. EnmuMediaTypes is OK (or any wrappers of this in the base classes),
// ConnectionMediaType is not OK, for obvious reasons.
//
// Following return values are supported:
// S_OK - The player took complete control over the rebuild, the splitter will do no further actions regarding
// the pin S_FALSE - The player may or may not have changed the pin, and the splitter is instructed to send a media
// type with the next packet. E_FAIL - The player failed, and the splitter should try to rebuild the pin
STDMETHOD(RebuildPin)(IFilterGraph * pGraph, IPin * pPin) = 0;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
interface __declspec(uuid("01A5BBD3-FE71-487C-A2EC-F585918A8724")) IKeyFrameInfo : public IUnknown
{
// Get the number of (known) keyframes in the file
STDMETHOD(GetKeyFrameCount)(UINT & nKFs) = 0; // returns S_FALSE when every frame is a keyframe
// Get the times of the key frames, if available.
//
// pFormat: GUID of the time format (see http://msdn.microsoft.com/en-us/library/dd407205(v=vs.85).aspx, usually
// TIME_FORMAT_MEDIA_TIME) pKFs: Caller allocated memory for the timestamps of the keyframes (should be
// sizeof(REFERENCE_TIME) * nKFs at least!) nKF: Number of keyframes requested/returned - no more then nKFs key
// frames will be returned.
STDMETHOD(GetKeyFrames)(const GUID *pFormat, REFERENCE_TIME *pKFs, UINT &nKFs /* in, out*/) = 0;
};
\ No newline at end of file
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {8FBB906B-D1DB-4528-9498-563241CCD43D}
DEFINE_GUID(IID_ILAVDynamicAllocator, 0x8fbb906b, 0xd1db, 0x4528, 0x94, 0x98, 0x56, 0x32, 0x41, 0xcc, 0xd4, 0x3d);
interface __declspec(uuid("8FBB906B-D1DB-4528-9498-563241CCD43D")) ILAVDynamicAllocator : public IUnknown
{
// Query wether this allocator is using dynamic allocation of samples and will not run out of samples
STDMETHOD_(BOOL, IsDynamicAllocator)() PURE;
};
// -----------------------------------------------------------------
// IMediaSample3D interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
interface __declspec(uuid("E92D790E-BF54-43C4-B394-8CA0A41BF9EC")) IMediaSample3D : public IMediaSample2
{
STDMETHOD(Enable3D)() = 0;
STDMETHOD(GetPointer3D)(BYTE **ppBuffer) = 0;
};
// -----------------------------------------------------------------
// IMediaSideData interface and data structure definitions
// -----------------------------------------------------------------
#pragma once
#include <stdint.h>
// -----------------------------------------------------------------
// Interface to exchange binary side data
// -----------------------------------------------------------------
// This interface should be implemented in IMediaSample objects and accessed through IUnknown
// It allows binary side data to be attached to the media samples and delivered with them
// Restrictions: Only one side data per type can be attached
interface __declspec(uuid("F940AE7F-48EB-4377-806C-8FC48CAB2292")) IMediaSideData : public IUnknown
{
// Set the side data identified by guidType to the data provided
// The provided data will be copied and stored internally
STDMETHOD(SetSideData)(GUID guidType, const BYTE *pData, size_t size) PURE;
// Get the side data identified by guidType
// The caller receives pointers to the internal data, and the pointers shall stay
// valid for the lifetime of the object
STDMETHOD(GetSideData)(GUID guidType, const BYTE **pData, size_t *pSize) PURE;
};
// -----------------------------------------------------------------
// High-Dynamic-Range (HDR) Side Data
// -----------------------------------------------------------------
// {53820DBC-A7B8-49C4-B17B-E511591A790C}
DEFINE_GUID(IID_MediaSideDataHDR, 0x53820dbc, 0xa7b8, 0x49c4, 0xb1, 0x7b, 0xe5, 0x11, 0x59, 0x1a, 0x79, 0xc);
#pragma pack(push, 1)
struct MediaSideDataHDR
{
// coordinates of the primaries, in G-B-R order
double display_primaries_x[3];
double display_primaries_y[3];
// white point
double white_point_x;
double white_point_y;
// luminance
double max_display_mastering_luminance;
double min_display_mastering_luminance;
};
#pragma pack(pop)
// {ED6AE576-7CBE-41A6-9DC3-07C35DC13EF9}
DEFINE_GUID(IID_MediaSideDataHDRContentLightLevel, 0xed6ae576, 0x7cbe, 0x41a6, 0x9d, 0xc3, 0x7, 0xc3, 0x5d, 0xc1, 0x3e,
0xf9);
#pragma pack(push, 1)
struct MediaSideDataHDRContentLightLevel
{
// maximum content light level (cd/m2)
unsigned int MaxCLL;
// maximum frame average light level (cd/m2)
unsigned int MaxFALL;
};
#pragma pack(pop)
// {183ED511-8910-4262-88F6-4946BC799C84}
DEFINE_GUID(IID_MediaSideDataHDR10Plus, 0x183ed511, 0x8910, 0x4262, 0x88, 0xf6, 0x49, 0x46, 0xbc, 0x79, 0x9c, 0x84);
#pragma pack(push, 1)
// HDR10+ metadata according to SMPTE 2094-40
// Refer to the specification for the meaning of the fields
//
// All pixel values are kept as-is, rational values are normalized as double-precision floating point
struct MediaSideDataHDR10Plus
{
// number of windows (1-3)
unsigned int num_windows;
// processing windows
struct
{
unsigned int upper_left_corner_x;
unsigned int upper_left_corner_y;
unsigned int lower_right_corner_x;
unsigned int lower_right_corner_y;
unsigned int center_of_ellipse_x;
unsigned int center_of_ellipse_y;
unsigned int rotation_angle;
unsigned int semimajor_axis_internal_ellipse;
unsigned int semimajor_axis_external_ellipse;
unsigned int semiminor_axis_external_ellipse;
unsigned int overlap_process_option;
double maxscl[3];
double average_maxrgb;
unsigned int num_distribution_maxrgb_percentiles;
struct
{
unsigned int percentage;
double percentile;
} distribution_maxrgb_percentiles[15];
double fraction_bright_pixels;
unsigned int tone_mapping_flag;
double knee_point_x;
double knee_point_y;
unsigned int num_bezier_curve_anchors;
double bezier_curve_anchors[15];
unsigned int color_saturation_mapping_flag;
double color_saturation_weight;
} windows[3];
double targeted_system_display_maximum_luminance;
unsigned int targeted_system_display_actual_peak_luminance_flag;
unsigned int num_rows_targeted_system_display_actual_peak_luminance;
unsigned int num_cols_targeted_system_display_actual_peak_luminance;
double targeted_system_display_actual_peak_luminance[25][25];
unsigned int mastering_display_actual_peak_luminance_flag;
unsigned int num_rows_mastering_display_actual_peak_luminance;
unsigned int num_cols_mastering_display_actual_peak_luminance;
double mastering_display_actual_peak_luminance[25][25];
};
#pragma pack(pop)
// {BAE40E6C-5B93-4170-90CC-5D5F02A29638}
DEFINE_GUID(IID_MediaSideDataDOVIRPU, 0xbae40e6c, 0x5b93, 0x4170, 0x90, 0xcc, 0x5d, 0x5f, 0x2, 0xa2, 0x96, 0x38);
// {277EE779-13F4-434E-BDEC-3D6F8C0E15D2}
DEFINE_GUID(IID_MediaSideDataDOVIMetadata, 0x277ee779, 0x13f4, 0x434e, 0xbd, 0xec, 0x3d, 0x6f, 0x8c, 0xe, 0x15, 0xd2);
#pragma pack(push, 1)
// Dolby Vision metadata
// Refer to the specification for the meaning of the fields
struct MediaSideDataDOVIMetadata
{
struct
{
uint8_t rpu_type;
uint16_t rpu_format;
uint8_t vdr_rpu_profile;
uint8_t vdr_rpu_level;
uint8_t chroma_resampling_explicit_filter_flag;
uint8_t coef_data_type; /* informative, lavc always converts to fixed */
uint8_t coef_log2_denom;
uint8_t vdr_rpu_normalized_idc;
uint8_t bl_video_full_range_flag;
uint8_t bl_bit_depth; /* [8, 16] */
uint8_t el_bit_depth; /* [8, 16] */
uint8_t vdr_bit_depth; /* [8, 16] */
uint8_t spatial_resampling_filter_flag;
uint8_t el_spatial_resampling_filter_flag;
uint8_t disable_residual_flag;
} Header;
struct
{
uint8_t vdr_rpu_id;
uint8_t mapping_color_space;
uint8_t mapping_chroma_format_idc;
struct
{
#define LAV_DOVI_MAX_PIECES 8
uint8_t num_pivots; /* [2, 9] */
uint16_t pivots[LAV_DOVI_MAX_PIECES + 1]; /* sorted ascending */
uint8_t mapping_idc[LAV_DOVI_MAX_PIECES]; /* 0 polynomial, 1 mmr */
/* polynomial */
uint8_t poly_order[LAV_DOVI_MAX_PIECES]; /* [1, 2] */
int64_t poly_coef[LAV_DOVI_MAX_PIECES][3]; /* x^0, x^1, x^2 */
/* mmr */
uint8_t mmr_order[LAV_DOVI_MAX_PIECES]; /* [1, 3] */
int64_t mmr_constant[LAV_DOVI_MAX_PIECES];
int64_t mmr_coef[LAV_DOVI_MAX_PIECES][3 /* order - 1 */][7];
} curves[3]; /* per component */
/* Non-linear inverse quantization */
uint8_t nlq_method_idc; // -1 none, 0 linear dz
uint32_t num_x_partitions;
uint32_t num_y_partitions;
struct
{
uint16_t nlq_offset;
uint64_t vdr_in_max;
/* linear dz */
uint64_t linear_deadzone_slope;
uint64_t linear_deadzone_threshold;
} nlq[3]; /* per component */
} Mapping;
struct
{
uint8_t dm_metadata_id;
uint8_t scene_refresh_flag;
/**
* Coefficients of the custom Dolby Vision IPT-PQ matrices. These are to be
* used instead of the matrices indicated by the frame's colorspace tags.
* The output of rgb_to_lms_matrix is to be fed into a BT.2020 LMS->RGB
* matrix based on a Hunt-Pointer-Estevez transform, but without any
* crosstalk. (See the definition of the ICtCp colorspace for more
* information.)
*/
double ycc_to_rgb_matrix[9]; /* before PQ linearization */
double ycc_to_rgb_offset[3]; /* input offset of neutral value */
double rgb_to_lms_matrix[9]; /* after PQ linearization */
/**
* Extra signal metadata (see Dolby patents for more info).
*/
uint16_t signal_eotf;
uint16_t signal_eotf_param0;
uint16_t signal_eotf_param1;
uint32_t signal_eotf_param2;
uint8_t signal_bit_depth;
uint8_t signal_color_space;
uint8_t signal_chroma_format;
uint8_t signal_full_range_flag; /* [0, 3] */
uint16_t source_min_pq;
uint16_t source_max_pq;
uint16_t source_diagonal;
} ColorMetadata;
};
#pragma pack(pop)
// -----------------------------------------------------------------
// 3D Plane Offset Side Data
// -----------------------------------------------------------------
// {F169B76C-75A3-49E6-A23A-14983EBF4370}
DEFINE_GUID(IID_MediaSideData3DOffset, 0xf169b76c, 0x75a3, 0x49e6, 0xa2, 0x3a, 0x14, 0x98, 0x3e, 0xbf, 0x43, 0x70);
#pragma pack(push, 1)
struct MediaSideData3DOffset
{
// Number of valid offsets (up to 32)
int offset_count;
// Offset Value, can be positive or negative
// positive values offset closer to the viewer (move right on the left view, left on the right view)
// negative values offset further away from the viewer (move left on the left view, right on the right view)
int offset[32];
};
#pragma pack(pop)
// -----------------------------------------------------------------
// EIA-608/708 Closed Caption Data
// -----------------------------------------------------------------
// {40FEFD7F-85DD-4335-A804-8A33B0BF7B81}
DEFINE_GUID(IID_MediaSideDataEIA608CC, 0x40fefd7f, 0x85dd, 0x4335, 0xa8, 0x4, 0x8a, 0x33, 0xb0, 0xbf, 0x7b, 0x81);
// There is no struct definition. The data is supplied as a list of 3 byte CC data packets (control byte + cc_data1/2)
// -----------------------------------------------------------------
// Media Control Flags
// -----------------------------------------------------------------
// {B5411CE3-3B21-4FD6-80A8-CE682969F795}
DEFINE_GUID(IID_MediaSideDataControlFlags, 0xb5411ce3, 0x3b21, 0x4fd6, 0x80, 0xa8, 0xce, 0x68, 0x29, 0x69, 0xf7, 0x95);
// No struct definition, just a single DWORD for additional flags
enum MediaSideDataControlFlags
{
MediaSideDataControlFlags_EndOfSequence = (1 << 0),
};
#pragma once
// -----------------------------------------------------------------
// IPin Segmenting Extension
// -----------------------------------------------------------------
// This extension allows upstream filters to cleanly terminate segments,
// indicating to downstream components that any data should be flushed
// to the renderer.
// This call should be followed by a call to IPin::NewSegment to start a
// new segment afterwards.
interface __declspec(uuid("8B81E022-52C7-4B89-9F11-ACFD063AABB4")) IPinSegmentEx : public IUnknown
{
virtual HRESULT STDMETHODCALLTYPE EndOfSegment(void) = 0;
};
/*
* (C) 2003-2006 Gabest
* (C) 2006-2010 MPC-HC Authors
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GNU Make; see the file COPYING. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
#pragma once
#include <OCIdl.h>
interface __declspec(uuid("03481710-D73E-4674-839F-03EDE2D60ED8")) ISpecifyPropertyPages2 : public ISpecifyPropertyPages
{
STDMETHOD(CreatePage)(const GUID &guid, IPropertyPage **ppPage) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// NOTICE: This interface is still experimental and may change in the future. Do NOT use it yet unless you absolutely
// know what you are doing.
// Interface for high-level streaming source filters
// The source can implement proper seeking and duration retrieval based on its underlying protocol.
// This interface should be exposed on the output pin or the filter itself of the streaming source, similar to the
// IAsyncReader interface
// {C0BE9565-4C05-4644-9492-57547A4048DC}
DEFINE_GUID(IID_IStreamSourceControl, 0xc0be9565, 0x4c05, 0x4644, 0x94, 0x92, 0x57, 0x54, 0x7a, 0x40, 0x48, 0xdc);
interface __declspec(uuid("C0BE9565-4C05-4644-9492-57547A4048DC")) IStreamSourceControl : public IUnknown
{
// Get the duration of the stream being played.
// Duration is in DirectShow reference time, 100ns units.
STDMETHOD(GetStreamDuration)(REFERENCE_TIME * prtDuration) PURE;
// Seek the stream to a specified time
//
// Position is in DirectShow reference time, 100ns units.
//
// If the source returns a failure code, the demuxer will do byte-based seeking itself (ie. when the stream supports
// this) On success, it'll re-open the stream and start reading from the start (byte position 0).
STDMETHOD(SeekStream)(REFERENCE_TIME rtPosition) PURE;
};
/*
* Copyright (C) 2003-2006 Gabest
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
typedef enum TrackType
{
TypeVideo = 1,
TypeAudio = 2,
TypeComplex = 3,
TypeLogo = 0x10,
TypeSubtitle = 0x11,
TypeControl = 0x20
} TrackType;
#pragma pack(push, 1)
struct TrackElement
{
WORD Size; // Size of this structure
BYTE Type; // See TrackType
BOOL FlagDefault; // Set if the track is the default for its TrackType.
BOOL FlagForced; // Set if that track MUST be used during playback.
BOOL FlagLacing; // Set if the track may contain blocks using lacing.
UINT MinCache; // The minimum number of frames a player should be able to cache during playback.
UINT MaxCache; // The maximum cache size required to store referenced frames in and the current frame. 0 means no
// cache is needed.
CHAR Language[4]; // Specifies the language of the track, in the ISO-639-2 form. (end with '\0')
};
struct TrackExtendedInfoVideo
{
WORD Size; // Size of this structure
BOOL Interlaced; // Set if the video is interlaced.
UINT PixelWidth; // Width of the encoded video frames in pixels.
UINT PixelHeight; // Height of the encoded video frames in pixels.
UINT DisplayWidth; // Width of the video frames to display.
UINT DisplayHeight; // Height of the video frames to display.
BYTE DisplayUnit; // Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches).
BYTE AspectRatioType; // Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect
// ratio, 2: fixed).
};
struct TrackExtendedInfoAudio
{
WORD Size; // Size of this structure
FLOAT SamplingFreq; // Sampling frequency in Hz.
FLOAT OutputSamplingFrequency; // Real output sampling frequency in Hz (used for SBR techniques).
UINT Channels; // Numbers of channels in the track.
UINT BitDepth; // Bits per sample, mostly used for PCM.
};
#pragma pack(pop)
interface __declspec(uuid("03E98D51-DDE7-43aa-B70C-42EF84A3A23D")) ITrackInfo : public IUnknown
{
STDMETHOD_(UINT, GetTrackCount)() = 0;
// \param aTrackIdx the track index (from 0 to GetTrackCount()-1)
STDMETHOD_(BOOL, GetTrackInfo)(UINT aTrackIdx, struct TrackElement * pStructureToFill) = 0;
// Get an extended information struct relative to the track type
STDMETHOD_(BOOL, GetTrackExtendedInfo)(UINT aTrackIdx, void *pStructureToFill) = 0;
STDMETHOD_(BSTR, GetTrackCodecID)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecName)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecInfoURL)(UINT aTrackIdx) = 0;
STDMETHOD_(BSTR, GetTrackCodecDownloadURL)(UINT aTrackIdx) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {4158A22B-6553-45D0-8069-24716F8FF171}
DEFINE_GUID(IID_ILAVAudioSettings, 0x4158a22b, 0x6553, 0x45d0, 0x80, 0x69, 0x24, 0x71, 0x6f, 0x8f, 0xf1, 0x71);
// {A668B8F2-BA87-4F63-9D41-768F7DE9C50E}
DEFINE_GUID(IID_ILAVAudioStatus, 0xa668b8f2, 0xba87, 0x4f63, 0x9d, 0x41, 0x76, 0x8f, 0x7d, 0xe9, 0xc5, 0xe);
// Codecs supported in the LAV Audio configuration
// Codecs not listed here cannot be turned off. You can request codecs to be added to this list, if you wish.
typedef enum LAVAudioCodec
{
Codec_AAC,
Codec_AC3,
Codec_EAC3,
Codec_DTS,
Codec_MP2,
Codec_MP3,
Codec_TRUEHD,
Codec_FLAC,
Codec_VORBIS,
Codec_LPCM,
Codec_PCM,
Codec_WAVPACK,
Codec_TTA,
Codec_WMA2,
Codec_WMAPRO,
Codec_Cook,
Codec_RealAudio,
Codec_WMALL,
Codec_ALAC,
Codec_Opus,
Codec_AMR,
Codec_Nellymoser,
Codec_MSPCM,
Codec_Truespeech,
Codec_TAK,
Codec_ATRAC,
Codec_AudioNB // Number of entries (do not use when dynamically linking)
} LAVAudioCodec;
// Bitstreaming Codecs supported in LAV Audio
typedef enum LAVBitstreamCodec
{
Bitstream_AC3,
Bitstream_EAC3,
Bitstream_TRUEHD,
Bitstream_DTS,
Bitstream_DTSHD,
Bitstream_NB // Number of entries (do not use when dynamically linking)
} LAVBitstreamCodec;
// Supported Sample Formats in LAV Audio
typedef enum LAVAudioSampleFormat
{
SampleFormat_None = -1,
SampleFormat_16,
SampleFormat_24,
SampleFormat_32,
SampleFormat_U8,
SampleFormat_FP32,
SampleFormat_Bitstream,
SampleFormat_NB // Number of entries (do not use when dynamically linking)
} LAVAudioSampleFormat;
typedef enum LAVAudioMixingMode
{
MatrixEncoding_None,
MatrixEncoding_Dolby,
MatrixEncoding_DPLII,
MatrixEncoding_NB
} LAVAudioMixingMode;
// LAV Audio configuration interface
interface __declspec(uuid("4158A22B-6553-45D0-8069-24716F8FF171")) ILAVAudioSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Audio without interfering with the users settings in the
// registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does not
// change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Audio is connected to other filters.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Dynamic Range Compression
// pbDRCEnabled: The state of DRC
// piDRCLevel: The DRC strength (0-100, 100 is maximum)
STDMETHOD(GetDRC)(BOOL * pbDRCEnabled, int *piDRCLevel) = 0;
STDMETHOD(SetDRC)(BOOL bDRCEnabled, int iDRCLevel) = 0;
// Configure which codecs are enabled
// If aCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetFormatConfiguration)(LAVAudioCodec aCodec) = 0;
STDMETHOD(SetFormatConfiguration)(LAVAudioCodec aCodec, BOOL bEnabled) = 0;
// Control Bitstreaming
// If bsCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetBitstreamConfig)(LAVBitstreamCodec bsCodec) = 0;
STDMETHOD(SetBitstreamConfig)(LAVBitstreamCodec bsCodec, BOOL bEnabled) = 0;
// Should "normal" DTS frames be encapsulated in DTS-HD frames when bitstreaming?
STDMETHOD_(BOOL, GetDTSHDFraming)() = 0;
STDMETHOD(SetDTSHDFraming)(BOOL bHDFraming) = 0;
// Control Auto A/V syncing
STDMETHOD_(BOOL, GetAutoAVSync)() = 0;
STDMETHOD(SetAutoAVSync)(BOOL bAutoSync) = 0;
// Convert all Channel Layouts to standard layouts
// Standard are: Mono, Stereo, 5.1, 6.1, 7.1
STDMETHOD_(BOOL, GetOutputStandardLayout)() = 0;
STDMETHOD(SetOutputStandardLayout)(BOOL bStdLayout) = 0;
// Expand Mono to Stereo by simply doubling the audio
STDMETHOD_(BOOL, GetExpandMono)() = 0;
STDMETHOD(SetExpandMono)(BOOL bExpandMono) = 0;
// Expand 6.1 to 7.1 by doubling the back center
STDMETHOD_(BOOL, GetExpand61)() = 0;
STDMETHOD(SetExpand61)(BOOL bExpand61) = 0;
// Allow Raw PCM and SPDIF encoded input
STDMETHOD_(BOOL, GetAllowRawSPDIFInput)() = 0;
STDMETHOD(SetAllowRawSPDIFInput)(BOOL bAllow) = 0;
// Configure which sample formats are enabled
// Note: SampleFormat_Bitstream cannot be controlled by this
STDMETHOD_(BOOL, GetSampleFormat)(LAVAudioSampleFormat format) = 0;
STDMETHOD(SetSampleFormat)(LAVAudioSampleFormat format, BOOL bEnabled) = 0;
// Configure a delay for the audio
STDMETHOD(GetAudioDelay)(BOOL * pbEnabled, int *pDelay) = 0;
STDMETHOD(SetAudioDelay)(BOOL bEnabled, int delay) = 0;
// Enable/Disable Mixing
STDMETHOD(SetMixingEnabled)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetMixingEnabled)() = 0;
// Control Mixing Layout
STDMETHOD(SetMixingLayout)(DWORD dwLayout) = 0;
STDMETHOD_(DWORD, GetMixingLayout)() = 0;
#define LAV_MIXING_FLAG_UNTOUCHED_STEREO 0x0001
#define LAV_MIXING_FLAG_NORMALIZE_MATRIX 0x0002
#define LAV_MIXING_FLAG_CLIP_PROTECTION 0x0004
// Set Mixing Flags
STDMETHOD(SetMixingFlags)(DWORD dwFlags) = 0;
STDMETHOD_(DWORD, GetMixingFlags)() = 0;
// Set Mixing Mode
STDMETHOD(SetMixingMode)(LAVAudioMixingMode mixingMode) = 0;
STDMETHOD_(LAVAudioMixingMode, GetMixingMode)() = 0;
// Set Mixing Levels
STDMETHOD(SetMixingLevels)(DWORD dwCenterLevel, DWORD dwSurroundLevel, DWORD dwLFELevel) = 0;
STDMETHOD(GetMixingLevels)(DWORD * dwCenterLevel, DWORD * dwSurroundLevel, DWORD * dwLFELevel) = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Toggle Dithering for sample format conversion
STDMETHOD(SetSampleConvertDithering)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetSampleConvertDithering)() = 0;
// Suppress sample format changes. This will allow channel count to increase, but not to reduce, instead adding
// empty channels This option is NOT persistent
STDMETHOD(SetSuppressFormatChanges)(BOOL bEnabled) = 0;
STDMETHOD_(BOOL, GetSuppressFormatChanges)() = 0;
// Use 5.1 legacy layout (using back channels instead of side)
STDMETHOD_(BOOL, GetOutput51LegacyLayout)() = 0;
STDMETHOD(SetOutput51LegacyLayout)(BOOL b51Legacy) = 0;
// Fallback to audio decoding if bitstreaming is not supported by the audio renderer/hardware
STDMETHOD_(BOOL, GetBitstreamingFallback)() = 0;
STDMETHOD(SetBitstreamingFallback)(BOOL bBitstreamingFallback) = 0;
};
// LAV Audio Status Interface
// Get the current playback stats
interface __declspec(uuid("A668B8F2-BA87-4F63-9D41-768F7DE9C50E")) ILAVAudioStatus : public IUnknown
{
// Check if the given sample format is supported by the current playback chain
STDMETHOD_(BOOL, IsSampleFormatSupported)(LAVAudioSampleFormat sfCheck) = 0;
// Get details about the current decoding format
STDMETHOD(GetDecodeDetails)
(LPCSTR * pCodec, LPCSTR * pDecodeFormat, int *pnChannels, int *pSampleRate, DWORD *pChannelMask) = 0;
// Get details about the current output format
STDMETHOD(GetOutputDetails)(LPCSTR * pOutputFormat, int *pnChannels, int *pSampleRate, DWORD *pChannelMask) = 0;
// Enable Volume measurements
STDMETHOD(EnableVolumeStats)() = 0;
// Disable Volume measurements
STDMETHOD(DisableVolumeStats)() = 0;
// Get Volume Average for the given channel
STDMETHOD(GetChannelVolumeAverage)(WORD nChannel, float *pfDb) = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
#include <Unknwn.h> // IUnknown and GUID Macros
// {774A919D-EA95-4A87-8A1E-F48ABE8499C7}
DEFINE_GUID(IID_ILAVFSettings, 0x774a919d, 0xea95, 0x4a87, 0x8a, 0x1e, 0xf4, 0x8a, 0xbe, 0x84, 0x99, 0xc7);
typedef enum LAVSubtitleMode
{
LAVSubtitleMode_NoSubs,
LAVSubtitleMode_ForcedOnly,
LAVSubtitleMode_Default,
LAVSubtitleMode_Advanced
} LAVSubtitleMode;
interface __declspec(uuid("774A919D-EA95-4A87-8A1E-F48ABE8499C7")) ILAVFSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Splitter without interfering with the users settings in
// the registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does
// not change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Splitter opens a file.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Retrieve the preferred languages as ISO 639-2 language codes, comma separated
// If the result is NULL, no language has been set
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetPreferredLanguages)(LPWSTR * ppLanguages) = 0;
// Set the preferred languages as ISO 639-2 language codes, comma separated
// To reset to no preferred language, pass NULL or the empty string
STDMETHOD(SetPreferredLanguages)(LPCWSTR pLanguages) = 0;
// Retrieve the preferred subtitle languages as ISO 639-2 language codes, comma separated
// If the result is NULL, no language has been set
// If no subtitle language is set, the main language preference is used.
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetPreferredSubtitleLanguages)(LPWSTR * ppLanguages) = 0;
// Set the preferred subtitle languages as ISO 639-2 language codes, comma separated
// To reset to no preferred language, pass NULL or the empty string
// If no subtitle language is set, the main language preference is used.
STDMETHOD(SetPreferredSubtitleLanguages)(LPCWSTR pLanguages) = 0;
// Get the current subtitle mode
// See enum for possible values
STDMETHOD_(LAVSubtitleMode, GetSubtitleMode)() = 0;
// Set the current subtitle mode
// See enum for possible values
STDMETHOD(SetSubtitleMode)(LAVSubtitleMode mode) = 0;
// Get the subtitle matching language flag
// TRUE = Only subtitles with a language in the preferred list will be used; FALSE = All subtitles will be used
// @deprecated - do not use anymore, deprecated and non-functional, replaced by advanced subtitle mode
STDMETHOD_(BOOL, GetSubtitleMatchingLanguage)() = 0;
// Set the subtitle matching language flag
// TRUE = Only subtitles with a language in the preferred list will be used; FALSE = All subtitles will be used
// @deprecated - do not use anymore, deprecated and non-functional, replaced by advanced subtitle mode
STDMETHOD(SetSubtitleMatchingLanguage)(BOOL dwMode) = 0;
// Control whether a special "Forced Subtitles" stream will be created for PGS subs
STDMETHOD_(BOOL, GetPGSForcedStream)() = 0;
// Control whether a special "Forced Subtitles" stream will be created for PGS subs
STDMETHOD(SetPGSForcedStream)(BOOL bFlag) = 0;
// Get the PGS forced subs config
// TRUE = only forced PGS frames will be shown, FALSE = all frames will be shown
STDMETHOD_(BOOL, GetPGSOnlyForced)() = 0;
// Set the PGS forced subs config
// TRUE = only forced PGS frames will be shown, FALSE = all frames will be shown
STDMETHOD(SetPGSOnlyForced)(BOOL bForced) = 0;
// Get the VC-1 Timestamp Processing mode
// 0 - No Timestamp Correction, 1 - Always Timestamp Correction, 2 - Auto (Correction for Decoders that need it)
STDMETHOD_(int, GetVC1TimestampMode)() = 0;
// Set the VC-1 Timestamp Processing mode
// 0 - No Timestamp Correction, 1 - Always Timestamp Correction, 2 - Auto (Correction for Decoders that need it)
STDMETHOD(SetVC1TimestampMode)(int iMode) = 0;
// Set whether substreams (AC3 in TrueHD, for example) should be shown as a separate stream
STDMETHOD(SetSubstreamsEnabled)(BOOL bSubStreams) = 0;
// Check whether substreams (AC3 in TrueHD, for example) should be shown as a separate stream
STDMETHOD_(BOOL, GetSubstreamsEnabled)() = 0;
// @deprecated - no longer required
STDMETHOD(SetVideoParsingEnabled)(BOOL bEnabled) = 0;
// @deprecated - no longer required
STDMETHOD_(BOOL, GetVideoParsingEnabled)() = 0;
// Set if LAV Splitter should try to fix broken HD-PVR streams
// @deprecated - no longer required
STDMETHOD(SetFixBrokenHDPVR)(BOOL bEnabled) = 0;
// Query if LAV Splitter should try to fix broken HD-PVR streams
// @deprecated - no longer required
STDMETHOD_(BOOL, GetFixBrokenHDPVR)() = 0;
// Control whether the given format is enabled
STDMETHOD_(HRESULT, SetFormatEnabled)(LPCSTR strFormat, BOOL bEnabled) = 0;
// Check if the given format is enabled
STDMETHOD_(BOOL, IsFormatEnabled)(LPCSTR strFormat) = 0;
// Set if LAV Splitter should always completely remove the filter connected to its Audio Pin when the audio stream
// is changed
STDMETHOD(SetStreamSwitchRemoveAudio)(BOOL bEnabled) = 0;
// Query if LAV Splitter should always completely remove the filter connected to its Audio Pin when the audio stream
// is changed
STDMETHOD_(BOOL, GetStreamSwitchRemoveAudio)() = 0;
// Advanced Subtitle configuration. Refer to the documentation for details.
// If no advanced config exists, will be NULL.
// Memory for the string will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetAdvancedSubtitleConfig)(LPWSTR * ppAdvancedConfig) = 0;
// Advanced Subtitle configuration. Refer to the documentation for details.
// To reset the config, pass NULL or the empty string.
// If no subtitle language is set, the main language preference is used.
STDMETHOD(SetAdvancedSubtitleConfig)(LPCWSTR pAdvancedConfig) = 0;
// Set if LAV Splitter should prefer audio streams for the hearing or visually impaired
STDMETHOD(SetUseAudioForHearingVisuallyImpaired)(BOOL bEnabled) = 0;
// Get if LAV Splitter should prefer audio streams for the hearing or visually impaired
STDMETHOD_(BOOL, GetUseAudioForHearingVisuallyImpaired)() = 0;
// Set the maximum queue size, in megabytes
STDMETHOD(SetMaxQueueMemSize)(DWORD dwMaxSize) = 0;
// Get the maximum queue size, in megabytes
STDMETHOD_(DWORD, GetMaxQueueMemSize)() = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
// Get Tray Icon
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Toggle whether higher quality audio streams are preferred
STDMETHOD(SetPreferHighQualityAudioStreams)(BOOL bEnabled) = 0;
// Toggle whether higher quality audio streams are preferred
STDMETHOD_(BOOL, GetPreferHighQualityAudioStreams)() = 0;
// Toggle whether Matroska Linked Segments should be loaded from other files
STDMETHOD(SetLoadMatroskaExternalSegments)(BOOL bEnabled) = 0;
// Get whether Matroska Linked Segments should be loaded from other files
STDMETHOD_(BOOL, GetLoadMatroskaExternalSegments)() = 0;
// Get the list of available formats
// Memory for the string array will be allocated, and has to be free'ed by the caller with CoTaskMemFree
STDMETHOD(GetFormats)(LPSTR * *formats, UINT * nFormats) = 0;
// Set the duration (in ms) of analysis for network streams (to find the streams and codec parameters)
STDMETHOD(SetNetworkStreamAnalysisDuration)(DWORD dwDuration) = 0;
// Get the duration (in ms) of analysis for network streams (to find the streams and codec parameters)
STDMETHOD_(DWORD, GetNetworkStreamAnalysisDuration)() = 0;
// Set the maximum queue size, in number of packets
STDMETHOD(SetMaxQueueSize)(DWORD dwMaxSize) = 0;
// Get the maximum queue size, in number of packets
STDMETHOD_(DWORD, GetMaxQueueSize)() = 0;
// Set if LAV Splitter should reselect subs based on given rules when audio stream is changed
STDMETHOD(SetStreamSwitchReselectSubtitles)(BOOL bEnabled) = 0;
// Query if LAV Splitter should reselect subs based on given rules when audio stream is changed
STDMETHOD_(BOOL, GetStreamSwitchReselectSubtitles)() = 0;
};
/*
* Copyright (C) 2010-2021 Hendrik Leppkes
* http://www.1f0.de
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#pragma once
// {FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F}
DEFINE_GUID(IID_ILAVVideoSettings, 0xfa40d6e9, 0x4d38, 0x4761, 0xad, 0xd2, 0x71, 0xa9, 0xec, 0x5f, 0xd3, 0x2f);
// {1CC2385F-36FA-41B1-9942-5024CE0235DC}
DEFINE_GUID(IID_ILAVVideoStatus, 0x1cc2385f, 0x36fa, 0x41b1, 0x99, 0x42, 0x50, 0x24, 0xce, 0x2, 0x35, 0xdc);
// Codecs supported in the LAV Video configuration
// Codecs not listed here cannot be turned off. You can request codecs to be added to this list, if you wish.
typedef enum LAVVideoCodec
{
Codec_H264,
Codec_VC1,
Codec_MPEG1,
Codec_MPEG2,
Codec_MPEG4,
Codec_MSMPEG4,
Codec_VP8,
Codec_WMV3,
Codec_WMV12,
Codec_MJPEG,
Codec_Theora,
Codec_FLV1,
Codec_VP6,
Codec_SVQ,
Codec_H261,
Codec_H263,
Codec_Indeo,
Codec_TSCC,
Codec_Fraps,
Codec_HuffYUV,
Codec_QTRle,
Codec_DV,
Codec_Bink,
Codec_Smacker,
Codec_RV12,
Codec_RV34,
Codec_Lagarith,
Codec_Cinepak,
Codec_Camstudio,
Codec_QPEG,
Codec_ZLIB,
Codec_QTRpza,
Codec_PNG,
Codec_MSRLE,
Codec_ProRes,
Codec_UtVideo,
Codec_Dirac,
Codec_DNxHD,
Codec_MSVideo1,
Codec_8BPS,
Codec_LOCO,
Codec_ZMBV,
Codec_VCR1,
Codec_Snow,
Codec_FFV1,
Codec_v210,
Codec_JPEG2000,
Codec_VMNC,
Codec_FLIC,
Codec_G2M,
Codec_ICOD,
Codec_THP,
Codec_HEVC,
Codec_VP9,
Codec_TrueMotion,
Codec_VP7,
Codec_H264MVC,
Codec_CineformHD,
Codec_MagicYUV,
Codec_AV1,
Codec_VideoNB // Number of entries (do not use when dynamically linking)
} LAVVideoCodec;
// Codecs with hardware acceleration
typedef enum LAVVideoHWCodec
{
HWCodec_H264 = Codec_H264,
HWCodec_VC1 = Codec_VC1,
HWCodec_MPEG2 = Codec_MPEG2,
HWCodec_MPEG4 = Codec_MPEG4,
HWCodec_MPEG2DVD,
HWCodec_HEVC,
HWCodec_VP9,
HWCodec_H264MVC,
HWCodec_AV1,
HWCodec_NB,
} LAVVideoHWCodec;
// Flags for HW Resolution support
#define LAVHWResFlag_SD 0x0001
#define LAVHWResFlag_HD 0x0002
#define LAVHWResFlag_UHD 0x0004
// Type of hardware accelerations
typedef enum LAVHWAccel
{
HWAccel_None,
HWAccel_CUDA,
HWAccel_QuickSync,
HWAccel_DXVA2,
HWAccel_DXVA2CopyBack = HWAccel_DXVA2,
HWAccel_DXVA2Native,
HWAccel_D3D11,
HWAccel_NB, // Number of HWAccels
} LAVHWAccel;
// Deinterlace algorithms offered by the hardware decoders
typedef enum LAVHWDeintModes
{
HWDeintMode_Weave,
HWDeintMode_BOB, // Deprecated
HWDeintMode_Hardware
} LAVHWDeintModes;
// Software deinterlacing algorithms
typedef enum LAVSWDeintModes
{
SWDeintMode_None,
SWDeintMode_YADIF,
SWDeintMode_W3FDIF_Simple,
SWDeintMode_W3FDIF_Complex,
SWDeintMode_BWDIF,
} LAVSWDeintModes;
// Deinterlacing processing mode
typedef enum LAVDeintMode
{
DeintMode_Auto,
DeintMode_Aggressive,
DeintMode_Force,
DeintMode_Disable
} LAVDeintMode;
// Type of deinterlacing to perform
// - FramePerField re-constructs one frame from every field, resulting in 50/60 fps.
// - FramePer2Field re-constructs one frame from every 2 fields, resulting in 25/30 fps.
// Note: Weave will always use FramePer2Field
typedef enum LAVDeintOutput
{
DeintOutput_FramePerField,
DeintOutput_FramePer2Field
} LAVDeintOutput;
// Control the field order of the deinterlacer
typedef enum LAVDeintFieldOrder
{
DeintFieldOrder_Auto,
DeintFieldOrder_TopFieldFirst,
DeintFieldOrder_BottomFieldFirst,
} LAVDeintFieldOrder;
// Supported output pixel formats
typedef enum LAVOutPixFmts
{
LAVOutPixFmt_None = -1,
LAVOutPixFmt_YV12, // 4:2:0, 8bit, planar
LAVOutPixFmt_NV12, // 4:2:0, 8bit, Y planar, U/V packed
LAVOutPixFmt_YUY2, // 4:2:2, 8bit, packed
LAVOutPixFmt_UYVY, // 4:2:2, 8bit, packed
LAVOutPixFmt_AYUV, // 4:4:4, 8bit, packed
LAVOutPixFmt_P010, // 4:2:0, 10bit, Y planar, U/V packed
LAVOutPixFmt_P210, // 4:2:2, 10bit, Y planar, U/V packed
LAVOutPixFmt_Y410, // 4:4:4, 10bit, packed
LAVOutPixFmt_P016, // 4:2:0, 16bit, Y planar, U/V packed
LAVOutPixFmt_P216, // 4:2:2, 16bit, Y planar, U/V packed
LAVOutPixFmt_Y416, // 4:4:4, 16bit, packed
LAVOutPixFmt_RGB32, // 32-bit RGB (BGRA)
LAVOutPixFmt_RGB24, // 24-bit RGB (BGR)
LAVOutPixFmt_v210, // 4:2:2, 10bit, packed
LAVOutPixFmt_v410, // 4:4:4, 10bit, packed
LAVOutPixFmt_YV16, // 4:2:2, 8-bit, planar
LAVOutPixFmt_YV24, // 4:4:4, 8-bit, planar
LAVOutPixFmt_RGB48, // 48-bit RGB (16-bit per pixel, BGR)
LAVOutPixFmt_NB // Number of formats
} LAVOutPixFmts;
typedef enum LAVDitherMode
{
LAVDither_Ordered,
LAVDither_Random
} LAVDitherMode;
// LAV Video configuration interface
interface __declspec(uuid("FA40D6E9-4D38-4761-ADD2-71A9EC5FD32F")) ILAVVideoSettings : public IUnknown
{
// Switch to Runtime Config mode. This will reset all settings to default, and no changes to the settings will be
// saved You can use this to programmatically configure LAV Video without interfering with the users settings in the
// registry. Subsequent calls to this function will reset all settings back to defaults, even if the mode does not
// change.
//
// Note that calling this function during playback is not supported and may exhibit undocumented behaviour.
// For smooth operations, it must be called before LAV Video is connected to other filters.
STDMETHOD(SetRuntimeConfig)(BOOL bRuntimeConfig) = 0;
// Configure which codecs are enabled
// If vCodec is invalid (possibly a version difference), Get will return FALSE, and Set E_FAIL.
STDMETHOD_(BOOL, GetFormatConfiguration)(LAVVideoCodec vCodec) = 0;
STDMETHOD(SetFormatConfiguration)(LAVVideoCodec vCodec, BOOL bEnabled) = 0;
// Set the number of threads to use for Multi-Threaded decoding (where available)
// 0 = Auto Detect (based on number of CPU cores)
// 1 = 1 Thread -- No Multi-Threading
// >1 = Multi-Threading with the specified number of threads
STDMETHOD(SetNumThreads)(DWORD dwNum) = 0;
// Get the number of threads to use for Multi-Threaded decoding (where available)
// 0 = Auto Detect (based on number of CPU cores)
// 1 = 1 Thread -- No Multi-Threading
// >1 = Multi-Threading with the specified number of threads
STDMETHOD_(DWORD, GetNumThreads)() = 0;
// Set whether the aspect ratio encoded in the stream should be forwarded to the renderer,
// or the aspect ratio specified by the source filter should be kept.
// 0 = AR from the source filter
// 1 = AR from the Stream
// 2 = AR from stream if source is not reliable
STDMETHOD(SetStreamAR)(DWORD bStreamAR) = 0;
// Get whether the aspect ratio encoded in the stream should be forwarded to the renderer,
// or the aspect ratio specified by the source filter should be kept.
// 0 = AR from the source filter
// 1 = AR from the Stream
// 2 = AR from stream if source is not reliable
STDMETHOD_(DWORD, GetStreamAR)() = 0;
// Configure which pixel formats are enabled for output
// If pixFmt is invalid, Get will return FALSE and Set E_FAIL
STDMETHOD_(BOOL, GetPixelFormat)(LAVOutPixFmts pixFmt) = 0;
STDMETHOD(SetPixelFormat)(LAVOutPixFmts pixFmt, BOOL bEnabled) = 0;
// Set the RGB output range for the YUV->RGB conversion
// 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
STDMETHOD(SetRGBOutputRange)(DWORD dwRange) = 0;
// Get the RGB output range for the YUV->RGB conversion
// 0 = Auto (same as input), 1 = Limited (16-235), 2 = Full (0-255)
STDMETHOD_(DWORD, GetRGBOutputRange)() = 0;
// Set the deinterlacing field order of the hardware decoder
STDMETHOD(SetDeintFieldOrder)(LAVDeintFieldOrder fieldOrder) = 0;
// get the deinterlacing field order of the hardware decoder
STDMETHOD_(LAVDeintFieldOrder, GetDeintFieldOrder)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintAggressive)(BOOL bAggressive) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintAggressive)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintForce)(BOOL bForce) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintForce)() = 0;
// Check if the specified HWAccel is supported
// Note: This will usually only check the availability of the required libraries (ie. for NVIDIA if a recent enough
// NVIDIA driver is installed) and not check actual hardware support Returns: 0 = Unsupported, 1 = Supported, 2 =
// Currently running
STDMETHOD_(DWORD, CheckHWAccelSupport)(LAVHWAccel hwAccel) = 0;
// Set which HW Accel method is used
// See LAVHWAccel for options.
STDMETHOD(SetHWAccel)(LAVHWAccel hwAccel) = 0;
// Get which HW Accel method is active
STDMETHOD_(LAVHWAccel, GetHWAccel)() = 0;
// Set which codecs should use HW Acceleration
STDMETHOD(SetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec, BOOL bEnabled) = 0;
// Get which codecs should use HW Acceleration
STDMETHOD_(BOOL, GetHWAccelCodec)(LAVVideoHWCodec hwAccelCodec) = 0;
// Set the deinterlacing mode used by the hardware decoder
STDMETHOD(SetHWAccelDeintMode)(LAVHWDeintModes deintMode) = 0;
// Get the deinterlacing mode used by the hardware decoder
STDMETHOD_(LAVHWDeintModes, GetHWAccelDeintMode)() = 0;
// Set the deinterlacing output for the hardware decoder
STDMETHOD(SetHWAccelDeintOutput)(LAVDeintOutput deintOutput) = 0;
// Get the deinterlacing output for the hardware decoder
STDMETHOD_(LAVDeintOutput, GetHWAccelDeintOutput)() = 0;
// deprecated. HQ mode is only supported by NVIDIA CUVID/NVDEC and officially deprecated by NVIDIA
STDMETHOD(SetHWAccelDeintHQ)(BOOL bHQ) = 0;
STDMETHOD_(BOOL, GetHWAccelDeintHQ)() = 0;
// Set the software deinterlacing mode used
STDMETHOD(SetSWDeintMode)(LAVSWDeintModes deintMode) = 0;
// Get the software deinterlacing mode used
STDMETHOD_(LAVSWDeintModes, GetSWDeintMode)() = 0;
// Set the software deinterlacing output
STDMETHOD(SetSWDeintOutput)(LAVDeintOutput deintOutput) = 0;
// Get the software deinterlacing output
STDMETHOD_(LAVDeintOutput, GetSWDeintOutput)() = 0;
// DEPRECATED, use SetDeinterlacingMode
STDMETHOD(SetDeintTreatAsProgressive)(BOOL bEnabled) = 0;
// DEPRECATED, use GetDeinterlacingMode
STDMETHOD_(BOOL, GetDeintTreatAsProgressive)() = 0;
// Set the dithering mode used
STDMETHOD(SetDitherMode)(LAVDitherMode ditherMode) = 0;
// Get the dithering mode used
STDMETHOD_(LAVDitherMode, GetDitherMode)() = 0;
// Set if the MS WMV9 DMO Decoder should be used for VC-1/WMV3
STDMETHOD(SetUseMSWMV9Decoder)(BOOL bEnabled) = 0;
// Get if the MS WMV9 DMO Decoder should be used for VC-1/WMV3
STDMETHOD_(BOOL, GetUseMSWMV9Decoder)() = 0;
// Set if DVD Video support is enabled
STDMETHOD(SetDVDVideoSupport)(BOOL bEnabled) = 0;
// Get if DVD Video support is enabled
STDMETHOD_(BOOL, GetDVDVideoSupport)() = 0;
// Set the HW Accel Resolution Flags
// flags: bitmask of LAVHWResFlag flags
STDMETHOD(SetHWAccelResolutionFlags)(DWORD dwResFlags) = 0;
// Get the HW Accel Resolution Flags
// flags: bitmask of LAVHWResFlag flags
STDMETHOD_(DWORD, GetHWAccelResolutionFlags)() = 0;
// Toggle Tray Icon
STDMETHOD(SetTrayIcon)(BOOL bEnabled) = 0;
// Get Tray Icon
STDMETHOD_(BOOL, GetTrayIcon)() = 0;
// Set the Deint Mode
STDMETHOD(SetDeinterlacingMode)(LAVDeintMode deintMode) = 0;
// Get the Deint Mode
STDMETHOD_(LAVDeintMode, GetDeinterlacingMode)() = 0;
// Set the index of the GPU to be used for hardware decoding
// Only supported for CUVID and DXVA2 copy-back. If the device is not valid, it'll fallback to auto-detection
// Must be called before an input is connected to LAV Video, and the setting is non-persistent
// NOTE: For CUVID, the index defines the index of the CUDA capable device, while for DXVA2, the list includes all
// D3D9 devices
STDMETHOD(SetGPUDeviceIndex)(DWORD dwDevice) = 0;
// Get the number of available devices for the specified HWAccel
STDMETHOD_(DWORD, GetHWAccelNumDevices)(LAVHWAccel hwAccel) = 0;
// Get a list of available HWAccel devices for the specified HWAccel
STDMETHOD(GetHWAccelDeviceInfo)
(LAVHWAccel hwAccel, DWORD dwIndex, BSTR * pstrDeviceName, DWORD * pdwDeviceIdentifier) = 0;
// Get/Set the device for a specified HWAccel
// In contrast to SetGPUDeviceIndex, this setting is hwaccel-specific and persistent
// dwDeviceIdentifier is an optional parameter that identifies the selected device (ie. its device id), set to 0 if
// not used
#define LAVHWACCEL_DEVICE_DEFAULT ((DWORD)-1)
STDMETHOD_(DWORD, GetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD * pdwDeviceIdentifier) = 0;
STDMETHOD(SetHWAccelDeviceIndex)(LAVHWAccel hwAccel, DWORD dwIndex, DWORD dwDeviceIdentifier) = 0;
// Temporary Override for players to disable H.264 MVC decoding
// This is not a permanent setting and not saved, but can be used by players to offer a "Play in 2D" option, or
// similar. A setting of FALSE disable MVC decoding temporarily Note that the override cannot force-enable the
// option if its turned off through SetFormatConfiguration
STDMETHOD(SetH264MVCDecodingOverride)(BOOL bEnabled) = 0;
// Enable the creation of the Closed Caption output pin
STDMETHOD(SetEnableCCOutputPin)(BOOL bEnabled) = 0;
};
// LAV Video status interface
interface __declspec(uuid("1CC2385F-36FA-41B1-9942-5024CE0235DC")) ILAVVideoStatus : public IUnknown
{
// Get the name of the active decoder (can return NULL if none is active)
STDMETHOD_(LPCWSTR, GetActiveDecoderName)() = 0;
// Get the name of the currently active hwaccel device
STDMETHOD(GetHWAccelActiveDevice)(BSTR * pstrDeviceName) = 0;
};
This directory contains header files of non-standard Interfaces that LAV Filters support.
---------------------------------------------------------------------------------------------
----------------------------------------------
IKeyFrameInfo - implemented by LAV Splitter
---------------------------------------------
IKeyFrameInfo allows players to query the position of keyframes, so they can redirect seeking
requests to those positions for very smooth seek events. Only fully supported on MKV files.
----------------------------------------------
ITrackInfo - implemented by LAV Splitter
---------------------------------------------
ITrackInfo is an interface to obtain additional information about the streams in a file.
The order to query the streams is the same as returned by IAMStreamSelect::Info
----------------------------------------------
IGraphRebuildDelegate
---------------------------------------------
IGraphRebuildDelegate is not an interface implemented by LAV Splitter itself.
It is designed to offer the ability to take over the graph-building process from the player's side.
It only exports one function which LAV Splitter will call when a stream change happens on the user's requests,
and then the player can take care of the graph changes itself instead of relying on LAV Splitter to do it.
To use IGraphRebuildDelegate, the player needs to implement it, and share the implementing class with LAV Splitter
through the "IObjectWithSite" interface, which is implemented by LAV Splitter.
----------------------------------------------
LAVSplitterSettings / LAVAudioSettings
----------------------------------------------
These interfaces are used to configure LAV programmatically, so the player can do configuration changes.
cd /d "%~dp0"
regsvr32.exe LAVAudio.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe LAVSplitter.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe LAVVideo.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVAudio.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVSplitter.ax
\ No newline at end of file
cd /d "%~dp0"
regsvr32.exe /u LAVVideo.ax
\ No newline at end of file
@echo on
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close) && exit
cd /d %~dp0
IF EXIST "%PROGRAMFILES(X86)%" (GOTO 64BIT) ELSE (GOTO 32BIT)
:64BIT
echo "install LAVFilters64"
xcopy LavFilters64 C:\LavFilters\
GOTO END
:32BIT
echo "install LAVFilters32"
xcopy LavFilters32 C:\LavFilters\
GOTO END
:END
cd C:\LavFilters\
call install_audio.bat
call install_splitter.bat
call install_video.bat
pause
\ No newline at end of file
common==0.1.2
dual==0.0.10
tight==0.1.0
data==0.4
prox==0.0.17
azure-cognitiveservices-speech==1.19.0
cn2an==0.5.16
Flask==2.0.2
......@@ -5,15 +10,15 @@ flask_cors==3.0.10
ijson==3.2.1
LAC==2.1.2
librosa==0.8.1
numpy==1.19.3
onnxruntime==1.14.0
numpy
onnxruntime
opencv_python==4.4.0.46
openpyxl==3.0.9
paddle==1.0.2
paddleocr==2.3.0.1
paddlepaddle==2.2.0
paddlespeech==0.1.0
parakeet==0.24
paddlespeech
# parakeet==0.24
Pillow==9.5.0
pyaudio==0.2.13
pyclipper==1.3.0
......@@ -27,6 +32,6 @@ Shapely==1.8.0
SoundFile==0.10.2
tqdm==4.62.3
visualdl==2.2.1
webrtcvad==2.0.10
# webrtcvad==2.0.10
yacs==0.1.8
zhconv==1.4.3
# -*- mode: python ; coding: utf-8 -*-
block_cipher = None
env_dir = 'C:/Users/AIA/.conda/envs/testmovie/Lib/site-packages/'
missingPkgs = ['Microsoft.CognitiveServices.Speech.core.dll', 'decorator.py', 'google', 'paddle', 'paddleocr', 'PIL', 'requests', 'urllib3', 'http', 'idna', 'certifi', 'setuptools', 'astor', 'charset_normalizer']
def add_missing_packages(lst):
pkgs = []
for x in lst:
if '.' in x:
pkgs.append((env_dir + x, '.'))
else:
pkgs.append((env_dir + x , x))
return pkgs
pkgPaths = add_missing_packages(missingPkgs)
a = Analysis(
['start.py'],
pathex=[],
binaries=[],
datas=[('res','res')] + pkgPaths,
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False,
)
pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
exe = EXE(
pyz,
a.scripts,
[],
exclude_binaries=True,
name='start',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=False,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
upx_exclude=[],
name='start',
)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment