2015-11-16 2 views
7

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

ответ

8

Оказывается, я не могу использовать метод 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; 
+0

Как извлечь раму и размер кадра из потока сокета? –

+0

, вы должны проконсультироваться с API, который вы используете для отправки и получения данных сокетов. Это не имеет никакого отношения к Cuda Video, просто базовая отправка и получение данных с использованием сокетов. – pauld

Смежные вопросы