summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2012-10-01 23:43:47 +1000
committerJan Schmidt <thaytan@noraisin.net>2012-10-01 23:43:47 +1000
commit6122e07795e5466e65e5096a4a1ebc2cbd061f71 (patch)
tree0ad14d6bb15eefb0883142b4b8a9c84107b9e55f
parent3054545dade03d6ebe155b596ad5a1b09bd11b97 (diff)
downloadgstreamer-plugins-bad-6122e07795e5466e65e5096a4a1ebc2cbd061f71.tar.gz
resindvd: Update overridden caps when the DAR changes
Send a new caps event downstream when we receive new orders from the VM, if there are existing caps.
-rw-r--r--ext/resindvd/rsnparsetter.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/ext/resindvd/rsnparsetter.c b/ext/resindvd/rsnparsetter.c
index 796ff31ac..8a5d9e061 100644
--- a/ext/resindvd/rsnparsetter.c
+++ b/ext/resindvd/rsnparsetter.c
@@ -117,6 +117,8 @@ rsn_parsetter_sink_event (GstPad * pad, RsnParSetter * parset, GstEvent * event)
if (structure != NULL &&
gst_structure_has_name (structure, "application/x-gst-dvd")) {
const char *type = gst_structure_get_string (structure, "event");
+ GstEvent *caps_event = NULL;
+
if (type == NULL)
goto out;
@@ -130,10 +132,12 @@ rsn_parsetter_sink_event (GstPad * pad, RsnParSetter * parset, GstEvent * event)
parset->is_widescreen ? "16:9" : "4:3");
g_mutex_lock (parset->caps_lock);
- if (parset->is_widescreen != is_widescreen) {
+ if (parset->in_caps_last && parset->is_widescreen != is_widescreen) {
/* Force caps check */
- gst_caps_replace (&parset->in_caps_last, NULL);
gst_caps_replace (&parset->in_caps_converted, NULL);
+ rsn_parsetter_update_caps (parset, parset->in_caps_last);
+ if (parset->override_outcaps)
+ caps_event = gst_event_new_caps (parset->outcaps);
}
parset->is_widescreen = is_widescreen;
@@ -141,6 +145,9 @@ rsn_parsetter_sink_event (GstPad * pad, RsnParSetter * parset, GstEvent * event)
// parset->is_widescreen = FALSE;
g_mutex_unlock (parset->caps_lock);
+
+ if (caps_event)
+ gst_pad_push_event (parset->srcpad, caps_event);
}
}
break;