Changeset 67467 in vbox
- Timestamp:
- Jun 19, 2017 10:27:57 AM (8 years ago)
- svn:sync-xref-src-repo-rev:
- 116203
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Audio/DevHDA.cpp
r67462 r67467 4876 4876 AssertPtr(pCircBuf); 4877 4877 4878 void *pvDst; 4879 size_t cbDst; 4880 4881 uint32_t cbWritten = 0; 4882 4883 RTCircBufAcquireWriteBlock(pCircBuf, cbToWrite, &pvDst, &cbDst); 4884 4885 if (cbDst) 4886 { 4887 int rc2 = AudioMixerSinkRead(pSink->pMixSink, AUDMIXOP_COPY, pvDst, (uint32_t)cbDst, &cbWritten); 4888 AssertRC(rc2); 4889 4890 Assert(cbDst >= cbWritten); 4891 Log2Func(("[SD%RU8]: %zu/%zu bytes written\n", pStream->u8SD, cbWritten, cbDst)); 4878 int rc = VINF_SUCCESS; 4879 4880 uint32_t cbWrittenTotal = 0; 4881 uint32_t cbLeft = RT_MIN(cbToWrite, (uint32_t)RTCircBufFree(pCircBuf)); 4882 4883 while (cbLeft) 4884 { 4885 void *pvDst; 4886 size_t cbDst; 4887 4888 uint32_t cbRead = 0; 4889 4890 RTCircBufAcquireWriteBlock(pCircBuf, cbToWrite, &pvDst, &cbDst); 4891 4892 if (cbDst) 4893 { 4894 rc = AudioMixerSinkRead(pSink->pMixSink, AUDMIXOP_COPY, pvDst, (uint32_t)cbDst, &cbRead); 4895 AssertRC(rc); 4896 4897 Assert(cbDst >= cbRead); 4898 Log2Func(("[SD%RU8]: %zu/%zu bytes read\n", pStream->u8SD, cbRead, cbDst)); 4892 4899 4893 4900 #ifdef VBOX_AUDIO_DEBUG_DUMP_PCM_DATA 4894 RTFILE fh; 4895 RTFileOpen(&fh, VBOX_AUDIO_DEBUG_DUMP_PCM_DATA_PATH "hdaStreamWrite.pcm", 4896 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE); 4897 RTFileWrite(fh, pvDst, cbWritten, NULL); 4898 RTFileClose(fh); 4899 #endif 4900 } 4901 4902 RTCircBufReleaseWriteBlock(pCircBuf, cbWritten); 4901 RTFILE fh; 4902 RTFileOpen(&fh, VBOX_AUDIO_DEBUG_DUMP_PCM_DATA_PATH "hdaStreamWrite.pcm", 4903 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE); 4904 RTFileWrite(fh, pvDst, cbRead, NULL); 4905 RTFileClose(fh); 4906 #endif 4907 } 4908 4909 RTCircBufReleaseWriteBlock(pCircBuf, cbRead); 4910 4911 if (RT_FAILURE(rc)) 4912 break; 4913 4914 Assert(cbLeft >= cbRead); 4915 cbLeft -= cbRead; 4916 4917 cbWrittenTotal += cbRead; 4918 } 4903 4919 4904 4920 if (pcbWritten) 4905 *pcbWritten = cbWritten ;4906 4907 return VINF_SUCCESS;4921 *pcbWritten = cbWrittenTotal; 4922 4923 return rc; 4908 4924 } 4909 4925 … … 4938 4954 AssertPtr(pCircBuf); 4939 4955 4940 void *pvSrc; 4941 size_t cbSrc; 4942 4943 uint32_t cbRead = 0; 4944 4945 RTCircBufAcquireReadBlock(pCircBuf, cbToRead, &pvSrc, &cbSrc); 4946 4947 if (cbSrc) 4948 { 4949 Log2Func(("[SD%RU8]: Reading %zu bytes ...\n", pStream->u8SD, cbSrc)); 4950 4956 int rc = VINF_SUCCESS; 4957 4958 uint32_t cbReadTotal = 0; 4959 uint32_t cbLeft = RT_MIN(cbToRead, (uint32_t)RTCircBufUsed(pCircBuf)); 4960 4961 while (cbLeft) 4962 { 4963 void *pvSrc; 4964 size_t cbSrc; 4965 4966 uint32_t cbWritten = 0; 4967 4968 RTCircBufAcquireReadBlock(pCircBuf, cbToRead, &pvSrc, &cbSrc); 4969 4970 if (cbSrc) 4971 { 4951 4972 #ifdef VBOX_AUDIO_DEBUG_DUMP_PCM_DATA 4952 RTFILE fh; 4953 RTFileOpen(&fh, VBOX_AUDIO_DEBUG_DUMP_PCM_DATA_PATH "hdaStreamRead.pcm", 4954 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE); 4955 RTFileWrite(fh, pvSrc, cbSrc, NULL); 4956 RTFileClose(fh); 4957 #endif 4958 int rc2 = AudioMixerSinkWrite(pSink->pMixSink, AUDMIXOP_COPY, pvSrc, (uint32_t)cbSrc, &cbRead); 4959 AssertRC(rc2); 4960 4961 Assert(cbSrc >= cbRead); 4962 Log2Func(("[SD%RU8]: %zu/%zu bytes read\n", pStream->u8SD, cbRead, cbSrc)); 4963 } 4964 4965 RTCircBufReleaseReadBlock(pCircBuf, cbRead); 4973 RTFILE fh; 4974 RTFileOpen(&fh, VBOX_AUDIO_DEBUG_DUMP_PCM_DATA_PATH "hdaStreamRead.pcm", 4975 RTFILE_O_OPEN_CREATE | RTFILE_O_APPEND | RTFILE_O_WRITE | RTFILE_O_DENY_NONE); 4976 RTFileWrite(fh, pvSrc, cbSrc, NULL); 4977 RTFileClose(fh); 4978 #endif 4979 rc = AudioMixerSinkWrite(pSink->pMixSink, AUDMIXOP_COPY, pvSrc, (uint32_t)cbSrc, &cbWritten); 4980 AssertRC(rc); 4981 4982 Assert(cbSrc >= cbWritten); 4983 Log2Func(("[SD%RU8]: %zu/%zu bytes read\n", pStream->u8SD, cbWritten, cbSrc)); 4984 } 4985 4986 RTCircBufReleaseReadBlock(pCircBuf, cbWritten); 4987 4988 if (RT_FAILURE(rc)) 4989 break; 4990 4991 Assert(cbLeft >= cbWritten); 4992 cbLeft -= cbWritten; 4993 4994 cbReadTotal += cbWritten; 4995 } 4966 4996 4967 4997 if (pcbRead) 4968 *pcbRead = cbRead ;4969 4970 return VINF_SUCCESS;4998 *pcbRead = cbReadTotal; 4999 5000 return rc; 4971 5001 } 4972 5002
Note:
See TracChangeset
for help on using the changeset viewer.