summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Schmidt <thaytan@noraisin.net>2009-03-10 10:39:22 +0000
committerJan Schmidt <thaytan@noraisin.net>2009-04-02 14:48:12 +0100
commit4a320ec12ace268b442a4cf6e83502c5ad91f24f (patch)
treef88482208ffd1858754ad14aae7d7958345827b3
parent12625af8d81a6ef85346d496caadca1d6cb116ba (diff)
resindvd: More hacking on the audio decoder.
-rw-r--r--ext/resindvd/rsnaudiodec.c76
1 files changed, 41 insertions, 35 deletions
diff --git a/ext/resindvd/rsnaudiodec.c b/ext/resindvd/rsnaudiodec.c
index 3ba4442e2..d571410e1 100644
--- a/ext/resindvd/rsnaudiodec.c
+++ b/ext/resindvd/rsnaudiodec.c
@@ -205,8 +205,12 @@ error:
static gboolean
rsn_audiodec_sink_event (GstPad * pad, GstEvent * event)
{
- RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (pad);
+ GstPad *sinkpad = GST_PAD (gst_pad_get_parent (pad));
+ RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (sinkpad);
gboolean res;
+
+ gst_object_unref (sinkpad);
+
if (self == NULL)
goto error;
@@ -225,16 +229,15 @@ error:
static GstCaps *
rsn_audiodec_get_proxy_sink_caps (GstPad * pad)
{
- RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (pad);
+ GstPad *sinkpad = GST_PAD (gst_pad_get_parent (pad));
GstCaps *ret;
- if (self != NULL && self->child_sink != NULL) {
- ret = gst_pad_get_caps (self->child_sink);
+ if (sinkpad != NULL) {
+ ret = gst_pad_get_caps (sinkpad);
} else
ret = gst_caps_new_any ();
- if (self)
- gst_object_unref (self);
+ gst_object_unref (sinkpad);
return ret;
}
@@ -242,16 +245,15 @@ rsn_audiodec_get_proxy_sink_caps (GstPad * pad)
static GstCaps *
rsn_audiodec_get_proxy_src_caps (GstPad * pad)
{
- RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (pad);
+ GstPad *srcpad = GST_PAD (gst_pad_get_parent (pad));
GstCaps *ret;
- if (self != NULL && self->child_src != NULL) {
- ret = gst_pad_get_caps (self->child_src);
+ if (srcpad != NULL) {
+ ret = gst_pad_get_caps (srcpad);
} else
ret = gst_caps_new_any ();
- if (self)
- gst_object_unref (self);
+ gst_object_unref (srcpad);
return ret;
}
@@ -259,19 +261,21 @@ rsn_audiodec_get_proxy_src_caps (GstPad * pad)
static GstFlowReturn
rsn_audiodec_proxy_src_chain (GstPad * pad, GstBuffer * buf)
{
- RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (pad);
+ GstPad *srcpad = GST_PAD (gst_pad_get_parent (pad));
+ RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (srcpad);
GstFlowReturn ret;
+ gst_object_unref (srcpad);
+
g_print ("srcpad %p\n", self->srcpad);
- if (self != NULL && self->srcpad != NULL) {
- GST_DEBUG_OBJECT (self, "Data from decoder, pushing to pad %"
- GST_PTR_FORMAT, self->srcpad);
- ret = gst_pad_push (self->srcpad, buf);
- } else
- ret = GST_FLOW_ERROR;
+ if (self == NULL)
+ return GST_FLOW_ERROR;
- if (self)
- gst_object_unref (self);
+ GST_DEBUG_OBJECT (self, "Data from decoder, pushing to pad %"
+ GST_PTR_FORMAT, self->srcpad);
+ ret = gst_pad_push (self->srcpad, buf);
+
+ gst_object_unref (self);
return ret;
}
@@ -279,17 +283,18 @@ rsn_audiodec_proxy_src_chain (GstPad * pad, GstBuffer * buf)
static gboolean
rsn_audiodec_proxy_src_event (GstPad * pad, GstEvent * event)
{
- RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (pad);
+ GstPad *srcpad = GST_PAD (gst_pad_get_parent (pad));
+ RsnAudioDec *self = (RsnAudioDec *) gst_pad_get_parent (srcpad);
gboolean ret;
- if (self != NULL && self->srcpad != NULL) {
- ret = gst_pad_push_event (self->srcpad, event);
- } else
- ret = GST_FLOW_ERROR;
+ gst_object_unref (srcpad);
- if (self)
- gst_object_unref (self);
+ if (self == NULL)
+ return FALSE;
+ ret = gst_pad_push_event (self->srcpad, event);
+
+ gst_object_unref (self);
return ret;
}
@@ -299,17 +304,17 @@ create_proxy_pads (RsnAudioDec * self)
if (self->child_sink_proxy == NULL) {
/* A src pad the child can query/send events to */
self->child_sink_proxy = gst_pad_new ("sink_proxy", GST_PAD_SRC);
+ gst_object_set_parent ((GstObject *) self->child_sink_proxy,
+ (GstObject *) self->sinkpad);
gst_pad_set_getcaps_function (self->child_sink_proxy,
GST_DEBUG_FUNCPTR (rsn_audiodec_get_proxy_sink_caps));
- gst_object_set_parent ((GstObject *) self->child_sink_proxy,
- (GstObject *) self);
}
if (self->child_src_proxy == NULL) {
/* A sink pad the child can push to */
self->child_src_proxy = gst_pad_new ("src_proxy", GST_PAD_SINK);
gst_object_set_parent ((GstObject *) self->child_src_proxy,
- (GstObject *) self);
+ (GstObject *) self->srcpad);
gst_pad_set_getcaps_function (self->child_src_proxy,
GST_DEBUG_FUNCPTR (rsn_audiodec_get_proxy_src_caps));
gst_pad_set_chain_function (self->child_src_proxy,
@@ -341,13 +346,16 @@ rsn_audiodec_set_child (RsnAudioDec * self, GstElement * new_child)
return TRUE;
self->child_sink = gst_element_get_static_pad (new_child, "sink");
- if (self->child_sink == NULL)
+ if (self->child_sink == NULL) {
return FALSE;
+ }
self->child_src = gst_element_get_static_pad (new_child, "src");
- if (self->child_src == NULL)
+ if (self->child_src == NULL) {
return FALSE;
- if (!gst_bin_add ((GstBin *) self, new_child))
+ }
+ if (!gst_bin_add ((GstBin *) self, new_child)) {
return FALSE;
+ }
GST_DEBUG_OBJECT (self, "Add child %" GST_PTR_FORMAT, new_child);
self->current_decoder = new_child;
@@ -362,8 +370,6 @@ rsn_audiodec_set_child (RsnAudioDec * self, GstElement * new_child)
GST_DEBUG_OBJECT (self, "linked child src pad %" GST_PTR_FORMAT
" to proxy pad %" GST_PTR_FORMAT, self->child_src, self->child_src_proxy);
- g_print ("Returning TRUE\n");
-
return TRUE;
}