Verify GPU backlog drains fully without additional camera inputs

This commit is contained in:
evgeny committed 2026-10-19 17:44:14 +02:00
1 parent d266c5da25
commit 12e9e4da37
1 file changed
+27
@@ -122,6 +122,33 @@ private slots:
QVERIFY2(encoder.error().contains("call bitstream contract"), qPrintable(encoder.error()));
QCOMPARE(software, 0u);
}
void drainsWithoutNewCapture() {
selected = "h264_nvenc";
CallVideoEncoder encoder; call_video_format format{1, 640, 360, 30, 0, 1, 31, 4000000, 2};
QVERIFY2(encoder.open(format, 1000000), qPrintable(encoder.error()));
QImage image(640, 360, QImage::Format_RGB32); image.fill(Qt::blue);
QList<LiveEncodedFrame> output; CallVideoRateCompletion completion;
QVERIFY(encoder.encode(image, 1000000, true, output, completion));
QVERIFY(encoder.encode(image, 1033333, false, output, completion));
QCOMPARE(output.size(), 1); QCOMPARE(output.front().pts, uint64_t(1000000));
CallVideoDecoder decoder; unsigned decodedCount = 0;
auto decode = [&](const LiveEncodedFrame& f) {
call_video_frame wire{}; wire.call_id = 1; wire.frame_id = ++decodedCount; wire.pts_us = f.pts; wire.format = format;
wire.data = reinterpret_cast<const uint8_t*>(f.data.constData()); wire.size = wire.length = f.data.size();
wire.flags = f.key ? CALL_VIDEO_KEY : 0; QImage decoded; return decoder.decode(wire, decoded);
};
QVERIFY(decode(output.front())); depth = 8; // GPU временно перестал выдавать output.
for (unsigned i = 2; i < 9; ++i) {
QVERIFY(encoder.encode(image, 1000000 + i * 33333ull, false, output, completion)); QVERIFY(output.isEmpty());
}
QCOMPARE(encoder.pendingFrames(), 8u);
depth = 0; // Завершение аппаратной работы без следующего кадра камеры.
QVERIFY(encoder.encode({}, 0, false, output, completion)); QCOMPARE(output.size(), 8);
for (unsigned i = 0; i < 8; ++i) {
QCOMPARE(output[i].pts, 1000000 + (i + 1) * 33333ull); QVERIFY(decode(output[i]));
}
QCOMPARE(encoder.pendingFrames(), 0u); QCOMPARE(decodedCount, 9u);
}
void pipeline_data() {
QTest::addColumn<QByteArray>("backend"); QTest::addColumn<bool>("batch"); QTest::addColumn<bool>("reject");
for (auto name : {"h264_nvenc", "hevc_nvenc", "h264_amf", "hevc_amf", "h264_qsv", "hevc_qsv"})