[問題] 一個很奇怪的現像
用FMOD寫了一個撥放streaming audio data的程式,
以下是要去進去使用 callback function的地方.
if( isPreload == true && isBuffering == false && isPlaying == false &&
write_count - read_count >= 0 )
{
..............
exinfo.pcmreadcallback = pcmreadcallback;
..............
}
以下是 callback function, 名稱為 pcmreadcallback
const int memcpy_length = 6400;
static FMOD_RESULT F_CALLBACK pcmreadcallback( FMOD_SOUND *sound, void *data,
unsigned int datalen )
{
...............
char * wa = (char *)data;
if( isBuffering == false )
{
memcpy( wa, (char *)&sp2_sound_buffer_bank[rfp], memcpy_length );
}
read_count += 20;
rfp += memcpy_length;
if( rfp >= sp2_sound_buffer_length )
{
rfp = 0;
rfp_round++;
}
return FMOD_OK;
}
其中有用到一個 memcpy_length 這個設為 const 的變數, 宣告在函數外.
還有一個 datalen, 其值與 memcpy_length 相同, 為其它地方在調用 callback 函數
時傳進來的.
一個奇怪的現像是, 在 pcmreadcallback 裡, 若使用 memcpy_length 時, 會導致每
個 buffer 重填時增加 20個資料長度的延遲, 但若是使用 datalen取代 memcpy_length,
則完全不會產生延遲, 速度飛快. 搞不懂兩個一樣的值, 為什麼會有這種差別.
能請高手解釋一下嗎? 謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 113.10.74.201
推
05/13 02:24, , 1F
05/13 02:24, 1F
→
05/13 02:49, , 2F
05/13 02:49, 2F
→
05/13 12:40, , 3F
05/13 12:40, 3F
→
05/13 12:41, , 4F
05/13 12:41, 4F
→
05/13 12:41, , 5F
05/13 12:41, 5F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章