diff --git a/tools/chatgui/src/streamplayer_window.cpp b/tools/chatgui/src/streamplayer_window.cpp index 7568d822..7886580f 100644 --- a/tools/chatgui/src/streamplayer_window.cpp +++ b/tools/chatgui/src/streamplayer_window.cpp @@ -375,7 +375,8 @@ void StreamPlayerWindow::decode() { "codec_us=%lld/%lld convert_us=%lld/%lld audio_feed_us=%lld/%lld pull_us=%lld/%lld wait_us=%lld/%lld " "loop_max_us=%lld gui_gap_max_us=%lld gui_age_us=%lld decoded=%llu shown=%llu show_fps=%.1f " "clock_us=%lld ready_us=%lld videoQ=%zu hold=%d underruns=%llu batches=%llu batch_max=%llu " - "pending_records=%zu data_signals=%llu timing=total/max", + "pending_records=%zu data_signals=%llu presenting=%d audio_input=%d input_FIN=%d/%d/%d " + "drain=%d/%d packet_bytes=%d timing=total/max", (unsigned long long)p.id, (long long)(loopAt - report), (unsigned long long)work.loops, (unsigned long long)work.video, (unsigned long long)work.audio, (unsigned long long)work.empty, (long long)work.codec, (long long)work.codecMax, (long long)work.convert, (long long)work.convertMax, @@ -384,7 +385,9 @@ void StreamPlayerWindow::decode() { (long long)work.loopMax, (long long)p.guiGapMax, (long long)(p.guiAt ? nowUs() - p.guiAt : -1), (unsigned long long)decoded, (unsigned long long)p.shown, (p.shown - reportedShown) / seconds, (long long)p.position, (long long)p.ready, p.videos.size(), p.holdAudio, (unsigned long long)p.underruns, - (unsigned long long)work.batches, (unsigned long long)work.batchMax, records.size(), (unsigned long long)dataSignals); + (unsigned long long)work.batches, (unsigned long long)work.batchMax, records.size(), (unsigned long long)dataSignals, + p.presenting, p.sound ? stream_playback_audio_needs_input(p.sound) : -1, + p.media.finished, p.media.video_ended, p.media.audio_ended, finishing, eosSent, packet->size); DEBUG_DEBUG(DEBUG_CATEGORY_STREAM, "desktop viewer id=%llu decoded=%llu discarded=%llu shown=%llu showFps=%.1f videoQ=%zu " "clock=%lld reserve_us=%lld minimum_us=%lld tempo=%d lead_us=%lld underruns=%llu " diff --git a/tools/chatgui/tests/test_stream_view.cpp b/tools/chatgui/tests/test_stream_view.cpp index 4ca50b41..b27e4af7 100644 --- a/tools/chatgui/tests/test_stream_view.cpp +++ b/tools/chatgui/tests/test_stream_view.cpp @@ -793,8 +793,15 @@ private slots: AVPacket* packet = av_packet_alloc(); QVERIFY(packet); QCOMPARE(avcodec_receive_packet(context, packet), 0); QByteArray access(reinterpret_cast(packet->data), packet->size); av_packet_free(&packet); av_frame_free(&frame); avcodec_free_context(&context); + QVERIFY(SoundManager::instance()->init()); + std::unique_ptr + opus(opus_codec_encoder_create(48000, 2), opus_codec_encoder_destroy); + QVERIFY(opus); + int16_t pcm[1920] = {}; uint8_t encoded[1275]; + int audioSize = opus_codec_encode(opus.get(), pcm, 960, encoded, sizeof(encoded)); QVERIFY(audioSize > 0); struct Delay { Delay() { delayedDecoder = true; } ~Delay() { delayedDecoder = false; } } delay; - for (unsigned count : {3u, 8u}) { + for (bool audio : {false, true}) for (unsigned count : {3u, 8u}) { + DEBUG_INFO(DEBUG_CATEGORY_STREAM, "fixture delayed decoder frames=%u audio=%d", count, audio); QCOMPARE(stream_publish_finish(publisher), STREAM_OK); stream_close(publisher); publisher = nullptr; QCOMPARE(stream_publish_open(inst, group, nullptr, &publisher), STREAM_OK); stream_info info{}; QCOMPARE(stream_get_info(publisher, &info), STREAM_OK); epoch = info.descriptor.source_epoch; @@ -802,9 +809,15 @@ private slots: QSignalSpy shown(&window, &StreamPlayerWindow::framePresented); for (unsigned i = 0; i < count; i++) { QByteArray data = i ? access : QByteArray(4, '\0') + access; - stream_media_block media{}; media.format = {160, 90, 0, STREAM_MEDIA_H264, 0, 1}; media.video_count = 1; + stream_media_block media{}; + media.format = {160, 90, 0, STREAM_MEDIA_H264, (uint8_t)(audio ? STREAM_MEDIA_OPUS_STEREO : 0), 1}; + media.video_count = 1; media.video[0] = {i + 1, i * 40000u, (uint32_t)data.size(), 0, (uint32_t)data.size(), (uint8_t)(i ? 0 : STREAM_MEDIA_KEY), reinterpret_cast(data.constData())}; + if (audio) { + media.audio_count = 2; + for (unsigned j = 0; j < 2; j++) media.audio[j] = {i * 40000u + j * 20000u, (uint32_t)audioSize, 960, encoded}; + } uint8_t wire[7345]; size_t length = 0; QCOMPARE(stream_media_encode(&media, wire, sizeof(wire), &length), STREAM_OK); QCOMPARE(stream_publish_block(publisher, wire, length), STREAM_OK); QTest::qWait(i ? 1 : 30);