* Replaced `qtdemux` with a Media Foundation-based MP4 demuxer on Windows. * The Media Foundation-based MP4 demuxer supports **pull mode only** due to the design of the Media Foundation APIs. For fragmented MP4 (fMP4) segments, each segment is demuxed independently because of API limitations. After processing each segment, the demuxer internally creates a new Source Reader. * **HLSConnectionHolder:** Headers are now sent with every segment because the MP4 demuxer reloads the Source Reader for each segment. Headers are intentionally not cached to avoid unnecessary connections. Additionally, HLS streams with separate audio renditions now seek to the last segment when seeking to the end of the stream, matching the behavior of standard HLS streams. * **JavaSource:** Removed the unused `update` flag and moved caps setting into a dedicated switch case. * Added trace support for Media Foundation-based plugins (both the demuxer and decoder). The tracing infrastructure is still a work in progress and will be expanded as needed for debugging. It is disabled by default and can only be enabled at compile time. * H.264 video from MP4 and fMP4 (HLS) is now decoded using Media Foundation instead of DirectShow. H.264 video in TS-based HLS streams continues to use DirectShow. This change avoids several DirectShow issues encountered with the new MP4 demuxer and reduces implementation complexity. * Updated `MFWrapper` to properly support H.264 decoding. Unlike H.265, H.264 requires using the display aperture for the display resolution, does not signal frame availability, requires handling format changes, and must fully drain output before accepting new input samples. * Modified the cache implementation to support pull mode for the HLS progress buffer. * Added pull mode support to the HLS progress buffer. * Changed `progressbuffer` to use a static source pad instead of a dynamic one, simplifying pipeline construction. The need for a dynamic source pad is unclear. * Performed minor cleanup by removing dead and obsolete code. * The progress buffer is now forced when `JavaSource` does not support pull mode (for example, with `jar` and `jrt` protocols). This provides a simple workaround until native pull mode support is implemented for these protocols. In particular, `jar` does not provide true random access at the Java layer anyway.
--------- - [x] I confirm that I make this contribution in accordance with the [OpenJDK Interim AI Policy](https://openjdk.org/legal/ai). ------------- Commit messages: - 8305842: Replace qtdemux with MP4 demux based on Media Foundation [v3] - 8305842: Replace qtdemux with MP4 demux based on Media Foundation [v2] - 8305842: Replace qtdemux with MP4 demux based on Media Foundation Changes: https://git.openjdk.org/jfx/pull/2206/files Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2206&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8331458 Stats: 4368 lines in 37 files changed: 3433 ins; 593 del; 342 mod Patch: https://git.openjdk.org/jfx/pull/2206.diff Fetch: git fetch https://git.openjdk.org/jfx.git pull/2206/head:pull/2206 PR: https://git.openjdk.org/jfx/pull/2206
