Hi, I've modified my initialization code: supressed flags, and enabled thread_safe_callbacks, but the result is the same, lots of "Missing reference picture, default is __" error messages and avcodec_decode_video2 returns -1094995529 "Invalid data found when processing input" half the time. The video is showing very very poorly with tons of compression artifacts. I've read the extradata comment in ffmpeg code and it seems that is not really used with H264 codec. I've run my ffmpeg-not-HWaccel decoder and the extradata is not used at all indeed.
This is the new initialization: #ifdef DXVA2_DECODER_ENABLED // Create and populate Input Stream structure: InputStream* ist = new InputStream(); ist->hwaccel_id = HWACCEL_AUTO; ist->hwaccel_device = "dxva2"; ist->dec = _pCodec; ist->dec_ctx = _pCodecCtx; // Set Known width and height _pCodecCtx->coded_width = 1280; _pCodecCtx->coded_height = 720; // Set Input Stream structure as ancillary data into codec _pCodecCtx->opaque = ist; // Initialize DXV2 context dxva2_init(_pCodecCtx); // Set DXVA2 callbacks to codec context _pCodecCtx->get_buffer2 = ist->hwaccel_get_buffer; _pCodecCtx->get_format = get_format; _pCodecCtx->thread_safe_callbacks = 1; #endif Remember: dxva2_init is a call to the analogue method from ffmpeg_dxva.c file modified by me into a .h and a .cpp attached in a previous mail (I don't know if that's a common practice in this mail list or you do it in another way). Regarding the next step (using the DX surface directly as an OpenGL texture), it can be done using: WGLEW_NV_DX_interop, wglDXOpenDeviceNV, wglDXSetResourceShareHandleNV, wglDXRegisterObjectNV, make current, lock, etc. Look at WiDiSample code -> RenderOpenGL.cpp bind texture (Intel Media SDK video decoder example), and this page: http://halogenica.net/sharing-resources-between-directx-and-opengl/ ...but for now I'm more worried about getting the DXVA2 to work properly with FFMPEG. What am I missing? 2014-08-25 17:53 GMT+02:00 wm4 <[email protected]>: > On Mon, 25 Aug 2014 15:23:20 +0200 > Hector Alonso <[email protected]> wrote: > > > Hi, > > I've rebuilt ffmpeg using these instructions > > https://trac.ffmpeg.org/wiki/CompilationGuide/MSVC from the Visual > Studio > > Console, installing MinGW directly from the link with the flags > --enable-dxva2 > > and --enable-hwaccel=h264_dxva2 and is almost working but I get a lot > > of errors: > > -1094995529 "Invalid data found when processing input" > > from avcodec_decode_video2 a lot of artifacts and a very poor and > > inconsistent image quality. > > This is my dxva initialization code: > > > > _pCodecCtx->flags|= CODEC_CAP_DR1; > > _pCodecCtx->flags|= CODEC_CAP_HWACCEL; > > > > InputStream *ist = new InputStream (); > > ist->hwaccel_id = HWACCEL_AUTO; > > ist->hwaccel_device = "dxva2"; > > ist->dec = _pCodec; > > ist->dec_ctx = _pCodecCtx; > > _pCodecCtx->coded_width = 1280; > > _pCodecCtx->coded_height = 720; > > _pCodecCtx->opaque = ist; > > dxva2_init(_pCodecCtx); > > _pCodecCtx->opaque = ist; > > _pCodecCtx->get_buffer2 = ist->hwaccel_get_buffer; > > _pCodecCtx->get_format = get_format; > > _pCodecCtx->thread_safe_callbacks = 0; > > > > before calling > > > > if (avcodec_open2(_pCodecCtx , _pCodec, 0) < 0) ... > > > > Where get_format is: > > > > static enum AVPixelFormat get_format(AVCodecContext *s, const enum > > 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; > > } > > > > Find attached my modified ffmpeg_dxva2.cpp and ffmpeg_dxva2.h files from > > the original ffmpeg_dxva2.c and the InputStream declaration from ffmpeg.h > > > > For getting the decoded frame I call: dxva2_retrieve_data_call, and then > I > > convert it to YUV420p (I make the final conversion via pixel shader with > > OpenGL texture). > > > > Also, with my old CPU decoder I had 3-6% CPU usage and 5-10% GPU usage > (as > > I said, I'm converting and painting with OpenGL) and now with the "GPU > > Accelerated" one I have 5-13% CPU and 6-12% GPU. > > PS: nevcairiel mentioned: > http://developer.download.nvidia.com/opengl/specs/WGL_NV_DX_interop.txt > > Unfortunately, it's marked as experimental, and other drivers probably > don't provide it. > > > Any thoughts? > > > > Thank you! > > > _______________________________________________ > Libav-user mailing list > [email protected] > http://ffmpeg.org/mailman/listinfo/libav-user >
_______________________________________________ Libav-user mailing list [email protected] http://ffmpeg.org/mailman/listinfo/libav-user
