| 
																	
																	
																		
																	
																	
																 | 
																@@ -76,41 +76,13 @@ int ff_qsv_error(int mfx_err) | 
															
														
														
													
														
															
																 | 
																 | 
																        return AVERROR_UNKNOWN; | 
																 | 
																 | 
																        return AVERROR_UNKNOWN; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																/** | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * @brief Initialize a MSDK session | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * Media SDK is based on sessions, so this is the prerequisite | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * initialization for HW acceleration.  For Windows the session is | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * complete and ready to use, for Linux a display handle is | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * required.  For releases of Media Server Studio >= 2015 R4 the | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * render nodes interface is preferred (/dev/dri/renderD). | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * Using Media Server Studio 2015 R4 or newer is recommended | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * but the older /dev/dri/card interface is also searched | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * for broader compatibility. | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * @param avctx    ffmpeg metadata for this codec context | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 * @param session  the MSDK session used | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																static int ff_qsv_set_display_handle(AVCodecContext *avctx, mfxSession session) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																    mfxIMPL impl   = MFX_IMPL_AUTO_ANY; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } }; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    const char *desc; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    int ret; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ret = MFXInit(impl, &ver, session); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    if (ret < 0) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        return ff_qsv_error(ret); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    // this code is only required for Linux.  It searches for a valid | 
																 | 
																 | 
																    // this code is only required for Linux.  It searches for a valid | 
															
														
														
													
														
															
																 | 
																 | 
																    // display handle.  First in /dev/dri/renderD then in /dev/dri/card | 
																 | 
																 | 
																    // display handle.  First in /dev/dri/renderD then in /dev/dri/card | 
															
														
														
													
														
															
																 | 
																 | 
																#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE | 
																 | 
																 | 
																#ifdef AVCODEC_QSV_LINUX_SESSION_HANDLE | 
															
														
														
													
														
															
																 | 
																 | 
																    // VAAPI display handle | 
																 | 
																 | 
																    // VAAPI display handle | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int ret = 0; | 
															
														
														
													
														
															
																 | 
																 | 
																    VADisplay va_dpy = NULL; | 
																 | 
																 | 
																    VADisplay va_dpy = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																    VAStatus va_res = VA_STATUS_SUCCESS; | 
																 | 
																 | 
																    VAStatus va_res = VA_STATUS_SUCCESS; | 
															
														
														
													
														
															
																 | 
																 | 
																    int major_version = 0, minor_version = 0; | 
																 | 
																 | 
																    int major_version = 0, minor_version = 0; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -154,12 +126,51 @@ int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) | 
															
														
														
													
														
															
																 | 
																 | 
																        } else { | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																            av_log(avctx, AV_LOG_VERBOSE, | 
																 | 
																 | 
																            av_log(avctx, AV_LOG_VERBOSE, | 
															
														
														
													
														
															
																 | 
																 | 
																            "mfx initialization: %s vaInitialize successful\n",adapterpath); | 
																 | 
																 | 
																            "mfx initialization: %s vaInitialize successful\n",adapterpath); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            ret = MFXVideoCORE_SetHandle(session, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                  (mfxHandleType)MFX_HANDLE_VA_DISPLAY, (mfxHDL)va_dpy); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (ret < 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                av_log(avctx, AV_LOG_ERROR, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                "Error %d during set display handle\n", ret); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return ff_qsv_error(ret); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            } | 
															
														
														
													
														
															
																 | 
																 | 
																            break; | 
																 | 
																 | 
																            break; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																    MFXVideoCORE_SetHandle((*session), (mfxHandleType)MFX_HANDLE_VA_DISPLAY, (mfxHDL)va_dpy); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																#endif //AVCODEC_QSV_LINUX_SESSION_HANDLE | 
																 | 
																 | 
																#endif //AVCODEC_QSV_LINUX_SESSION_HANDLE | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    return 0; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																/** | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * @brief Initialize a MSDK session | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * Media SDK is based on sessions, so this is the prerequisite | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * initialization for HW acceleration.  For Windows the session is | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * complete and ready to use, for Linux a display handle is | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * required.  For releases of Media Server Studio >= 2015 R4 the | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * render nodes interface is preferred (/dev/dri/renderD). | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * Using Media Server Studio 2015 R4 or newer is recommended | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * but the older /dev/dri/card interface is also searched | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * for broader compatibility. | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * @param avctx    ffmpeg metadata for this codec context | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 * @param session  the MSDK session used | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																 */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																int ff_qsv_init_internal_session(AVCodecContext *avctx, mfxSession *session) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    mfxIMPL impl   = MFX_IMPL_AUTO_ANY; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    mfxVersion ver = { { QSV_VERSION_MINOR, QSV_VERSION_MAJOR } }; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    const char *desc; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int ret; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ret = MFXInit(impl, &ver, session); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (ret < 0) { | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Error initializing an internal MFX session\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        return ff_qsv_error(ret); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ret = ff_qsv_set_display_handle(avctx, *session); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (ret < 0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        return ret; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    MFXQueryIMPL(*session, &impl); | 
																 | 
																 | 
																    MFXQueryIMPL(*session, &impl); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |