Декодируйте видео в 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;