summaryrefslogtreecommitdiff
path: root/ext/resindvd/resindvdsrc.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/resindvd/resindvdsrc.c')
-rw-r--r--ext/resindvd/resindvdsrc.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/ext/resindvd/resindvdsrc.c b/ext/resindvd/resindvdsrc.c
index 3e48e813b..45bd56f7b 100644
--- a/ext/resindvd/resindvdsrc.c
+++ b/ext/resindvd/resindvdsrc.c
@@ -36,6 +36,7 @@ GST_DEBUG_CATEGORY_STATIC (rsndvdsrc_debug);
#define DEFAULT_DEVICE "/dev/dvd"
#define DEFAULT_FASTSTART TRUE
+#define DEFAULT_LANG "en"
#define GST_FLOW_WOULD_BLOCK GST_FLOW_CUSTOM_SUCCESS
@@ -354,6 +355,8 @@ static gboolean
rsn_dvdsrc_start (GstBaseSrc * bsrc)
{
resinDvdSrc *src = RESINDVDSRC (bsrc);
+ const gchar *const *langs, *const *cur;
+ gchar lang[8];
g_mutex_lock (src->dvd_lock);
if (!read_vts_info (src)) {
@@ -374,6 +377,21 @@ rsn_dvdsrc_start (GstBaseSrc * bsrc)
goto fail;
}
+ /* Attempt to set DVD menu, audio and spu languages */
+ langs = g_get_language_names ();
+ strncpy (lang, DEFAULT_LANG, 8);
+ for (cur = langs; *cur != NULL; cur++) {
+ /* Look for a 2 char iso-639 lang */
+ if (strlen (*cur) == 2) {
+ strncpy (lang, *cur, 8);
+ break;
+ }
+ }
+ /* Set the user's preferred language */
+ dvdnav_menu_language_select (src->dvdnav, lang);
+ dvdnav_audio_language_select (src->dvdnav, lang);
+ dvdnav_spu_language_select (src->dvdnav, lang);
+
if (src->faststart) {
if (dvdnav_title_play (src->dvdnav, 1) != DVDNAV_STATUS_OK ||
(dvdnav_menu_call (src->dvdnav, DVD_MENU_Title) != DVDNAV_STATUS_OK &&
@@ -1058,11 +1076,11 @@ rsn_dvdsrc_step (resinDvdSrc * src, gboolean have_dvd_lock)
dvdnav_audio_stream_change_event_t *event =
(dvdnav_audio_stream_change_event_t *) data;
+ rsn_dvdsrc_prepare_audio_stream_event (src,
+ event->logical, event->physical);
GST_DEBUG_OBJECT (src, " physical: %d", event->physical);
GST_DEBUG_OBJECT (src, " logical: %d", event->logical);
- rsn_dvdsrc_prepare_audio_stream_event (src,
- event->logical, event->physical);
break;
}
case DVDNAV_SPU_STREAM_CHANGE:{
@@ -2369,7 +2387,7 @@ rsn_dvdsrc_src_event (GstBaseSrc * basesrc, GstEvent * event)
GST_LOG_OBJECT (src, "handling seek event");
gst_event_parse_seek (event, NULL, NULL, &flags, NULL, NULL, NULL, NULL);
- src->flushing_seek = ! !(flags & GST_SEEK_FLAG_FLUSH);
+ src->flushing_seek = !!(flags & GST_SEEK_FLAG_FLUSH);
GST_DEBUG_OBJECT (src, "%s seek event",
src->flushing_seek ? "flushing" : "non-flushing");