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