2010-09-15 4 views
5

मेरे पास IFilterGraph का एक उदाहरण है - वीडियो फ़िल्टर (स्रोत, ट्रांसफॉर्म और रेंडरर) के साथ मेरा स्वयं का ग्राफ। मैं चल रहे ग्राफ के वर्तमान एफपीएस (वीडियो फ्रेम दर) कैसे प्राप्त कर सकता हूं?डायरेक्ट शो ग्राफ - वर्तमान एफपीएस कैसे प्राप्त करें?

सादर डोमिनिक

उत्तर

2

शायद सबसे आसान तरीका है एक कस्टम कॉलबैक के साथ एक SampleGrabber फिल्टर बनाने के लिए, और यह अपने आप गणना करने के लिए है।

देखें:

ISampleGrabber

ISampleGrabber::SetCallback

ISampleGrabberCB

हर बार अपने कॉलबैक फ़ंक्शन कहा जाता है, तो आप एक नया फ्रेम प्राप्त हुआ है। आपको शायद इसे प्रस्तुतकर्ता से पहले रखना चाहिए।

इसके अलावा, आपके ग्राफ के आधार पर, कुछ फ़िल्टर में फ्रेम दर के बारे में जानकारी हो सकती है, लेकिन नमूनाग्राबर विधि किसी भी ग्राफ के साथ काम करेगी।

1

प्रत्येक वीडियो में निरंतर एफपीएस नहीं होता है, इसलिए नमूना हथियार का उपयोग करना सबसे सटीक तरीका है हालांकि सबसे आसान नहीं है। यदि आप अपने वीडियो का प्रारूप जानते हैं और आपको यकीन है कि यह लगातार एफपीएस है, तो आप अपना ट्रांसफॉर्म या रेंडरर फ़िल्टर प्राप्त कर सकते हैं, अपने पिनों में से एक प्राप्त कर सकते हैं, आईपिन :: कनेक्शन मीडिया टाइप टाइप करें, मीडिया प्रकार के प्रारूप प्रकार को देखें, चाहे वह FORMAT_VideoInfo या FORMAT_VideoInfo2 है , VIDEOINFOHEADER या VIDEOINFOHEADER2 को तदनुसार प्रारूप प्रारूप सूचक और AvgTimePerFrame फ़ील्ड को देखें।

2

मुझे आशा है कि इससे मदद मिलती है। यह एक नियमित दिन है जिसे मैंने स्ट्रीम किया था वीडियो के एफपीएस प्राप्त करने के लिए कई चंद्रमा पहले लिखा था। विभिन्न मीडिया प्रकारों के लिए काम करता है, लेकिन आपको यह समझने में सक्षम होना चाहिए कि यदि आपको आवश्यकता हो तो इसके साथ आगे के मीडिया प्रकारों का समर्थन कैसे करें। अधिक जानकारी के लिए AM_MEDIA_TYPE पर एमएसडीएन पृष्ठ देखें।

inline static void GetVideoFramesPerSecond(const AM_MEDIA_TYPE * pVT, long *plFramesPerSecond) 
{ 
long nTenMillion = 10000000; 
long lAvgFrameDuration = 0; 

if(pVT->formattype == FORMAT_VideoInfo || pVT->formattype == FORMAT_MPEGVideo)  
    lAvgFrameDuration = (LONG) ((VIDEOINFOHEADER *)(pVT->pbFormat))->AvgTimePerFrame; 

else if(pVT->formattype == FORMAT_VideoInfo2 || pVT->formattype == FORMAT_MPEG2_VIDEO)  
    lAvgFrameDuration = (LONG) ((VIDEOINFOHEADER2 *)(pVT->pbFormat))->AvgTimePerFrame; 

*plFramesPerSecond = (lAvgFrameDuration != 0) ? ((long)(nTenMillion/lAvgFrameDuration)) : 0; 
} 
संबंधित मुद्दे