.pro文件
#-------------------------------------------------
#
# Project created by QtCreator 2022-05-31T09:57:32
#
#-------------------------------------------------
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = FFmpeg_SDL
TEMPLATE = app
SOURCES += main.cpp\
mainwindow.cpp
HEADERS += mainwindow.h
FORMS += mainwindow.ui
INCLUDEPATH += $$PWD/include
#添加c++11支持
QMAKE_CXXFLAGS += -std=c++0x
LIBS += $$PWD/lib/win32/avcodec.lib \
$$PWD/lib/win32/avdevice.lib \
$$PWD/lib/win32/avfilter.lib \
$$PWD/lib/win32/avformat.lib \
$$PWD/lib/win32/avutil.lib \
$$PWD/lib/win32/postproc.lib \
$$PWD/lib/win32/swresample.lib \
$$PWD/lib/win32/swscale.lib \
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
//重载一下绘制画面的函数,渲染
void paintEvent(QPaintEvent *ev) override;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
//报错提示,需要加入这个文件
#define __STDC_CONSTANT_MACROS
extern "C"{
//指定函数是c语言函数,函数名不包含重载标注
//引用ffmpeg头文件
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
#include <libavformat/avformat.h>
#include <libavutil/avconfig.h>
#include <libswscale/swscale.h>
#include <libswresample/swresample.h>
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
//显示当前ffmpeg的版本号
qDebug() << av_version_info();
return a.exec();
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
//绘制图像
#include <QPainter>
//使用QPaint绘制QImage
#include <QImage>
//定义窗口大小
static int w = 1280;
static int h = 720;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//改变窗口大小
resize(w,h);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *ev)
{
//要显示的图像,w:宽,h:高 ,格式
QImage img(w,h,QImage::Format_RGB888);
//填充图像
auto d = img.bits();
unsigned char r = 255;
for(int j = 0;j < h;j++){
r--;
int b = j * w * 3;//前边的总大小
for(int i = 0;i < w*3;i += 3){
d[b+i] = r; //r
d[b+i+1] = 0; //g
d[b+i+2] = 0; //b
}
}
//实例化对象
QPainter p;
p.begin(this);//开始
p.drawImage(0,0,img);
p.end();//结束
}