VirtualBox

Ignore:
Timestamp:
Dec 7, 2020 2:44:34 PM (4 years ago)
Author:
vboxsync
Message:

CUE, DevATA: Added support for MODE2/2352 tracks in CUE sheets and IDE/ATAPI emulation (see bugref:6975).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Storage/DevATA.cpp

    r86481 r87048  
    20032003    int rc;
    20042004    uint64_t cbBlockRegion = 0;
     2005    VDREGIONDATAFORM enmDataForm;
    20052006
    20062007    Assert(s->uTxDir == PDMMEDIATXDIR_FROM_DEVICE);
     
    20162017
    20172018    rc = pDevR3->pDrvMedia->pfnQueryRegionPropertiesForLba(pDevR3->pDrvMedia, iATAPILBA, NULL, NULL,
    2018                                                       &cbBlockRegion, NULL);
     2019                                                      &cbBlockRegion, &enmDataForm);
    20192020    if (RT_SUCCESS(rc))
    20202021    {
     
    20692070                {
    20702071                    uint8_t abTmp[2352];
     2072                    uint8_t cbSkip;
     2073
    20712074                    rc = pDevR3->pDrvMedia->pfnRead(pDevR3->pDrvMedia, (uint64_t)i * 2352, &abTmp[0], 2352);
    20722075                    if (RT_FAILURE(rc))
    20732076                        break;
    20742077
    2075                     memcpy(pbBuf, &abTmp[16], 2048);
     2078                    /* Mode 2 has an additional subheader before user data; we need to
     2079                     * skip 16 bytes for Mode 1 (sync + header) and 20 bytes for Mode 2       +
     2080                     * (sync + header + subheader).
     2081                     */
     2082                    switch (enmDataForm) {
     2083                    case VDREGIONDATAFORM_MODE2_2352:
     2084                    case VDREGIONDATAFORM_XA_2352:
     2085                        cbSkip = 24;
     2086                        break;
     2087                    case VDREGIONDATAFORM_MODE1_2352:
     2088                        cbSkip = 16;
     2089                        break;
     2090                    default:
     2091                        AssertMsgFailed(("Unexpected region form (%#u), using default skip value\n", enmDataForm));
     2092                        cbSkip = 16;
     2093                    }
     2094                    memcpy(pbBuf, &abTmp[cbSkip], 2048);
    20762095                    pbBuf += 2048;
    20772096                }
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette