diff --git a/tools/chatgui/tests/test_call_video_encoder.cpp b/tools/chatgui/tests/test_call_video_encoder.cpp index de7e1784..d20d6b53 100644 --- a/tools/chatgui/tests/test_call_video_encoder.cpp +++ b/tools/chatgui/tests/test_call_video_encoder.cpp @@ -3,6 +3,7 @@ #include #include "../src/call_video_encoder.h" #include "../src/call_video_decoder.h" +#include "../../../src/call/call_video_bitstream.h" extern "C" { #include "debug_config.h" #include "stream/stream_media.h" @@ -49,6 +50,24 @@ private slots: auto caps = CallVideoDecoder::capabilities(); QCOMPARE(caps.decode[0].profiles, uint8_t(3)); QCOMPARE(caps.decode[1].profiles, uint8_t(1)); QCOMPARE(caps.encode[0].width, uint16_t(0)); QCOMPARE(caps.encode[1].width, uint16_t(0)); + const QString directory = qEnvironmentVariable("UTUN_CALL_VIDEO_REMOTE_DIR"); + if (!directory.isEmpty()) { + auto files = QDir(directory).entryList({"*-codec*.idr"}, QDir::Files); QVERIFY(!files.isEmpty()); + for (const auto& name : files) { + QFile file(QDir(directory).filePath(name)); QVERIFY(file.open(QIODevice::ReadOnly)); auto bytes = file.readAll(); + int codec = name.endsWith("-codec1.idr") ? 1 : 2; + call_video_bitstream actual{}; + QVERIFY(!call_video_inspect_key(codec, reinterpret_cast(bytes.constData()), bytes.size(), &actual)); + call_video_frame f{}; f.call_id = 1; f.flags = CALL_VIDEO_KEY; f.size = f.length = bytes.size(); + f.data = reinterpret_cast(bytes.constData()); + f.format = {1, (uint16_t)actual.width, (uint16_t)actual.height, 30, 0, (uint8_t)codec, + (uint8_t)actual.level, 4000000, (uint8_t)actual.profile}; + CallVideoDecoder decoder; + for (unsigned i = 0; i < 4; ++i) { f.frame_id = i + 1; f.pts_us = 1000000 + i * 33333; + QImage image; QVERIFY2(decoder.decode(f, image), qPrintable(name)); } + DEBUG_INFO(DEBUG_CATEGORY_CALL, "hardware stream decoded file=%s", qPrintable(name)); + } + } } void switchesAtScheduledIdr() { QFETCH(int, codec);