【问题标题】:How to wrap a C library parameter?(Creating x264 .Net wrapper)如何包装 C 库参数?(创建 x264 .Net 包装器)
【发布时间】:2010-07-11 12:56:34
【问题描述】:

所以在 dll 中我们有 x264_param_t 结构\对象和一个用于设置 x264_param_apply_profile 的函数。在 C 中我们使用such code 来设置它

x264_param_t param;
x264_param_default_preset(&param, "veryfast", "zerolatency");
param.i_threads = 1;
param.i_width = width;
param.i_height = height;
param.i_fps_num = fps;
param.i_fps_den = 1;
// Intra refres:
param.i_keyint_max = fps;
param.b_intra_refresh = 1;
//Rate control:
param.rc.i_rc_method = X264_RC_CRF;
param.rc.f_rf_constant = 25;
param.rc.f_rf_constant_max = 35;
//For streaming:
param.b_repeat_headers = 1;
param.b_annexb = 1;
x264_param_apply_profile(&param, "baseline");

我想为这样的东西创建包装器。所以我有 libx264.dll 和 visual studio 2010 pro。

如何为它创建 .Net C# 包装器?

我是 P\Invoke 方面的初学者,所以我不太了解...

我想要实现的是逐帧使用 x264... 现在我只需要编码部分...在 C 中执行此操作所需的所有示例代码都在 How does one encode a series of images into H264 using the x264 C API? 中。所以我只需要为那里提到的东西编写一个包装器......所以我问 - 如何在参数和设置 thap 参数的函数上创建一个包装器。我很想看看如何从 c# 中调用该包装器。因此,如果您可以提供任何支持代码,我将很高兴看到它。

【问题讨论】:

    标签: c# .net wrapper x264 libx264


    【解决方案1】:

    我建议您尝试excellent MeGUI,而不是自己尝试这个(以及无数其他代码)?它是用 C# 开发的,支持所有 X264,可以在您的 C# 或其他 .NET 项目中使用。不需要包装器,他们已经为你做了这一切。

    虽然使用 C# 调用 C 库函数并不难,但如果您确实希望自己完成这一切,我建议您查看 http://pinvoke.net,它为您提供了许多示例如何自己做。

    【讨论】:

    • 抱歉 - 我没有看到 libx264 dll 甚至 x264 exe 的包装器。您能否在存储库中提供此类文件的链接?
    • 据我所知,MeGUI 不会直接调用 libx264.dll。它直接调用可执行文件。
    • 是的 - 我需要的是逐帧使用 x264...我只需要为那里提到的东西编写一个包装器......所以我在问 - 如何在参数和设置 thap 参数的函数上创建一个包装器。我很想看看如何从 c# 中调用该包装器。所以如果你能提供任何代码来支持我会很高兴看到它。
    【解决方案2】:

    令人惊讶的是,这些年来,似乎没有人为 libx264 构建和共享最简单的 .NET 包装器。所以我最近构建了一个我称之为“x264net”的并将它放在github上,这里:https://github.com/bp2008/x264net

    此时包装器非常简单,使其成为如何从 .NET 语言访问 C 库的一个很好的示例。我没有使用 P/Invoke,因为我发现它很难使用。相反,我使用一种称为“C++/CLI”的语言来创建互操作层。 C++/CLI 是一种基于 C++ 的语言,它可以访问本机 C/C++ 库,同时它本身也可由 .NET 代码访问。因此,它像 P/Invoke 一样弥合了托管代码和本机代码之间的差距。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多