Как обернуть параметр библиотеки C? (Создание оболочки x264 .Net)

итак в dll у нас есть x264_param_t структура\объект и функция для его настройки x264_param_apply_profile. в C мы используем такой код для настройки

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 С#?

Я новичок в P\Invoke, поэтому я не очень много понимаю...

то, чего я хочу добиться, - это покадровый уровень работы с x264... К настоящему времени мне нужны только части кодирования... И весь необходимый пример кода для этого в C находится в Как кодировать серию изображений в H264 с помощью x264 C API? . Поэтому мне нужно написать оболочку только для упомянутых там вещей... Поэтому я спрашиваю - как создать оболочку для параметра и функции, которая устанавливает параметр thap. И я хотел бы увидеть, как вызвать эту оболочку обратно из С#. Поэтому, если бы вы могли предоставить какой-либо код в поддержку, я был бы рад его увидеть.


person Community    schedule 11.07.2010    source источник


Ответы (2)


Вместо того, чтобы пробовать этот (и миллионы других кодов) самостоятельно, могу я предложить вам попробовать отличный MeGUI. ? Он разработан на C# и поддерживает все X264, готовый к использованию в вашем C# или другом проекте .NET. Обертки не нужны, они уже сделали это за вас.

Хотя вызов библиотечной функции C с помощью C# не представляет особой сложности, если вы хотите сделать все это самостоятельно, я предлагаю вам взглянуть на http://pinvoke.net, где вы найдете множество примеров того, как это сделать самостоятельно.

person Abel    schedule 11.07.2010
comment
Извините - я не вижу там обертки для libx264 dll или даже для x264 exe. не могли бы вы предоставить ссылку на такой файл в репозитории? - person Rella; 11.07.2010
comment
Насколько мне известно, MeGUI не обращается к libx264.dll напрямую. Он вызывает исполняемые файлы напрямую. - person Maister; 11.07.2010
comment
да, и мне нужен покадровый уровень работы с x264... Мне нужны только части кодирования... И весь необходимый пример кода для этого в C находится в stackoverflow.com/questions/2940671/ Итак, мне нужно написать оболочку только для вещей, упомянутых там... Поэтому я спрашиваю, как создать оболочку для параметра и функции, которая устанавливает параметр thap. И я хотел бы увидеть, как вызвать эту оболочку обратно из С#. Поэтому, если бы вы могли предоставить какой-либо код в поддержку, я был бы рад его увидеть. - person Rella; 11.07.2010

Удивительно, но кажется, что за все эти годы никто не создал и не выложил даже самую простую оболочку .NET для libx264. Поэтому я недавно создал один, который назвал «x264net», и разместил его на github, здесь: https://github.com/bp2008/x264net

В настоящее время оболочка очень проста, что делает ее хорошим примером того, как получить доступ к библиотекам C из языков .NET. Я не использовал P/Invoke, потому что мне сложно с ним работать. Вместо этого я использовал язык C++/CLI для создания уровня взаимодействия. C++/CLI — это язык, основанный на C++, который может обращаться к родным библиотекам C/C++, в то же время будучи доступным для кода .NET. Таким образом, он устраняет разрыв между управляемым и собственным кодом, как это делает P/Invoke.

person Community    schedule 06.12.2016