diff --git a/acinclude.m4 b/acinclude.m4 index 7f534c5..2057752 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -305,7 +305,7 @@ elif test "$BOXTYPE" = "generic"; then elif test "$BOXTYPE" = "duckbox"; then AC_DEFINE(HAVE_DUCKBOX_HARDWARE, 1, [building for a duckbox]) elif test "$BOXTYPE" = "armbox"; then - AC_DEFINE(HAVE_ARM_HARDWARE, 1, [building for a armbox]) + AC_DEFINE(HAVE_ARM_HARDWARE, 1, [building for an armbox]) fi diff --git a/libarmbox/audio.cpp b/libarmbox/audio.cpp index 909b019..dc4238e 100644 --- a/libarmbox/audio.cpp +++ b/libarmbox/audio.cpp @@ -394,8 +394,10 @@ void cAudio::SetHdmiDD(bool enable) void cAudio::SetSpdifDD(bool enable) { + //using this function for dts passthrough + const char *opt[] = { "downmix", "passthrough" }; lt_debug("%s %d\n", __func__, enable); - setBypassMode(!enable); + proc_put("/proc/stb/audio/dts", opt[enable], strlen(opt[enable])); } void cAudio::ScheduleMute(bool On) diff --git a/libarmbox/playback_gst.cpp b/libarmbox/playback_gst.cpp index a6bd3b6..8c56f24 100644 --- a/libarmbox/playback_gst.cpp +++ b/libarmbox/playback_gst.cpp @@ -70,6 +70,7 @@ GstElement * videoSink = NULL; gchar * uri = NULL; GstTagList * m_stream_tags = 0; static int end_eof = 0; +#define HTTP_TIMEOUT 30 gint match_sinktype(const GValue *velement, const gchar *type) { @@ -77,6 +78,35 @@ gint match_sinktype(const GValue *velement, const gchar *type) return strcmp(g_type_name(G_OBJECT_TYPE(element)), type); } +void playbinNotifySource(GObject *object, GParamSpec *unused, gpointer /*user_data*/) +{ + GstElement *source = NULL; + g_object_get(object, "source", &source, NULL); + + if (source) + { + if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "timeout") != 0) + { + GstElementFactory *factory = gst_element_get_factory(source); + if (factory) + { + const gchar *sourcename = gst_plugin_feature_get_name(GST_PLUGIN_FEATURE(factory)); + if (!strcmp(sourcename, "souphttpsrc")) + { + g_object_set(G_OBJECT(source), "timeout", HTTP_TIMEOUT, NULL); + } + } + } + + if (g_object_class_find_property(G_OBJECT_GET_CLASS(source), "ssl-strict") != 0) + { + g_object_set(G_OBJECT(source), "ssl-strict", FALSE, NULL); + } + + gst_object_unref(source); + } +} + GstBusSyncReply Gst_bus_call(GstBus * bus, GstMessage *msg, gpointer user_data) { gchar * sourceName; @@ -387,6 +417,10 @@ bool cPlayback::Start(char *filename, int /*vpid*/, int /*vtype*/, int /*apid*/, { isHTTP = true; } + else if(!strncmp("https://", filename, 8)) + { + isHTTP = true; + } else if(!strncmp("file://", filename, 7)) { isHTTP = false; @@ -434,6 +468,8 @@ bool cPlayback::Start(char *filename, int /*vpid*/, int /*vtype*/, int /*apid*/, if(isHTTP) { + g_signal_connect (G_OBJECT (m_gst_playbin), "notify::source", G_CALLBACK (playbinNotifySource), NULL); + // set buffer size g_object_set(G_OBJECT(m_gst_playbin), "buffer-size", m_buffer_size, NULL); g_object_set(G_OBJECT(m_gst_playbin), "buffer-duration", 5LL * GST_SECOND, NULL); diff --git a/libeplayer3/input.cpp b/libeplayer3/input.cpp index f4621f9..19af03e 100644 --- a/libeplayer3/input.cpp +++ b/libeplayer3/input.cpp @@ -80,7 +80,7 @@ extern void dvbsub_write(AVSubtitle *, int64_t); extern void dvbsub_ass_write(AVCodecContext *c, AVSubtitle *sub, int pid); extern void dvbsub_ass_clear(void); // from neutrino-mp/lib/lib/libtuxtxt/tuxtxt_common.h -//extern void teletext_write(int pid, uint8_t *data, int size); +extern void teletext_write(int pid, uint8_t *data, int size); static std::string lastlog_message; static unsigned int lastlog_repeats; @@ -253,11 +253,10 @@ bool Input::Play() } } } + } else if (_teletextTrack && (_teletextTrack->stream == stream)) { + if (packet.data && packet.size > 1) + teletext_write(_teletextTrack->pid, packet.data + 1, packet.size - 1); } -// else if (_teletextTrack && (_teletextTrack->stream == stream)) { -// if (packet.data && packet.size > 1) -// teletext_write(_teletextTrack->pid, packet.data + 1, packet.size - 1); -// } #if (LIBAVFORMAT_VERSION_MAJOR == 57 && LIBAVFORMAT_VERSION_MINOR == 25) av_packet_unref(&packet);