Как мне использовать 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++
.