VirtualBox

Changeset 87048 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Dec 7, 2020 2:44:34 PM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
141794
Message:

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

Location:
trunk/src/VBox
Files:
2 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                }
  • trunk/src/VBox/Storage/CUE.cpp

    r82968 r87048  
    9696    CUEKEYWORD_MODE1_2048,
    9797    CUEKEYWORD_MODE1_2352,
     98    CUEKEYWORD_MODE2_2352,
    9899    CUEKEYWORD_AUDIO,
    99100    CUEKEYWORD_REM
     
    253254    {RT_STR_TUPLE("MODE1/2048"), CUEKEYWORD_MODE1_2048},
    254255    {RT_STR_TUPLE("MODE1/2352"), CUEKEYWORD_MODE1_2352},
     256    {RT_STR_TUPLE("MODE2/2352"), CUEKEYWORD_MODE2_2352},
    255257    {RT_STR_TUPLE("AUDIO"),      CUEKEYWORD_AUDIO},
    256258    {RT_STR_TUPLE("REM"),        CUEKEYWORD_REM}
     
    960962                if (   cueTokenizerSkipIfIsKeywordEqual(pTokenizer, CUEKEYWORD_AUDIO)
    961963                    || cueTokenizerSkipIfIsKeywordEqual(pTokenizer, CUEKEYWORD_MODE1_2048)
    962                     || cueTokenizerSkipIfIsKeywordEqual(pTokenizer, CUEKEYWORD_MODE1_2352))
     964                    || cueTokenizerSkipIfIsKeywordEqual(pTokenizer, CUEKEYWORD_MODE1_2352)
     965                    || cueTokenizerSkipIfIsKeywordEqual(pTokenizer, CUEKEYWORD_MODE2_2352))
    963966                {
    964967                    /*
     
    981984                                pRegion->cbBlock     = 2352;
    982985                                pRegion->enmDataForm = VDREGIONDATAFORM_MODE1_2352;
     986                            }
     987                            else if (enmDataMode == CUEKEYWORD_MODE2_2352)
     988                            {
     989                                pRegion->cbBlock     = 2352;
     990                                pRegion->enmDataForm = VDREGIONDATAFORM_MODE2_2352;
    983991                            }
    984992                            else if (enmDataMode == CUEKEYWORD_AUDIO)
Note: See TracChangeset for help on using the changeset viewer.

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