Ejemplo n.º 1
0
WavePlayer::WavePlayer(void)
	: m_hWaveoutDev(NULL)
	, m_hThreadPlay(NULL)
	, m_hThreadDecode(NULL)
	, m_hEventDecode(NULL)
	, m_ePlayStat(Play_Stop)
	, m_pDecoder(NULL)
	, m_msgDecodeThread(TMSG_CLOSE)
	, m_msgPlayThread(TMSG_CLOSE)
{
	memset(&m_waveData, 0, sizeof(WaveData));

	// 为播放缓存申请内存堆
	m_wBlock.pWaveHdr = allocBlocks(BLOCK_SIZE, BLOCK_COUNT);
	m_wBlock.wfreeblock = BLOCK_COUNT;
	m_wBlock.wcurrblock = 0;
	m_wBlock.wpos = 0;

	m_hEventDecode = CreateEvent(NULL, FALSE, FALSE, NULL);
	ATLASSERT(m_hEventDecode);

	m_pDecoder = new AMRDecoder();
	ATLASSERT(m_pDecoder);

	// 初始化临界区
	InitializeCriticalSection(&m_cs);
}
Ejemplo n.º 2
0
static bool replaceParentSave(Block* parentSave, int level)
{
    Block replacement;
    bool success = allocBlocks(level, 1, &replacement);
    setBlockStatus(replacement, SUBDIV);
    if(!success)
        return false;
    *parentSave = replacement;
    allocForSub(*parentSave);
    //have a new (allocated) parent block
    //set the allocation status of that to subdiv
    return true;
}
Ejemplo n.º 3
0
void* mmAlloc(size_t size)
{
    /*
    puts("");
    for(int j = 0; j < 60; j++)
        putchar('*');
    puts(""); */
    //printf("Allocating %lu bytes\n", size);
    int parentLevel = 2;  //start with smallest block and count up
    while(blockSize[parentLevel] < size)
    {
        parentLevel--;
    }
    int level = parentLevel + 1;
    if(level < 0 || level >= LEVELS)
    {
        //puts("WARNING: Couldn't pick a good block size.");
        level = 0;
    }
    size_t bsize = blockSize[level];
    int numBlocks = size / bsize;
    if(size % bsize)
        numBlocks++;
    //printf("Allocating a group of %d blocks of level %d\n", numBlocks, level);
    Block first;
    bool success = allocBlocks(level, numBlocks, &first);
    if(success)
    {
        //printf("Allocated %lu bytes, block: ", size);
        //printBlock(first);
        //puts("");
        return getBlockPtr(first);
    }
    else
    {
        //puts("Allocation failed!");
        return NULL;
    }
}