通过从内存而不是磁盘读取和解码 mpeg2 数据来使用 libmpeg2
libmpeg2 use by reading and decoding mpeg2 data from memory instead of disk
我尝试在我的程序中使用 libmpeg2 库。随库提供的mpeg2dec示例使用电脑磁盘上的mpeg文件播放mpeg2
我想改用内存中的数据(存储在内存中的无符号字符数组)。这是我想修改的函数的详细信息:
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 是一个无符号字符数组,包含内存中的 mpeg2 数据,大小为 10r。
in_file是指向要播放的磁盘上的mpeg2文件的指针。我想用内存中的 data10r unsigned char 数组替换这个文件......
缓冲区包含要发送到解码器的 4096 字节视频
我花了好几个小时想办法修改这个功能,暂时没有成功。
预先感谢您的帮助,
皮埃尔
在使用 glibc 的 linux 上,您可以使用 fmemopen 获取 FILE*
,然后使用普通的 fread
从中读取。因此,您只需要在函数的开头添加 FILE *in_file = fmemopen(data10r, *size10r, "r");
,在函数的末尾添加 fclose(in_file);
。
如果您也需要支持其他系统,您可以使用 memcpy
并手动计算偏移量来实现相同的功能。
如果整个数据已经在内存中,你还需要按 4kb 块解码吗?为什么不对整个文件进行 运行 解码?从你的代码来看,它只是 decode_mpeg2(data10r, data10r + *size10r);
(即函数的全部代码)。
我尝试在我的程序中使用 libmpeg2 库。随库提供的mpeg2dec示例使用电脑磁盘上的mpeg文件播放mpeg2
我想改用内存中的数据(存储在内存中的无符号字符数组)。这是我想修改的函数的详细信息:
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 是一个无符号字符数组,包含内存中的 mpeg2 数据,大小为 10r。
in_file是指向要播放的磁盘上的mpeg2文件的指针。我想用内存中的 data10r unsigned char 数组替换这个文件...... 缓冲区包含要发送到解码器的 4096 字节视频
我花了好几个小时想办法修改这个功能,暂时没有成功。
预先感谢您的帮助,
皮埃尔
在使用 glibc 的 linux 上,您可以使用 fmemopen 获取 FILE*
,然后使用普通的 fread
从中读取。因此,您只需要在函数的开头添加 FILE *in_file = fmemopen(data10r, *size10r, "r");
,在函数的末尾添加 fclose(in_file);
。
如果您也需要支持其他系统,您可以使用 memcpy
并手动计算偏移量来实现相同的功能。
如果整个数据已经在内存中,你还需要按 4kb 块解码吗?为什么不对整个文件进行 运行 解码?从你的代码来看,它只是 decode_mpeg2(data10r, data10r + *size10r);
(即函数的全部代码)。