Как использовать avcodec_register () в программе на C ++

Я не хочу регистрировать все кодеки с помощью avcodec_register_all (); I хотите зарегистрировать один конкретный кодек. Как ни странно, я не могу найти ни одного рабочего примера, который показывает, как использовать

extern AVCodec ff_h264_decoder;

avcodec_register(&ff_h264_decoder);

Но я получаю

неразрешенный внешний символ

Ошибка компоновщика. Я попытался обернуть структуру extern "C", но все равно. Нужно ли связывать библиотеку h264 для доступа к этим структурам?


person Michael IV    schedule 30.07.2017    source источник
comment
Какой символ остается неразрешенным?   -  person Alan Stokes    schedule 30.07.2017
comment
@AlanStokes ff_h264_decoder   -  person Michael IV    schedule 30.07.2017
comment
Вы связали libavcodec?   -  person aergistal    schedule 31.07.2017
comment
Уверен, программы отлично работают с avcodec register all.   -  person Michael IV    schedule 31.07.2017
comment
register_all делает именно то, что делали вы, и avcodec_register(&ff_h264_decoder) работает для меня в c. libx264 используется только для кодирования.   -  person aergistal    schedule 31.07.2017
comment
@aergistal, но мой вопрос именно в этом. Я не могу заставить avcodec_register () работать в программе C ++, а не C. Прочтите мой вопрос еще раз.   -  person Michael IV    schedule 31.07.2017
comment
Я говорю о том, что вы неправильно ссылаетесь. Я могу легко скомпилировать его с g++. Было бы полезно выложить команду сборки.   -  person aergistal    schedule 31.07.2017
comment
Ой, как плохо. Забыл упомянуть, что работаю на MSVC 140.: /   -  person Michael IV    schedule 31.07.2017


Ответы (1)


Я не очень хорошо знаком с MSVC, и вы упустили детали сборки. Однако распространенной причиной такого рода ошибок является неправильный порядок библиотеки при статической компоновке, поэтому проверьте, как она обрабатывает зависимости.

Ниже приведен пример для g++, возможно, это поможет вам или кому-то другому.

extern "C" {
    #include <libavcodec/avcodec.h>
}

extern AVCodec ff_h264_decoder;

int main() {
    avcodec_register(&ff_h264_decoder);
}

а также

g++ -o register -I/ffmpeg/include/path register.cpp -L/ffmpeg/lib/path -lavcodec -lavutil -lpthread [-possibly other libs based on configuration]

или используйте pkg-config.

person aergistal    schedule 31.07.2017
comment
Как ни странно, я попробовал это снова, и он скомпилировал без ошибок компоновщика. Спасибо. - person Michael IV; 16.11.2017