Hi Carl Matrox M264 is similar to other hardware codecs.
I saw amf_load_library and nvenc_load_library in ffmpeg. Matrox M264 is the same. We got a lot customers using ffmpeg and they want to use Matrox M264 to do transcoding. Thanks a lot. Yufei. static int amf_load_library(AVCodecContext *avctx) { AmfContext *ctx = avctx->priv_data; AMFInit_Fn init_fun; AMFQueryVersion_Fn version_fun; AMF_RESULT res; ctx->delayed_frame = av_frame_alloc(); if (!ctx->delayed_frame) { return AVERROR(ENOMEM); } // hardcoded to current HW queue size - will realloc in timestamp_queue_enqueue() if too small ctx->timestamp_list = av_fifo_alloc((avctx->max_b_frames + 16) * sizeof(int64_t)); if (!ctx->timestamp_list) { return AVERROR(ENOMEM); } ctx->dts_delay = 0; ctx->library = dlopen(AMF_DLL_NAMEA, RTLD_NOW | RTLD_LOCAL); AMF_RETURN_IF_FALSE(ctx, ctx->library != NULL, AVERROR_UNKNOWN, "DLL %s failed to open\n", AMF_DLL_NAMEA); init_fun = (AMFInit_Fn)dlsym(ctx->library, AMF_INIT_FUNCTION_NAME); AMF_RETURN_IF_FALSE(ctx, init_fun != NULL, AVERROR_UNKNOWN, "DLL %s failed to find function %s\n", AMF_DLL_NAMEA, AMF_INIT_FUNCTION_NAME); version_fun = (AMFQueryVersion_Fn)dlsym(ctx->library, AMF_QUERY_VERSION_FUNCTION_NAME); AMF_RETURN_IF_FALSE(ctx, version_fun != NULL, AVERROR_UNKNOWN, "DLL %s failed to find function %s\n", AMF_DLL_NAMEA, AMF_QUERY_VERSION_FUNCTION_NAME); static av_cold int nvenc_load_libraries(AVCodecContext *avctx) { NvencContext *ctx = avctx->priv_data; NvencDynLoadFunctions *dl_fn = &ctx->nvenc_dload_funcs; NVENCSTATUS err; uint32_t nvenc_max_ver; int ret; ret = cuda_load_functions(&dl_fn->cuda_dl, avctx); if (ret < 0) return ret; ret = nvenc_load_functions(&dl_fn->nvenc_dl, avctx); if (ret < 0) { nvenc_print_driver_requirement(avctx, AV_LOG_ERROR); return ret; } err = dl_fn->nvenc_dl->NvEncodeAPIGetMaxSupportedVersion(&nvenc_max_ver); if (err != NV_ENC_SUCCESS) return nvenc_print_error(avctx, err, "Failed to query nvenc max version"); av_log(avctx, AV_LOG_VERBOSE, "Loaded Nvenc version %d.%d\n", nvenc_max_ver >> 4, nvenc_max_ver & 0xf); if ((NVENCAPI_MAJOR_VERSION << 4 | NVENCAPI_MINOR_VERSION) > nvenc_max_ver) { av_log(avctx, AV_LOG_ERROR, "Driver does not support the required nvenc API version. " "Required: %d.%d Found: %d.%d\n", NVENCAPI_MAJOR_VERSION, NVENCAPI_MINOR_VERSION, nvenc_max_ver >> 4, nvenc_max_ver & 0xf); On 03/11/2019 07:04 AM, Carl Eugen Hoyos wrote: 2019-03-11 11:57 GMT+01:00, Ronald S. Bultje <rsbul...@gmail.com><mailto:rsbul...@gmail.com>: - How do we set up a fate station with m264 support? We do not test any external libraries with fate. [...] - How do we test that it still works after we make innocent changes to some API? Same as so far: We remove the feature that isn't updated. - If we add new H264 files to our conformance suite, how do we confirm that m264dec passes them? That wouldn't work for any of our external codecs (at least for some it wouldn't), in some cases the reason is that the external codec supports things unsupported by FFmpeg, in some cases there are license issues even with open-source software. Sorry, but some of this sounds like a solution in search of a problem. No strong opinion here about Matrox but we accepted AMD in spite of their mails, so I don't see why we can't accept a non-free Matrox codec (as long as the patch is reasonably clean). Carl Eugen _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org<mailto:ffmpeg-devel@ffmpeg.org> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel