使用sf_open_fd()时libsndfile总是段错误

时间:2012-11-19 17:18:47

标签: c++ memory stream libsndfile

我正在尝试为我正在构建的应用程序传输音频,但是我遇到了一个我正在使用的库的障碍。该库是libSndFile。每当我调用sf_open_fd(int fd, int mode, SF_INFO *info, int close_desc);时,库总是有一个SEGFAULT我使用这个函数而不是sf_open(const char *path, int mode, SF_INFO *info),因为我需要在内存缓冲区中有libSndFile解码数据。我无法理解sf_virtual_open()文档,所以我正在使用它。我可以使用fileno()获取有效的文件描述符(通常返回14)并且我的FILE流是有效的,所以它只是这个函数。我不知道SEGFAULTing在哪里或者在什么地方。有没有更好的方法让libSndFile解码内存缓冲区,或者我没有使用正确的东西?

这是问题代码(我添加了一些注释以使其更有意义)

memset(&/*SF_INFO*/mInfo, 0, sizeof(SF_INFO));

/* FILE* */mpFileStream = tmpfile();

fwrite(/* void* */aBuffer, /*int*/aSize, 1, mpFileStream);

int iDescriptor = fileno(mpFileStream);

if(iDescriptor == -1)
{
    return /*enum EError*/EError_Unknown;
}

/* SNDFILE* */mFile = sf_open_fd(iDescriptor, SFM_READ, mInfo, SF_TRUE);

return mFile != NULL ? /*enum EError*/EError_None : /*enum EError*/EError_Unknown;

我真的不想写入磁盘,但我必须得到一个有效的文件描述符和流。

注意:我正在使用g ++ 4.6.3在Xubuntu 12.04上进行编译。

0 个答案:

没有答案