From cc98f1d0e8ee35be9328479115ac77f63a15fa44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Blin?= Date: Mon, 13 Nov 2023 11:37:02 -0500 Subject: [PATCH] media_player: add ability to play images JPG/PNG sharing in video calls is broken since we use the media player to share all the files Change-Id: Ib85e65405faf46e8b5ff7e4bc7d745af69b1f360 --- src/media/media_player.cpp | 27 ++++++++++++++++++---- test/unitTest/media/jami.jpg | Bin 0 -> 6684 bytes test/unitTest/media/test_media_player.cpp | 19 +++++++++++++++ 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 test/unitTest/media/jami.jpg diff --git a/src/media/media_player.cpp b/src/media/media_player.cpp index 271f334a7..409fcb0de 100644 --- a/src/media/media_player.cpp +++ b/src/media/media_player.cpp @@ -69,6 +69,18 @@ MediaPlayer::configureMediaInputs() devOpts.name = path_; devOpts.loop = "1"; + size_t dot = path_.find_last_of('.'); + std::string ext = dot == std::string::npos ? "" : path_.substr(dot + 1); + bool decodeImg = (ext == "jpeg" || ext == "jpg" || ext == "png" || ext == "pdf"); + + // Force 1fps for static image + if (decodeImg) { + devOpts.format = "image2"; + devOpts.framerate = 1; + } else { + JAMI_WARNING("Guessing file type for {}", path_); + } + if (demuxer_->openInput(devOpts) < 0) { emitInfo(); return false; @@ -112,11 +124,16 @@ MediaPlayer::configureMediaInputs() } }); - fileDuration_ = demuxer_->getDuration(); - if (fileDuration_ <= 0) { - emitInfo(); - return false; + if (decodeImg) { + fileDuration_ = 0; + } else { + fileDuration_ = demuxer_->getDuration(); + if (fileDuration_ <= 0) { + emitInfo(); + return false; + } } + emitInfo(); demuxer_->updateCurrentState(MediaDemuxer::CurrentState::Demuxing); return true; @@ -127,7 +144,7 @@ MediaPlayer::process() { if (!demuxer_) return; - if (streamsFinished()) { + if (fileDuration_ > 0 && streamsFinished()) { audioStreamEnded_ = false; videoStreamEnded_ = false; playFileFromBeginning(); diff --git a/test/unitTest/media/jami.jpg b/test/unitTest/media/jami.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1d023d5dbfbfd78d96aafda2c9773437cf5083e GIT binary patch literal 6684 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 YDzg7D_MDy&msc_N2|09X;dgetId() == pid); + CPPUNIT_ASSERT(mediaPlayer->isInputValid()); + CPPUNIT_ASSERT(audio_stream_ != -1); + CPPUNIT_ASSERT(video_stream_ != -1); + CPPUNIT_ASSERT(mediaPlayer->isPaused()); + CPPUNIT_ASSERT(mediaPlayer->getPlayerPosition() == 0); + JAMI_INFO() << "End testJpg"; +} + void MediaPlayerTest::testPause() {