修改async source filter,想使其读取大文件总不行呀
在main里创建了两个线程(创建了一快2m内存):一个算是完成初始化然后读buffer;一个是写buffer
修改了memfile.h里的代码如下,同时添加了一个int WriteBuf(char *buffer, int length)写buffer(读写buffer采用循环队列)
我跟了下好像m_llPosition是记录读取的位置,所以必须把它和我的m_llReadPos关联起来,强行让m_llReadPos = m_llPosition,读完一遍buffer后就不再接着循环读了,所以文件根本没播完,应该如何修改呢???再有就是文件开始部分(大概2,3秒钟)老播不出,很着急大家帮帮忙吧。
HRESULT Read(PBYTE pbBuffer,
DWORD dwBytesToRead,
BOOL bAlign,
LPDWORD pdwBytesRead)
{ CAutoLock lck(&m_csLock);
DWORD dwReadLength;
DWORD dwTime = timeGetTime();
if (m_llReadPos + dwBytesToRead > m_llLength) {
dwReadLength = (DWORD)(m_llLength - m_llReadPos);
} else {
dwReadLength = dwBytesToRead;
}
if (m_llPosition != m_llReadPos)
{
m_llReadPos = m_llPosition;
}
DWORD availableDataSize = (m_llWritePos - m_llReadPos + m_llLength) % m_llLength;
if (dwBytesToRead > availableDataSize)
{
dwReadLength = availableDataSize;
}
else
{
dwReadLength = dwBytesToRead;
}
for (int i=0;i<dwReadLength;i++)
{
pbBuffer[i] = m_pbData[m_llReadPos];
m_llReadPos = (m_llReadPos+ 1 ) % m_llLength;
}
*pdwBytesRead = dwReadLength;
return S_OK;
}
int WriteBuf(char *buffer, int length)
{
.......
}