使用套接字/内存而不是文件在Cuda中解码视频

时间:2015-11-16 20:21:07

标签: c++ sockets cuda

我目前正在尝试使用cuda解码视频。我有一个名为cudaDecodeD3D9的cuda样本。此示例使用名为cuvidCreateVideoSource的方法,该方法将文件指针指向源视频。有没有办法让Cuda从内存/套接字/流加载视频?

1 个答案:

答案 0 :(得分:8)

原来我根本无法使用cuvidCreateVideoSource方法,但我可以通过调用cuvidParseVideoData直接将每帧数据提供给cuda视频解析器。

这是一个从文件中读取一帧并将其提供给cuda解析器的示例。该文件是由我创建的,通过将每个帧的大小写入文件,然后是帧数据。可以通过从套接字读取来轻松替换该文件:

unsigned int size = 0u;
fread( &size, sizeof( unsigned char ), sizeof( unsigned int ), _file );

unsigned char *buf = new unsigned char[size];
fread( buf, sizeof( unsigned char ), size, _file );

CUVIDSOURCEDATAPACKET packet = {};
packet.payload_size = size;
packet.payload = buf;
cuvidParseVideoData( pCudaParser, &packet );

delete [] buf;