mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
ext/faac/gstfaac.c: Refcount fixes (#318659)
Original commit message from CVS: Reviewed by: Tim-Philipp Müller <tim at centricular dot net> * ext/faac/gstfaac.c: (gst_faac_sink_setcaps), (gst_faac_src_setcaps), (gst_faac_chain): Refcount fixes (#318659)
This commit is contained in:
parent
ac0f8e697d
commit
085fdc272d
3 changed files with 41 additions and 19 deletions
|
@ -1,3 +1,11 @@
|
|||
2005-10-12 Josef Zlomek <josef dot zlomek at xeris dot cz>
|
||||
|
||||
Reviewed by: Tim-Philipp Müller <tim at centricular dot net>
|
||||
|
||||
* ext/faac/gstfaac.c: (gst_faac_sink_setcaps),
|
||||
(gst_faac_src_setcaps), (gst_faac_chain):
|
||||
Refcount fixes (#318659)
|
||||
|
||||
2005-10-12 Julien MOUTTE <julien@moutte.net>
|
||||
|
||||
* ext/Makefile.am: libvisual and snapshot are not here anymore. Makes
|
||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
|||
Subproject commit 37ed26e33bae9a6ab256c62ebbb9d711374a0abb
|
||||
Subproject commit 2485a65b662de25fb7b71857e34411426c6f530c
|
|
@ -253,9 +253,10 @@ gst_faac_sink_setcaps (GstPad * pad, GstCaps * caps)
|
|||
faacEncHandle *handle;
|
||||
gint channels, samplerate, depth;
|
||||
gulong samples, bytes, fmt = 0, bps = 0;
|
||||
gboolean result = FALSE;
|
||||
|
||||
if (!gst_caps_is_fixed (caps))
|
||||
return FALSE; /* GST_PAD_LINK_DELAYED; */
|
||||
goto done; /* GST_PAD_LINK_DELAYED; */
|
||||
|
||||
if (faac->handle) {
|
||||
faacEncClose (faac->handle);
|
||||
|
@ -272,7 +273,7 @@ gst_faac_sink_setcaps (GstPad * pad, GstCaps * caps)
|
|||
|
||||
/* open a new handle to the encoder */
|
||||
if (!(handle = faacEncOpen (samplerate, channels, &samples, &bytes)))
|
||||
return FALSE;
|
||||
goto done;
|
||||
|
||||
switch (depth) {
|
||||
case 16:
|
||||
|
@ -291,7 +292,7 @@ gst_faac_sink_setcaps (GstPad * pad, GstCaps * caps)
|
|||
|
||||
if (!fmt) {
|
||||
faacEncClose (handle);
|
||||
return FALSE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
faac->format = fmt;
|
||||
|
@ -303,12 +304,18 @@ gst_faac_sink_setcaps (GstPad * pad, GstCaps * caps)
|
|||
faac->samplerate = samplerate;
|
||||
|
||||
/* if the other side was already set-up, redo that */
|
||||
if (GST_PAD_CAPS (faac->srcpad))
|
||||
return gst_faac_src_setcaps (faac->srcpad,
|
||||
if (GST_PAD_CAPS (faac->srcpad)) {
|
||||
result = gst_faac_src_setcaps (faac->srcpad,
|
||||
gst_pad_get_allowed_caps (faac->srcpad));
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* else, that'll be done later */
|
||||
return TRUE;
|
||||
result = TRUE;
|
||||
|
||||
done:
|
||||
gst_object_unref (faac);
|
||||
return result;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -316,9 +323,10 @@ gst_faac_src_setcaps (GstPad * pad, GstCaps * caps)
|
|||
{
|
||||
GstFaac *faac = GST_FAAC (gst_pad_get_parent (pad));
|
||||
gint n;
|
||||
gboolean result = FALSE;
|
||||
|
||||
if (!faac->handle || (faac->samplerate == -1 || faac->channels == -1)) {
|
||||
return FALSE;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* we do samplerate/channels ourselves */
|
||||
|
@ -363,12 +371,12 @@ gst_faac_src_setcaps (GstPad * pad, GstCaps * caps)
|
|||
/* negotiate with these caps */
|
||||
GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, newcaps);
|
||||
if (gst_pad_set_caps (faac->srcpad, newcaps) == TRUE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
result = TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
done:
|
||||
gst_object_unref (faac);
|
||||
return result;
|
||||
}
|
||||
|
||||
static GstFlowReturn
|
||||
|
@ -392,7 +400,8 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
GST_ELEMENT_ERROR (faac, LIBRARY, ENCODE, (NULL), (NULL));
|
||||
gst_event_unref (event);
|
||||
gst_buffer_unref (outbuf);
|
||||
return GST_FLOW_ERROR;
|
||||
result = GST_FLOW_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ret_size > 0) {
|
||||
|
@ -407,10 +416,10 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
|
||||
gst_pad_push_event (faac->srcpad, gst_event_new_eos ());
|
||||
gst_pad_push (faac->srcpad, data);
|
||||
return result;
|
||||
goto done;
|
||||
default:
|
||||
gst_pad_event_default (pad, event);
|
||||
return result;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -420,7 +429,8 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
GST_ELEMENT_ERROR (faac, CORE, NEGOTIATION, (NULL),
|
||||
("format wasn't negotiated before chain function"));
|
||||
gst_buffer_unref (inbuf);
|
||||
return GST_FLOW_ERROR;
|
||||
result = GST_FLOW_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!GST_PAD_CAPS (faac->srcpad)) {
|
||||
|
@ -429,7 +439,8 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
GST_ELEMENT_ERROR (faac, CORE, NEGOTIATION, (NULL),
|
||||
("failed to negotiate MPEG/AAC format with next element"));
|
||||
gst_buffer_unref (inbuf);
|
||||
return GST_FLOW_ERROR;
|
||||
result = GST_FLOW_ERROR;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -466,7 +477,7 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
gst_buffer_unref (inbuf);
|
||||
}
|
||||
|
||||
return result;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* create the frame */
|
||||
|
@ -499,7 +510,8 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
GST_ELEMENT_ERROR (faac, LIBRARY, ENCODE, (NULL), (NULL));
|
||||
gst_buffer_unref (inbuf);
|
||||
gst_buffer_unref (subbuf);
|
||||
return GST_FLOW_ERROR;
|
||||
result = GST_FLOW_ERROR;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (ret_size > 0) {
|
||||
|
@ -534,6 +546,8 @@ gst_faac_chain (GstPad * pad, GstBuffer * data)
|
|||
gst_buffer_unref (subbuf);
|
||||
}
|
||||
|
||||
done:
|
||||
gst_object_unref (faac);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue