P_INVOKE gchar * bp_get_subtitle_description (BansheePlayer *player, int i) { gchar *code = NULL; gchar *desc = NULL; GstTagList *tags = NULL; g_return_val_if_fail (IS_BANSHEE_PLAYER (player), NULL); g_signal_emit_by_name (G_OBJECT (player->playbin), "get-text-tags", i, &tags); if (G_LIKELY(tags)) { gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &code); gst_tag_list_free (tags); g_return_val_if_fail (code != NULL, NULL); // ISO 639-2 undetermined language if (strcmp ((const gchar *)code, "und") == 0) { g_free (code); return NULL; } bp_debug ("[subtitle]: iso 639-2 subtitle code %s", code); desc = (gchar *) gst_tag_get_language_name ((const gchar *)&code); bp_debug ("[subtitle]: subtitle language: %s", desc); g_free (code); } return desc; }
static void play_cycle_track_selection (GstPlay * play, GstPlayTrackType track_type) { const gchar *prop_cur, *prop_n, *prop_get, *name; gint cur = -1, n = -1; switch (track_type) { case GST_PLAY_TRACK_TYPE_AUDIO: prop_get = "get-audio-tags"; prop_cur = "current-audio"; prop_n = "n-audio"; name = "audio"; break; case GST_PLAY_TRACK_TYPE_VIDEO: prop_get = "get-video-tags"; prop_cur = "current-video"; prop_n = "n-video"; name = "video"; break; case GST_PLAY_TRACK_TYPE_SUBTITLE: prop_get = "get-text-tags"; prop_cur = "current-text"; prop_n = "n-text"; name = "subtitle"; break; default: return; } g_object_get (play->playbin, prop_cur, &cur, prop_n, &n, NULL); if (n < 1) { g_print ("No %s tracks.\n", name); } else if (n == 1) { g_print ("No other %s tracks to switch to.\n", name); } else { gchar *lcode = NULL, *lname = NULL; const gchar *lang = NULL; GstTagList *tags = NULL; cur = (cur + 1) % n; g_signal_emit_by_name (play->playbin, prop_get, cur, &tags); if (tags != NULL) { if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lcode)) lang = gst_tag_get_language_name (lcode); else if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_NAME, &lname)) lang = lname; gst_tag_list_unref (tags); } if (lang != NULL) g_print ("Switching to %s track %d of %d (%s).\n", name, cur + 1, n, lang); else g_print ("Switching to %s track %d of %d.\n", name, cur + 1, n); g_object_set (play->playbin, prop_cur, cur, NULL); g_free (lcode); g_free (lname); } }
static PyObject * _wrap_gst_tag_get_language_name(PyObject *self, PyObject *args, PyObject *kwargs) { static char *kwlist[] = { "language_code", NULL }; char *language_code; const gchar *ret; if (!PyArg_ParseTupleAndKeywords(args, kwargs,"s:get_language_name", kwlist, &language_code)) return NULL; pyg_begin_allow_threads; ret = gst_tag_get_language_name(language_code); pyg_end_allow_threads; if (ret) return PyString_FromString(ret); Py_INCREF(Py_None); return Py_None; }
static void play_cycle_track_selection (GstPlay * play, GstPlayTrackType track_type) { const gchar *prop_cur, *prop_n, *prop_get, *name; gint cur = -1, n = -1; guint flag, cur_flags; switch (track_type) { case GST_PLAY_TRACK_TYPE_AUDIO: prop_get = "get-audio-tags"; prop_cur = "current-audio"; prop_n = "n-audio"; name = "audio"; flag = 0x2; break; case GST_PLAY_TRACK_TYPE_VIDEO: prop_get = "get-video-tags"; prop_cur = "current-video"; prop_n = "n-video"; name = "video"; flag = 0x1; break; case GST_PLAY_TRACK_TYPE_SUBTITLE: prop_get = "get-text-tags"; prop_cur = "current-text"; prop_n = "n-text"; name = "subtitle"; flag = 0x4; break; default: return; } g_object_get (play->playbin, prop_cur, &cur, prop_n, &n, "flags", &cur_flags, NULL); if (n < 1) { g_print ("No %s tracks.\n", name); } else { gchar *lcode = NULL, *lname = NULL; const gchar *lang = NULL; GstTagList *tags = NULL; if (!(cur_flags & flag)) cur = 0; else cur = (cur + 1) % (n + 1); if (cur >= n && track_type != GST_PLAY_TRACK_TYPE_VIDEO) { cur = -1; g_print ("Disabling %s. \n", name); if (cur_flags & flag) { cur_flags &= ~flag; g_object_set (play->playbin, "flags", cur_flags, NULL); } } else { /* For video we only want to switch between streams, not disable it altogether */ if (cur >= n) cur = 0; if (!(cur_flags & flag) && track_type != GST_PLAY_TRACK_TYPE_VIDEO) { cur_flags |= flag; g_object_set (play->playbin, "flags", cur_flags, NULL); } g_signal_emit_by_name (play->playbin, prop_get, cur, &tags); if (tags != NULL) { if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_CODE, &lcode)) lang = gst_tag_get_language_name (lcode); else if (gst_tag_list_get_string (tags, GST_TAG_LANGUAGE_NAME, &lname)) lang = lname; gst_tag_list_unref (tags); } if (lang != NULL) g_print ("Switching to %s track %d of %d (%s).\n", name, cur + 1, n, lang); else g_print ("Switching to %s track %d of %d.\n", name, cur + 1, n); } g_object_set (play->playbin, prop_cur, cur, NULL); g_free (lcode); g_free (lname); } }