Как использовать libavcodec в Qt4? - PullRequest
3 голосов
/ 15 ноября 2010

Как мне использовать libavcodec в Qt4 для доступа к отдельным видеокадрам?

Убедившись, что видеопоток может быть декодирован libavcodec, скомпилировав в этом примере , я переместил исходный код в свою программу на C ++. Теперь av_open_input_file() внезапно не может открыть мой видеофайл (возвращая код ошибки: -2).

Звонок выглядит сейчас так:

...
// Register all formats and codecs
avcodec_register_all();

// Open video file
QString videoFileName("/absolute/path/to/video.avi"); // from somewhere else in the application
const char* fileName = videoFileName.toStdString().c_str();
int err = 0;
if((err = av_open_input_file(&pFormatCtx, fileName, NULL, 0, NULL)) != 0)
{
    doErrorHandling(err, fileName); // err = -2
}

Когда я смотрю на const char* fileName внутри отладчика, это выглядит правильно. Я делаю какую-то базовую ошибку при смешивании кода на C и C ++ (для первой попытки я просто выбросил код из примера в конструктор класса)?

Примечание : Чтобы компилировать приложение, я включаю заголовки, подобные этому:

extern "C"
{
#define __STDC_CONSTANT_MACROS // for UINT64_C
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libswscale/swscale.h>
}

Я также безуспешно пытался запрограммировать путь к видеофайлу в приложение:

av_open_input_file(&pFormatCtx, "/home/bjoernz/video.avi", NULL, 0, NULL);

Мне удалось скомпилировать и выполнить пример (avcodec_sample.0.5.0.c), используя g++.

Ответы [ 2 ]

2 голосов
/ 15 ноября 2010

Что ж, это смущает:

Когда я перенес исходный код из примера в приложение c ++, я допустил глупую ошибку, когда получил ошибки компоновщика, которые сказали мне, что av_register_all(); было недоступно ..и я переименовал его в avcodec_register_all(), через некоторое время я исправил проблему с компоновщиком и забыл об этом ...

Решение : avcodec_register_all() необходимо изменить на av_register_all().

2 голосов
/ 15 ноября 2010

Ошибка -2 означает No such file or directory.Я уверен, что файл, который вы пытаетесь открыть, не находится в вашем «текущем рабочем каталоге» при запуске приложения.

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