Декодируйте видео в Cuda, используя вместо файла сокет / память

В настоящее время я пытаюсь декодировать видео с помощью CUDA. У меня есть образец куда называется cudaDecodeD3D9, В этом примере используется метод, называемый cuvidCreateVideoSource который принимает указатель файла на исходное видео. Есть ли способ заставить Cuda загружать видео из памяти / сокета / потока?

1 ответ

Решение

Оказывается, я не могу использовать cuvidCreateVideoSource метод вообще, но вместо этого я могу передать каждый кадр данных непосредственно в анализатор видео cuda, вызвав cuvidParseVideoData,

Вот пример чтения одного кадра из файла и передачи его парсеру 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;
Другие вопросы по тегам