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..37b74f1f 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 @@ -91,9 +89,7 @@ bool OMXPlayerSubtitles::Open(size_t stream_count, SendToRenderer(Message::Flush{m_external_subtitles}); -#ifndef NDEBUG m_open = true; -#endif return true; } @@ -109,9 +105,7 @@ void OMXPlayerSubtitles::Close() BOOST_NOEXCEPT m_mailbox.clear(); m_subtitle_buffers.clear(); -#ifndef NDEBUG m_open = false; -#endif } void OMXPlayerSubtitles::Process() @@ -388,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) @@ -410,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; @@ -490,8 +487,9 @@ 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_open) + return; + 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..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; } @@ -174,8 +176,5 @@ class OMXPlayerSubtitles : public OMXThread OMXClock* m_av_clock; int m_display; int m_layer; - -#ifndef NDEBUG - bool m_open; -#endif + bool m_open; }; 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 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 diff --git a/omxplayer.cpp b/omxplayer.cpp index bde45363..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) if(m_osd) 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)