我尝试在我的程序中使用libmpeg2库。随库提供的mpeg2dec示例在计算机磁盘上使用mpeg2播放和mpeg文件。
我想使用内存中的数据(存储在内存中的unsigned char数组)。以下是我想修改的功能的详细信息:
static void es_loop (unsigned char * data10r, unsigned int * size10r)
{
buffer_size = 4096;
uint8_t * buffer = (uint8_t *) malloc (buffer_size);
uint8_t * end;
if (buffer == NULL)
exit (1);
do {
end = buffer + fread (buffer, 1, buffer_size, in_file);
decode_mpeg2 (buffer, end);
} while (end == buffer + buffer_size && !sigint);
free (buffer);
}
其中data10r是一个unsigned char数组,在内存中包含大小为10r的mpeg2数据。
in_file是指向要播放的磁盘上的mpeg2文件的指针。我想用内存中的data10r unsigned char数组替换这个文件... 缓冲区包含要发送到解码器的4096字节视频
我花了几个小时才找到改变这个功能的解决方案,暂时没有任何成功。
先谢谢你的帮助,
皮尔
答案 0 :(得分:0)
在使用glibc的linux上,您可以使用fmemopen获取FILE*
,然后使用普通fread
读取它。因此,您只需在开头添加FILE *in_file = fmemopen(data10r, *size10r, "r");
,在函数末尾添加fclose(in_file);
。
如果您还需要支持其他系统,可以使用memcpy
实现相同的功能并手动计算偏移量。
如果整个数据已经在内存中,你甚至需要用4kb块解码吗?为什么不在整个文件上运行解码?通过你的代码判断Judjing,它只是decode_mpeg2(data10r, data10r + *size10r);
(这是整个函数代码)。