VirtualBox

Changeset 89456 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Jun 2, 2021 8:43:16 AM (4 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
144810
Message:

Audio/ValKit: More code for recording tests. bugref:10008

Location:
trunk/src/VBox/Devices/Audio
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/AudioTestService.cpp

    r89431 r89456  
    588588
    589589/**
    590  * Verifies and processes a "TONE PLAY" request.
     590 * Verifies and processes a "TN PLY" request.
    591591 *
    592592 * @returns IPRT status code.
     
    610610    PATSPKTREQTONEPLAY pReq = (PATSPKTREQTONEPLAY)pPktHdr;
    611611    rc = pThis->Callbacks.pfnTonePlay(pThis->Callbacks.pvUser, &pReq->StreamCfg, &pReq->ToneParms);
     612
     613    int rc2 = atsReplyAck(pThis, pClient, pPktHdr);
     614    if (RT_SUCCESS(rc))
     615        rc = rc2;
     616
     617    return rc;
     618}
     619
     620/**
     621 * Verifies and processes a "TN REC" request.
     622 *
     623 * @returns IPRT status code.
     624 * @param   pThis               The ATS instance.
     625 * @param   pClient             The ATS client structure.
     626 * @param   pPktHdr             The packet header.
     627 */
     628static int atsDoToneRecord(PATSSERVER pThis, PATSCLIENTINST pClient, PCATSPKTHDR pPktHdr)
     629{
     630    int rc = VINF_SUCCESS;
     631
     632    if (pPktHdr->cb < sizeof(ATSPKTREQTONEREC))
     633        return atsReplyBadSize(pThis, pClient, pPktHdr, sizeof(ATSPKTREQTONEREC));
     634
     635    if (pClient->enmState != ATSCLIENTSTATE_READY)
     636        return atsReplyInvalidState(pThis, pClient, pPktHdr);
     637
     638    if (!pThis->Callbacks.pfnToneRecord)
     639        return atsReplyRC(pThis, pClient, pPktHdr, VERR_NOT_SUPPORTED, "Recording tones not supported");
     640
     641    PATSPKTREQTONEREC pReq = (PATSPKTREQTONEREC)pPktHdr;
     642    rc = pThis->Callbacks.pfnToneRecord(pThis->Callbacks.pvUser, &pReq->StreamCfg, &pReq->ToneParms);
    612643
    613644    int rc2 = atsReplyAck(pThis, pClient, pPktHdr);
     
    651682    else if (atsIsSameOpcode(pPktHdr, ATSPKT_OPCODE_TONE_PLAY))
    652683        rc = atsDoTonePlay(pThis, pClient, pPktHdr);
     684    else if (atsIsSameOpcode(pPktHdr, ATSPKT_OPCODE_TONE_RECORD))
     685        rc = atsDoToneRecord(pThis, pClient, pPktHdr);
    653686    /* Misc: */
    654687    else
  • trunk/src/VBox/Devices/Audio/AudioTestService.h

    r89431 r89456  
    6060     */
    6161    DECLR3CALLBACKMEMBER(int, pfnTonePlay, (void const *pvUser, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms));
     62
     63    /**
     64     * Records a test tone.
     65     *
     66     * @returns VBox status code.
     67     * @param   pvUser          User-supplied pointer to context data. Optional.
     68     * @param   pStreamCfg      Audio stream configuration to use for stream to play tone on.
     69     * @param   cMsDelay        Delay (in ms) before start recording.
     70     * @param   cMsDuration     Duration (in ms) to record.
     71     */
     72    DECLR3CALLBACKMEMBER(int, pfnToneRecord, (void const *pvUser, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms));
     73
    6274    /** Pointer to opaque user-provided context data. */
    6375    void const *pvUser;
  • trunk/src/VBox/Devices/Audio/AudioTestServiceClient.cpp

    r89431 r89456  
    376376
    377377/**
     378 * Tells the server to record a (test) tone.
     379 *
     380 * @returns VBox status code.
     381 * @param   pClient             Client to issue command for.
     382 * @param   pStreamCfg          Audio stream configuration to use.
     383 * @param   pToneParms          Tone parameters to use.
     384 * @note    How (and if) the server plays a tone depends on the actual implementation side.
     385 */
     386int AudioTestSvcClientToneRecord(PATSCLIENT pClient, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms)
     387{
     388    ATSPKTREQTONEREC Req;
     389
     390    memcpy(&Req.StreamCfg, pStreamCfg, sizeof(PDMAUDIOSTREAMCFG));
     391    memcpy(&Req.ToneParms, pToneParms, sizeof(AUDIOTESTTONEPARMS));
     392
     393    audioTestSvcClientReqHdrInit(&Req.Hdr, sizeof(Req), ATSPKT_OPCODE_TONE_RECORD, 0);
     394
     395    int rc = audioTestSvcClientSendMsg(pClient, &Req, sizeof(Req), NULL, 0);
     396    if (RT_SUCCESS(rc))
     397        rc = audioTestSvcClientRecvAck(pClient);
     398
     399    return rc;
     400}
     401
     402/**
    378403 * Disconnects from an ATS server.
    379404 *
  • trunk/src/VBox/Devices/Audio/AudioTestServiceClient.h

    r89431 r89456  
    3434int AudioTestSvcClientTestSetEnd(PATSCLIENT pClient, const char *pszTag);
    3535int AudioTestSvcClientTonePlay(PATSCLIENT pClient, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms);
     36int AudioTestSvcClientToneRecord(PATSCLIENT pClient, PPDMAUDIOSTREAMCFG pStreamCfg, PAUDIOTESTTONEPARMS pToneParms);
    3637int AudioTestSvcClientClose(PATSCLIENT pClient);
    3738
  • trunk/src/VBox/Devices/Audio/AudioTestServiceProtocol.h

    r89431 r89456  
    153153typedef ATSPKTREQTSETEND *PATSPKTREQTSETEND;
    154154
    155 #define ATSPKT_OPCODE_TONE_PLAY         "TNPLY   "
    156 
    157 /**
    158  * The TONE PLAY request structure.
     155#define ATSPKT_OPCODE_TONE_PLAY         "TN PLY  "
     156
     157/**
     158 * The TN PLY request structure.
    159159 */
    160160typedef struct ATSPKTREQTONEPLAY
     
    177177typedef ATSPKTREQTONEPLAY *PATSPKTREQTONEPLAY;
    178178
     179#define ATSPKT_OPCODE_TONE_RECORD       "TN REC  "
     180
     181/**
     182 * The TN REC request structure.
     183 */
     184typedef struct ATSPKTREQTONEREC
     185{
     186    /** Embedded packet header. */
     187    ATSPKTHDR          Hdr;
     188    /** Stream configuration to use for recording the tone.
     189     *  Note: Depending on the actual implementation this configuration might or might not be available / supported. */
     190    PDMAUDIOSTREAMCFG  StreamCfg;
     191    /** Test tone parameters for playback. */
     192    AUDIOTESTTONEPARMS ToneParms;
     193#if HC_ARCH_BITS == 64
     194    uint8_t            aPadding[4+8];
     195#else
     196    uint8_t            aPadding[6+8];
     197#endif
     198} ATSPKTREQTONEREC;
     199AssertCompileSizeAlignment(ATSPKTREQTONEREC, ATSPKT_ALIGNMENT);
     200/** Pointer to a ATSPKTREQTONEREC structure. */
     201typedef ATSPKTREQTONEREC *PATSPKTREQTONEREC;
     202
    179203/* No additional structure for the reply (just standard STATUS packet). */
    180204
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