Add support for ffmpeg 6.0
- Use the new send_frame/receive_packet API for encoding
- Use the new channel layout API for audio
- Fix audio recording
- Copy codec parameters to the stream parameters
- Set correct pts for audio frames
- Read audio samples from file directly to the refcounted AVFrame buffer instead of the `g_pSamples` buffer
- Use global AVPackets allocated with `av_packet_alloc`
- Stop trying to write more audio frames when `WriteAudioFrame` fails with a negative error code
- Fix segfault with `g_pContainer->url`. The field has to be allocated with `av_malloc` before writing to it. It's set to `NULL` by default.
- Properly free allocations with `avcodec_free_context` and `avformat_free_context`
#include <QDebug>
#include <QGuiApplication>
#include <QLibrary>
#include <QQmlApplicationEngine>
#include "engine_interface.h"
#include "game_view.h"
#include "hwengine.h"
#include "net_session.h"
#include "preview_acceptor.h"
static QObject* previewacceptor_singletontype_provider(
QQmlEngine* engine, QJSEngine* scriptEngine) {
Q_UNUSED(scriptEngine)
PreviewAcceptor* acceptor = new PreviewAcceptor(engine);
return acceptor;
}
int main(int argc, char* argv[]) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qRegisterMetaType<Engine::SimpleEventType>();
qRegisterMetaType<Engine::LongEventType>();
qRegisterMetaType<Engine::LongEventState>();
qRegisterMetaType<Engine::PositionedEventType>();
qmlRegisterSingletonType<PreviewAcceptor>(
"Hedgewars.Engine", 1, 0, "PreviewAcceptor",
previewacceptor_singletontype_provider);
qmlRegisterType<HWEngine>("Hedgewars.Engine", 1, 0, "HWEngine");
qmlRegisterType<GameView>("Hedgewars.Engine", 1, 0, "GameView");
qmlRegisterType<NetSession>("Hedgewars.Engine", 1, 0, "NetSession");
qmlRegisterUncreatableType<EngineInstance>(
"Hedgewars.Engine", 1, 0, "EngineInstance",
QStringLiteral("Create by HWEngine run methods"));
qmlRegisterUncreatableMetaObject(Engine::staticMetaObject, "Hedgewars.Engine",
1, 0, "Engine",
QStringLiteral("Namespace: only enums"));
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty()) return -1;
return app.exec();
}