के साथ ffmpeg के माध्यम से वीडियो डीकोड करते समय मैंने ffmpeg का उपयोग करके एक वीडियो प्लेयर सफलतापूर्वक कार्यान्वित किया है। अब मैं हार्डवेयर डिकोडिंग का उपयोग करने की कोशिश कर रहा हूं लेकिन मुझे कुछ मुद्दों का सामना करना पड़ रहा है। मुझे एक पोस्ट मिला जो मैंने यहां शुरुआती बिंदु के रूप में देखा: http://comments.gmane.org/gmane.comp.video.ffmpeg.libav.user/13523निष्पादित करने में विफल: 0x80070057, dxva2
मैंने कोड को अद्यतन किया है जो डिकोडर के लिए आवश्यक सामग्री सेट करता है। अद्यतन कोड यहाँ उपलब्ध है: https://drive.google.com/file/d/0B5ufHdoDzA4ieVk5UVpxcDNzRHc/view?usp=sharing
और यह मैं इसे कैसे उपयोग कर रहा हूँ विकोडक प्रारंभ करने में है:
// Prepare the decoding context
AVCodec *codec = nullptr;
_codecContext = _avFormatContext->streams[_streamIndex]->codec;
if ((codec = avcodec_find_decoder(_codecContext->codec_id)) == 0)
{
std::cout << "Unsupported video codec!" << std::endl;
return false;
}
_codecContext->thread_count = 1; // Multithreading is apparently not compatible with hardware decoding
InputStream *ist = new InputStream();
ist->hwaccel_id = HWACCEL_AUTO;
ist->hwaccel_device = "dxva2";
ist->dec = codec;
ist->dec_ctx = _codecContext;
_codecContext->coded_width = _width;
_codecContext->coded_height = _height;
_codecContext->opaque = ist;
dxva2_init(_codecContext);
_codecContext->get_buffer2 = ist->hwaccel_get_buffer;
_codecContext->get_format = GetHwFormat;
_codecContext->thread_safe_callbacks = 1;
if (avcodec_open2(_codecContext, codec, nullptr) < 0)
{
std::cout << "Video codec open error" << std::endl;
return false;
}
और यहाँ ऊपर संदर्भित GetHwFormat की परिभाषा है:
AVPixelFormat GetHwFormat(AVCodecContext *s, const AVPixelFormat *pix_fmts)
{
InputStream* ist = (InputStream*)s->opaque;
ist->active_hwaccel_id = HWACCEL_DXVA2;
ist->hwaccel_pix_fmt = AV_PIX_FMT_DXVA2_VLD;
return ist->hwaccel_pix_fmt;
}
जब मैं एक एमपी 4 (एच 264 में एन्कोड किया गया) वीडियो खोलता हूं जो एचडी रिज़ॉल्यूशन या उससे कम है, तो सब कुछ ठीक काम कर रहा है। हालांकि, जैसे ही मैं 3840x2160 की तरह उच्च संकल्प वीडियो की कोशिश के रूप में, मैं बार-बार निम्न त्रुटियों हो:
Failed to execute: 0x80070057
Hardware accelerator failed to decode picture
मैं भी कुछ सेकंड के बाद निम्न त्रुटियों हो रही शुरू:
co located POCs unavailable
और वीडियो है ठीक से प्रदर्शित नहीं होता है: मुझे पूरे वीडियो में बहुत सारी कलाकृतियों मिलती हैं और यह कमजोर है। मैंने ffmpeg स्रोत कोड में पहली त्रुटि की जांच की। ऐसा लगता है कि एक अवैध पैरामीटर के कारण IDirectXVideoDecoder_Execute विफल रहता है। चूंकि यह ffmpeg के साथ हो रहा है, वहां कुछ ऐसा होना चाहिए जो मुझे याद आ रहा है लेकिन मैं यह नहीं समझ सकता कि क्या। इस त्रुटि के साथ मुझे मिली एकमात्र प्रासंगिक पोस्ट मल्टीथ्रेडिंग की वजह से थी, लेकिन मैंने कोडेक खोलने से पहले thread_count को 1 पर सेट किया था।
- i7-4790 सीपीयू @ 3.6GHz
- रैम 16 जीबी
- Intel HD ग्राफ़िक्स 4600
- Windows 8.1 :
यह समस्या जो निम्न विनिर्देशों है मेरी मुख्य कंप्यूटर पर हो रहा है
एक ही समस्या मेरे दूसरे कंप्यूटर पर नहीं हो रही है जिसमें निम्नलिखित चश्मे हैं:
- i7 4510U @ 2GHz
- रैम 8 जीबी
- NVIDIA GeForce GTX 750Ti
- विंडोज 10
अगर मैं अपने मुख्य कंप्यूटर पर DXVAChecker उपयोग करें, यह कहना है कि मेरी ग्राफिक्स कार्ड DXVA2 का समर्थन करता है H264_VLD_ * के लिए, और मैं देख सकता हूं कि माइक्रोसॉफ्ट एपीआई को कॉल किया जा रहा है (डीएक्सवीए 2_DecodeDeviceCreated, DXVA2_DecodeDeviceBeginFrame, DXVA2_DecodeDeviceGetBuffer, DXVA2_DecodeDeviceExecute, DXVA2_DecodeDeviceEndFrame) जबकि मेरा वीडियो चल रहा है।
मुझे हार्डवेयर डिकोडिंग और संस्करण के बिना संस्करण के बीच GPU उपयोग (किसी भी कंप्यूटर पर) में कोई वृद्धि दिखाई नहीं दे रही है; हालांकि, मुझे सीपीयू उपयोग में कमी दिखाई देती है (जितना मैं उम्मीद कर रहा था)। यह भी बहुत अजीब है।
ध्यान दें कि मैंने एफएफएमपीईजी वेबसाइट पर उपलब्ध विंडोज रिलीज और एक संस्करण जिसे मैंने --enable-dxva2 के साथ संकलित किया था। मैंने पहले से ही बहुत कुछ खोजा है लेकिन मैं यह नहीं ढूंढ पाया कि मैं क्या गलत कर रहा हूं।
उम्मीद है कि कोई मेरी मदद कर सकता है, या शायद मुझे एक बेहतर उदाहरण के लिए इंगित कर सकता है?
मैंने आईई 4300 यू @ 1.9GHz (4 सीपीयू), 8 जीबी रैम के साथ एक भूतल प्रो 3 पर भी परीक्षण किया, इंटेल एचडी ग्राफिक्स 4400, विंडोज 10, और वीडियो अच्छा लग रहा है। कोई त्रुटि संदेश नहीं हैं। सीसीयूयू उपरोक्त वर्णित दूसरे कंप्यूटर की तरह हार्डवेयर डिकोडिंग के बिना 40% कम है। जीपीयू 3840x2160 पर उसी वीडियो का परीक्षण करने के लिए केवल 1% या शायद 2% अधिक (जैसा ऊपर वर्णित अन्य 2 कंप्यूटरों के समान है) । – CD83