diff options
author | Jan Schmidt <thaytan@noraisin.net> | 2012-10-01 23:43:47 +1000 |
---|---|---|
committer | Jan Schmidt <thaytan@noraisin.net> | 2012-10-01 23:43:47 +1000 |
commit | 6122e07795e5466e65e5096a4a1ebc2cbd061f71 (patch) | |
tree | 0ad14d6bb15eefb0883142b4b8a9c84107b9e55f | |
parent | 3054545dade03d6ebe155b596ad5a1b09bd11b97 (diff) | |
download | gstreamer-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.c | 11 |
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; |