SCSI command 0xAD (GPCMD_READ_DVD_STRUCTURE) with the eighth byte of the
command set to 0x00 (DVD_STRUCT_PHYSICAL) returns physical disc
information for DVDs and blu-rays. On success, the command returns
status 0, and for ordinary CDs, the command returns the error status
0x02 (SAM_STAT_CHECK_CONDITION). The format of the data returned is
different for blu-rays than for DVDs, and the second byte of the command
indicates whether to return DVD information or blu-ray information. (My
LG WH16NS40 drive actually ignores the second byte when there is a DVD
in the drive, but it returns SAM_STAT_CHECK_CONDITION when there is a
blu-ray in the drive and the second byte is not 0x01.) Windows does not
distinguish between DVDs and blu-rays in IOCTL_DISK_GET_MEDIA_TYPES, so
if the SCSI command succeeds for either disc type, report
FILE_DEVICE_DVD.
More specific media information is still not implemented.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=57790
--
v5: ntdll: Detect the optical disc type on Linux using a SCSI command.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7747
Alternatively we can avoid "makedep register" for these DLLs by using a separate IDL in dlls/xaudio2_7/.
--
v2: xaudio2: Do not register classes from xapofx or x3daudio dlls.
https://gitlab.winehq.org/wine/wine/-/merge_requests/8126
This MR fixes seek in VRChat by copying the sequence of flushes/stop/starts that Windows does.
The order on Windows is:
1. Stop sources;
2. Flush MFTs;
3. Start sources;
4. Request output down the chain of sink inputs;
6. Flush sinks; and
7. Start the clock
This takes place whether we pause before we seek or seek without pause.
Changes in version 2:
1. Add test to see when SAR requests new samples;
2. Add test to examine when step 4 from above takes place;
3. Adjust the seek implementation in `mf/session.c` to match findings from the new tests;
4. Adjust `mfmediaengine` to reflect findings from the new tests;
5. Refactored `if` statement in `session_start` to be a `switch` again
--
v6: mfmediaengine: Request sample if we are seeking.
mfmediaengine: Don't perform implicit flush on state change.
mf: Don't send MFT_MESSAGE_NOTIFY_START_OF_STREAM when seeking.
mf: Restart transforms and sinks on seek.
mf/tests: Test sequence of calls during a Pause and Seek.
mf/tests: Test when SAR requests a new sample.
https://gitlab.winehq.org/wine/wine/-/merge_requests/7932