2015-11-16 4 views
7

की बजाय सॉकेट/मेमोरी का उपयोग करके क्यूडा में वीडियो डीकोड करें, मैं वर्तमान में क्यूडा का उपयोग करके वीडियो को डीकोड करने का प्रयास कर रहा हूं। मेरे पास cudaDecodeD3D9 नामक कूडा नमूना है। यह नमूना cuvidCreateVideoSource नामक विधि का उपयोग करता है जो स्रोत वीडियो में फ़ाइल सूचक लेता है। क्या स्मृति को सॉकेट/सॉकेट/स्ट्रीम से वीडियो लोड करने का कोई तरीका है?फ़ाइल

उत्तर

8

बाहर निकलता है मैं cuvidCreateVideoSource विधि का उपयोग नहीं कर सकता, लेकिन इसके बजाय मैं 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

आप उस एपीआई से परामर्श लेंगे जिसका उपयोग आप सॉकेट डेटा भेजने और प्राप्त करने के लिए कर रहे हैं। इसका क्यूडा वीडियो के साथ कुछ लेना देना नहीं है, केवल सॉकेट का उपयोग करके डेटा भेजने और प्राप्त करना मूलभूत है। – pauld