修改async source filter,想使其读取大文件总不行呀

notpunk 2005-06-05 11:39:44
在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)
{
.......
}
...全文
106 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
cx0928 2005-06-14
  • 打赏
  • 举报
回复
对大文件,请使用内存映射文件
yyhzpk 2005-06-06
  • 打赏
  • 举报
回复
重新设计读取的程序架构吧
mmnn888666 2005-06-06
  • 打赏
  • 举报
回复
使用内存映射文件不就可以了,速度还可以

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧