Hi, I'm not sure if the email I sent a couple days ago was approved and sent to everyone. If it is the case, note that I have resolved my problem. Information can be found here: http://stackoverflow.com/questions/34602561/failed-to-execute-0x80070057-when-decoding-video-via-ffmpeg-with-dxva2
Thanks, Cyril On Tue, Jan 5, 2016 at 3:16 PM, Cyril Drouet <[email protected]> wrote: > I have successfully implemented a video player using ffmpeg. I am now > trying to use hardware decoding but I'm facing a couple issues. I found a > post that I followed as a starting point here: > http://comments.gmane.org/gmane.comp.video.ffmpeg.libav.user/13523 > > I have updated the code that setup the necessary stuff for the decoder. > The updated code is available here: > https://drive.google.com/file/d/0B5ufHdoDzA4ieVk5UVpxcDNzRHc/view?usp=sharing > > And this is how I'm using it to initialize the decoder: > > // 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; > } > > And here is the definition of GetHwFormat referenced above: > > 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; > } > > When I open an mp4 (encoded in h264) video that is HD resolution or less, > everything seems to be working fine. However, as soon as I try higher > resolution videos like 3840x2160, I get the following errors repeatedly: > > Failed to execute: 0x80070057 > Hardware accelerator failed to decode picture > > I also start getting the following errors after a few seconds: > > co located POCs unavailable > > And the video is not displayed properly: I get a lot of artifacts all over > the video and it is lagging. I checked the first error in the ffmpeg source > code. It seems that IDirectXVideoDecoder_Execute fails because of an > invalid parameter. Since this is happening withing ffmpeg, there must be > something that I'm missing but I can't figure out what. The only relevant > post that I found with this error was because of multithreading but I set > the thread_count to 1 before opening the codec. > > This issue is happening on my main computer which has the following specs: > > - i7-4790 CPU @ 3.6GHz > - RAM 16 GB > - Intel HD Graphics 4600 > - Windows 8.1 > > The same issue is not happening on my second computer which has the > following specs: > > - i7 4510U @ 2GHz > - RAM 8 GB > - NVIDIA GeForce GTX 750Ti > - Windows 10 > > If I use DXVAChecker on my main computer, it says that my graphics card > supports DXVA2 for H264_VLD_*, and I can see that the calls to the > Microsoft API are being made (DXVA2_DecodeDeviceCreated, > DXVA2_DecodeDeviceBeginFrame, DXVA2_DecodeDeviceGetBuffer, > DXVA2_DecodeDeviceExecute, DXVA2_DecodeDeviceEndFrame) while my video is > playing. > > I also tested on a Surface Pro 3 with an i5 4300U @ 1.9GHz (4 CPUs), 8 GB > of RAM, Intel HD Graphics 4400, Windows 10, and the video looks good. There > are no error messages.CPU usage is 40% less than without hardware decoding > like the second computer mentioned above.GPU is only 1% or maybe 2% more > (same as for the other 2 computers mentioned above) while testing the same > video at 3840x2160 > > Note that I tried both the Windows release available on the FFmpeg > website, and a version that I compiled with --enable-dxva2. I have searched > a lot already but I was unable to find what I'm doing wrong. > > Hopefully, someone can help me, or maybe point me to a better example? > > > Thanks! >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
