From 547327d99c0ddf9b938dcebed64eb71cbd409793 Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sat, 23 Dec 2017 11:27:15 +0100 Subject: [PATCH 1/7] Added DisplayText DBUS support --- OMXControl.cpp | 25 +++++++++++++++++++++++++ OMXPlayerSubtitles.cpp | 11 +++++++---- omxplayer.cpp | 3 ++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/OMXControl.cpp b/OMXControl.cpp index 2172bf7c..b8bed26b 100644 --- a/OMXControl.cpp +++ b/OMXControl.cpp @@ -219,6 +219,31 @@ OMXControlResult OMXControl::handle_event(DBusMessage *m) //Does nothing return KeyConfig::ACTION_BLANK; } + else if (dbus_message_is_method_call(m, OMXPLAYER_DBUS_INTERFACE_ROOT, "DisplayText")) + { + DBusError error; + dbus_error_init(&error); + + const char *msg; + int64_t duration; + + dbus_message_get_args(m, &error, DBUS_TYPE_STRING, &msg, DBUS_TYPE_INT64, &duration, DBUS_TYPE_INVALID); + + // Make sure values are sent for setting DisplayText + if (dbus_error_is_set(&error)) + { + CLog::Log(LOGWARNING, "DisplayText D-Bus Error: %s", error.message ); + dbus_error_free(&error); + dbus_respond_ok(m); + return KeyConfig::ACTION_BLANK; + } + else + { + subtitles->DisplayText(msg, duration); + dbus_respond_ok(m); + return KeyConfig::ACTION_BLANK; + } + } //Properties Get method: //TODO: implement GetAll else if (dbus_message_is_method_call(m, DBUS_INTERFACE_PROPERTIES, "Get")) diff --git a/OMXPlayerSubtitles.cpp b/OMXPlayerSubtitles.cpp index 7f074c3e..d5e50146 100644 --- a/OMXPlayerSubtitles.cpp +++ b/OMXPlayerSubtitles.cpp @@ -61,6 +61,7 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, float font_size, bool centered, bool ghost_box, + bool osd, unsigned int lines, int display, int layer, OMXClock* clock) BOOST_NOEXCEPT @@ -81,6 +82,7 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, m_font_size = font_size; m_centered = centered; m_ghost_box = ghost_box; + m_osd = osd; m_lines = lines; m_av_clock = clock; m_display = display; @@ -491,10 +493,11 @@ bool OMXPlayerSubtitles::AddPacket(OMXPacket *pkt, size_t stream_index) BOOST_NO void OMXPlayerSubtitles::DisplayText(const std::string& text, int duration) BOOST_NOEXCEPT { assert(m_open); - - vector text_lines; - split(text_lines, text, is_any_of("\n")); - SendToRenderer(Message::DisplayText{std::move(text_lines), duration}); + if(m_osd){ + vector text_lines; + split(text_lines, text, is_any_of("\n")); + SendToRenderer(Message::DisplayText{std::move(text_lines), duration}); + } } void OMXPlayerSubtitles::SetSubtitleRect(int x1, int y1, int x2, int y2) BOOST_NOEXCEPT diff --git a/omxplayer.cpp b/omxplayer.cpp index bde45363..e05e320f 100644 --- a/omxplayer.cpp +++ b/omxplayer.cpp @@ -67,7 +67,7 @@ extern "C" { // when we repeatedly seek, rather than play continuously #define TRICKPLAY(speed) (speed < 0 || speed > 4 * DVD_PLAYSPEED_NORMAL) -#define DISPLAY_TEXT(text, ms) if(m_osd) m_player_subtitles.DisplayText(text, ms) +#define DISPLAY_TEXT(text, ms) m_player_subtitles.DisplayText(text, ms) #define DISPLAY_TEXT_SHORT(text) DISPLAY_TEXT(text, 1000) #define DISPLAY_TEXT_LONG(text) DISPLAY_TEXT(text, 2000) @@ -1116,6 +1116,7 @@ int main(int argc, char *argv[]) m_font_size, m_centered, m_ghost_box, + m_osd, m_subtitle_lines, m_config_video.display, m_config_video.layer + 1, m_av_clock)) From b39ffb8b8d0ac355c8020f5614b9af18d544e09e Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sat, 23 Dec 2017 12:28:33 +0100 Subject: [PATCH 2/7] Small fixes for DisplayText DBUS support --- OMXPlayerSubtitles.cpp | 2 +- OMXPlayerSubtitles.h | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/OMXPlayerSubtitles.cpp b/OMXPlayerSubtitles.cpp index d5e50146..3a00fea5 100644 --- a/OMXPlayerSubtitles.cpp +++ b/OMXPlayerSubtitles.cpp @@ -492,8 +492,8 @@ bool OMXPlayerSubtitles::AddPacket(OMXPacket *pkt, size_t stream_index) BOOST_NO void OMXPlayerSubtitles::DisplayText(const std::string& text, int duration) BOOST_NOEXCEPT { - assert(m_open); if(m_osd){ + assert(m_open); vector text_lines; split(text_lines, text, is_any_of("\n")); SendToRenderer(Message::DisplayText{std::move(text_lines), duration}); diff --git a/OMXPlayerSubtitles.h b/OMXPlayerSubtitles.h index 91c374c0..67f6a768 100644 --- a/OMXPlayerSubtitles.h +++ b/OMXPlayerSubtitles.h @@ -46,6 +46,7 @@ class OMXPlayerSubtitles : public OMXThread float font_size, bool centered, bool ghost_box, + bool osd, unsigned int lines, int display, int layer, OMXClock* clock) BOOST_NOEXCEPT; @@ -170,6 +171,7 @@ class OMXPlayerSubtitles : public OMXThread float m_font_size; bool m_centered; bool m_ghost_box; + bool m_osd; unsigned int m_lines; OMXClock* m_av_clock; int m_display; From ed8a9a40d5cc8fce6a6c3607b1acb5fd118acf2d Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sat, 23 Dec 2017 12:50:32 +0100 Subject: [PATCH 3/7] Updated README --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index fe83c601..4d104006 100644 --- a/README.md +++ b/README.md @@ -226,6 +226,17 @@ No effect. Params | Type :-------------: | ------- Return | `null` + +##### DisplayText + +Display a message for the specified amount of time. If omxplayer is run with +--no-osd, no message is displayed + + Params | Type | Description +:-------------: | ----------| ------------------ + 1 | `string` | Message to display + 2 | `int64` | Microseconds to display + Return | `null` | #### Properties From 4a209fb8b4917b4c7af2dcf9e5e5802d5c003862 Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sat, 23 Dec 2017 12:58:57 +0100 Subject: [PATCH 4/7] Added displaytext to dbuscontrol.sh --- dbuscontrol.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/dbuscontrol.sh b/dbuscontrol.sh index 7fd71647..d3f06316 100755 --- a/dbuscontrol.sh +++ b/dbuscontrol.sh @@ -10,6 +10,10 @@ export DBUS_SESSION_BUS_PID=`cat $OMXPLAYER_DBUS_PID` [ -z "$DBUS_SESSION_BUS_ADDRESS" ] && { echo "Must have DBUS_SESSION_BUS_ADDRESS" >&2; exit 1; } case $1 in +displaytext) + dbus-send --print-reply=literal --session --dest=org.mpris.MediaPlayer2.omxplayer /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.DisplayText string:"$2" int64:$3 >/dev/null + ;; + status) duration=`dbus-send --print-reply=literal --session --reply-timeout=500 --dest=org.mpris.MediaPlayer2.omxplayer /org/mpris/MediaPlayer2 org.freedesktop.DBus.Properties.Get string:"org.mpris.MediaPlayer2.Player" string:"Duration"` [ $? -ne 0 ] && exit 1 From d3860539480a02c3c30f39c4f66fc777095e23b5 Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sat, 23 Dec 2017 23:34:02 +0100 Subject: [PATCH 5/7] Disabled m_open assertion for DBUS methods --- OMXPlayerSubtitles.cpp | 25 +++++++++---------------- OMXPlayerSubtitles.h | 7 +------ omxplayer.cpp | 3 +-- 3 files changed, 11 insertions(+), 24 deletions(-) diff --git a/OMXPlayerSubtitles.cpp b/OMXPlayerSubtitles.cpp index 3a00fea5..685805db 100644 --- a/OMXPlayerSubtitles.cpp +++ b/OMXPlayerSubtitles.cpp @@ -44,9 +44,7 @@ OMXPlayerSubtitles::OMXPlayerSubtitles() BOOST_NOEXCEPT m_ghost_box(), m_lines(), m_av_clock(), -#ifndef NDEBUG m_open() -#endif {} OMXPlayerSubtitles::~OMXPlayerSubtitles() BOOST_NOEXCEPT @@ -61,7 +59,6 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, float font_size, bool centered, bool ghost_box, - bool osd, unsigned int lines, int display, int layer, OMXClock* clock) BOOST_NOEXCEPT @@ -82,7 +79,6 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, m_font_size = font_size; m_centered = centered; m_ghost_box = ghost_box; - m_osd = osd; m_lines = lines; m_av_clock = clock; m_display = display; @@ -93,9 +89,7 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, SendToRenderer(Message::Flush{m_external_subtitles}); -#ifndef NDEBUG m_open = true; -#endif return true; } @@ -111,9 +105,7 @@ void OMXPlayerSubtitles::Close() BOOST_NOEXCEPT m_mailbox.clear(); m_subtitle_buffers.clear(); -#ifndef NDEBUG m_open = false; -#endif } void OMXPlayerSubtitles::Process() @@ -390,8 +382,9 @@ void OMXPlayerSubtitles::SetDelay(int value) BOOST_NOEXCEPT void OMXPlayerSubtitles::SetVisible(bool visible) BOOST_NOEXCEPT { - assert(m_open); - + if (!m_open) + return + if(visible) { if (!m_visible) @@ -492,12 +485,12 @@ bool OMXPlayerSubtitles::AddPacket(OMXPacket *pkt, size_t stream_index) BOOST_NO void OMXPlayerSubtitles::DisplayText(const std::string& text, int duration) BOOST_NOEXCEPT { - if(m_osd){ - assert(m_open); - vector text_lines; - split(text_lines, text, is_any_of("\n")); - SendToRenderer(Message::DisplayText{std::move(text_lines), duration}); - } + if (!m_open) + return + + vector text_lines; + split(text_lines, text, is_any_of("\n")); + SendToRenderer(Message::DisplayText{std::move(text_lines), duration}); } void OMXPlayerSubtitles::SetSubtitleRect(int x1, int y1, int x2, int y2) BOOST_NOEXCEPT diff --git a/OMXPlayerSubtitles.h b/OMXPlayerSubtitles.h index 67f6a768..52c892f1 100644 --- a/OMXPlayerSubtitles.h +++ b/OMXPlayerSubtitles.h @@ -46,7 +46,6 @@ class OMXPlayerSubtitles : public OMXThread float font_size, bool centered, bool ghost_box, - bool osd, unsigned int lines, int display, int layer, OMXClock* clock) BOOST_NOEXCEPT; @@ -171,13 +170,9 @@ class OMXPlayerSubtitles : public OMXThread float m_font_size; bool m_centered; bool m_ghost_box; - bool m_osd; unsigned int m_lines; OMXClock* m_av_clock; int m_display; int m_layer; - -#ifndef NDEBUG - bool m_open; -#endif + bool m_open; }; diff --git a/omxplayer.cpp b/omxplayer.cpp index e05e320f..7d924d27 100644 --- a/omxplayer.cpp +++ b/omxplayer.cpp @@ -67,7 +67,7 @@ extern "C" { // when we repeatedly seek, rather than play continuously #define TRICKPLAY(speed) (speed < 0 || speed > 4 * DVD_PLAYSPEED_NORMAL) -#define DISPLAY_TEXT(text, ms) m_player_subtitles.DisplayText(text, ms) +#define DISPLAY_TEXT(text, ms) if(m_osd) m_player_subtitles.DisplayText(text, ms) #define DISPLAY_TEXT_SHORT(text) DISPLAY_TEXT(text, 1000) #define DISPLAY_TEXT_LONG(text) DISPLAY_TEXT(text, 2000) @@ -1116,7 +1116,6 @@ int main(int argc, char *argv[]) m_font_size, m_centered, m_ghost_box, - m_osd, m_subtitle_lines, m_config_video.display, m_config_video.layer + 1, m_av_clock)) From dbadf537636b640b909d1547d2eddcf70ab2d165 Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sun, 24 Dec 2017 01:28:33 +0100 Subject: [PATCH 6/7] fixed missing semicolon --- OMXPlayerSubtitles.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/OMXPlayerSubtitles.cpp b/OMXPlayerSubtitles.cpp index 685805db..89bd99f8 100644 --- a/OMXPlayerSubtitles.cpp +++ b/OMXPlayerSubtitles.cpp @@ -383,7 +383,7 @@ void OMXPlayerSubtitles::SetDelay(int value) BOOST_NOEXCEPT void OMXPlayerSubtitles::SetVisible(bool visible) BOOST_NOEXCEPT { if (!m_open) - return + return; if(visible) { @@ -486,7 +486,7 @@ bool OMXPlayerSubtitles::AddPacket(OMXPacket *pkt, size_t stream_index) BOOST_NO void OMXPlayerSubtitles::DisplayText(const std::string& text, int duration) BOOST_NOEXCEPT { if (!m_open) - return + return; vector text_lines; split(text_lines, text, is_any_of("\n")); From 8058125642036758a30a561ae9d477eddd5c3ad0 Mon Sep 17 00:00:00 2001 From: Mello-Yello Date: Sun, 24 Dec 2017 14:44:03 +0100 Subject: [PATCH 7/7] fixed GetActiveStream and SetActiveStream DBUS check --- OMXPlayerSubtitles.cpp | 4 +++- OMXPlayerSubtitles.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/OMXPlayerSubtitles.cpp b/OMXPlayerSubtitles.cpp index 89bd99f8..37b74f1f 100644 --- a/OMXPlayerSubtitles.cpp +++ b/OMXPlayerSubtitles.cpp @@ -405,7 +405,9 @@ void OMXPlayerSubtitles::SetVisible(bool visible) BOOST_NOEXCEPT void OMXPlayerSubtitles::SetActiveStream(size_t index) BOOST_NOEXCEPT { - assert(m_open); + if (!m_open) + return; + assert(index < m_subtitle_buffers.size()); m_active_index = index; diff --git a/OMXPlayerSubtitles.h b/OMXPlayerSubtitles.h index 52c892f1..a7c0ce5b 100644 --- a/OMXPlayerSubtitles.h +++ b/OMXPlayerSubtitles.h @@ -66,7 +66,9 @@ class OMXPlayerSubtitles : public OMXThread size_t GetActiveStream() BOOST_NOEXCEPT { - assert(m_open); + if (!m_open) + return; + assert(!m_subtitle_buffers.empty()); return m_active_index; }