Миграция с Windows ffmpeg 0.52 на linux ffmpeg 0.61 Ошибка кода. Как это исправить? - PullRequest
1 голос
/ 21 февраля 2011

Ранее я использовал ffmpeg в Windows (сборка 0.52 я где-то нашел). Теперь я портирую на Linux и на последнюю версию ffmpeg. Пока я получил 4 ошибки в 2 строки На такой простой строке:

size = avpicture_get_size(pix_fmt, nWidth, nHeight);

Я получаю:

  initializing argument 1 of ‘int avpicture_get_size(PixelFormat, int, int)’    C/C++ Problem

и

invalid conversion from ‘int’ to ‘PixelFormat’      C/C++ Problem

А на такой простой линии

 avpicture_fill((AVPicture *)picture, picture_buf, pix_fmt, nWidth, nHeight);

Я получаю:

 initializing argument 3 of ‘int avpicture_fill(AVPicture*, uint8_t*, PixelFormat, int, int)’       C/C++ Problem

и

invalid conversion from ‘int’ to ‘PixelFormat’      C/C++ Problem

Код скомпилирован и отлично работает под Windows ffmpeg 0.52, но теперь выдает такую ​​ошибку на linux g ++ на ffmpeg 0.6.1

Как исправить такие ошибки?

Ответы [ 3 ]

2 голосов
/ 21 февраля 2011

PixelFormat определяется как перечисление в pixfmt.h.Я думаю, что проблема в том, что в C ++ нет неявного преобразования из int в enum.Итак, вам нужно явно преобразовать int в PixelFormat.Попробуйте это:

size = avpicture_get_size(static_cast<PixelFormat>(pix_fmt), nWidth, nHeight);

или вы можете просто сделать pix_fmt a PixelFormat вместо int.

Я не знаю, почему это работало ранее, потому что C ++ не позволяетint в enum преобразование без приведения.Я думаю, что C допускает это, хотя, возможно, это было скомпилировано ранее с C.

Edit: Я только что видел изменение API с int на enum.Вот почему он был скомпилирован ранее.

2 голосов
/ 21 февраля 2011

Что ж, FFMPEG API изменился со старого 0.52 на 0.6.1.Вы должны проверить новые вызовы API и адаптировать их.pix_fmt был int и теперь является PixelFormat, как указывают ваши ошибки:)

В вашем случае формат пикселя был int в вызовах API в старом FFMPEG и теперь (0,6) enum PixelFormat .

my2c

1 голос
/ 21 февраля 2011

В дополнение к ответам выше, взгляните на старую и новую версии API.

Старый

Новый

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...