diff options
| author | Andy Wingo <wingo@pobox.com> | 2005-07-19 15:29:08 +0000 | 
|---|---|---|
| committer | Andy Wingo <wingo@pobox.com> | 2005-07-19 15:29:08 +0000 | 
| commit | ee992ce60d7defb22caf0ffed4ef6f014cf008b8 (patch) | |
| tree | 5eff0cf7ec1298d4b3deb1515fb9628e37a64949 | |
| parent | c2eac81daaf330dc35ae8176a240f80ef2627481 (diff) | |
ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber alloc_buffer's return value.
Original commit message from CVS:
2005-07-19  Andy Wingo  <wingo@pobox.com>
* ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber
alloc_buffer's return value.
(gst_dvdec_decode_frame): Handle unlinked pads with grace and
agility.
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | ext/dv/gstdvdec.c | 30 | 
2 files changed, 24 insertions, 11 deletions
@@ -1,5 +1,10 @@  2005-07-19  Andy Wingo  <wingo@pobox.com> +	* ext/dv/gstdvdec.c (gst_dvdec_decode_video): Don't clobber +	alloc_buffer's return value. +	(gst_dvdec_decode_frame): Handle unlinked pads with grace and +	agility. +  	* ext/dv/gstdvdec.h: Fix signedness error.  2005-07-19  Wim Taymans  <wim@fluendo.com> diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c index e5bb4e36..5da1787c 100644 --- a/ext/dv/gstdvdec.c +++ b/ext/dv/gstdvdec.c @@ -767,11 +767,11 @@ error:  static gboolean  gst_dvdec_send_event (GstDVDec * dvdec, GstEvent * event)  { -  gboolean res = TRUE; +  gboolean res = FALSE;    gst_event_ref (event); -  res &= gst_pad_push_event (dvdec->videosrcpad, event); -  res &= gst_pad_push_event (dvdec->audiosrcpad, event); +  res |= gst_pad_push_event (dvdec->videosrcpad, event); +  res |= gst_pad_push_event (dvdec->audiosrcpad, event);    return res;  } @@ -1151,8 +1151,10 @@ gst_dvdec_decode_video (GstDVDec * dvdec, const guint8 * data)      goto skip;    dvdec->framecount = 0; -  if ((gst_pad_alloc_buffer (dvdec->videosrcpad, 0, (720 * height) * dvdec->bpp, -              GST_PAD_CAPS (dvdec->videosrcpad), &outbuf)) != GST_FLOW_OK) +  ret = +      gst_pad_alloc_buffer (dvdec->videosrcpad, 0, (720 * height) * dvdec->bpp, +      GST_PAD_CAPS (dvdec->videosrcpad), &outbuf); +  if (ret != GST_FLOW_OK)      goto no_buffer;    outframe = GST_BUFFER_DATA (outbuf); @@ -1190,7 +1192,7 @@ skip:    /* ERRORS */  no_buffer:    { -    return GST_FLOW_WRONG_STATE; +    return ret;    }  } @@ -1199,7 +1201,7 @@ gst_dvdec_decode_frame (GstDVDec * dvdec, const guint8 * data)  {    GstClockTime next_ts;    gdouble framerate; -  GstFlowReturn ret; +  GstFlowReturn aret, vret, ret;    if (dvdec->need_discont) {      GstEvent *event; @@ -1239,14 +1241,20 @@ gst_dvdec_decode_frame (GstDVDec * dvdec, const guint8 * data)    if (dv_is_new_recording (dvdec->decoder, data))      dvdec->new_media = TRUE; -  ret = gst_dvdec_decode_audio (dvdec, data); -  if (ret != GST_FLOW_OK) +  aret = ret = gst_dvdec_decode_audio (dvdec, data); +  if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED)      goto done; -  ret = gst_dvdec_decode_video (dvdec, data); -  if (ret != GST_FLOW_OK) +  vret = ret = gst_dvdec_decode_video (dvdec, data); +  if (ret != GST_FLOW_OK && ret != GST_FLOW_NOT_LINKED) +    goto done; + +  if (aret == GST_FLOW_NOT_LINKED && vret == GST_FLOW_NOT_LINKED) { +    ret = GST_FLOW_NOT_LINKED;      goto done; +  } +  ret = GST_FLOW_OK;    dvdec->timestamp = next_ts;  done:  | 
