Verify GPU backlog drains fully without additional camera inputs
This commit is contained in:
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"})
|
||||
|
||||
Reference in new issue
Block a user