diff --git a/gst/wavenc/gstwavenc.c b/gst/wavenc/gstwavenc.c index dc580bef19..e2745c68f5 100644 --- a/gst/wavenc/gstwavenc.c +++ b/gst/wavenc/gstwavenc.c @@ -637,6 +637,9 @@ gst_wavenc_event (GstPad * pad, GstEvent * event) /* write header with correct length values */ gst_wavenc_push_header (wavenc, wavenc->length); + /* we're done with this file */ + wavenc->finished_properly = TRUE; + /* and forward the EOS event */ res = gst_pad_event_default (pad, event); break; @@ -668,6 +671,9 @@ gst_wavenc_chain (GstPad * pad, GstBuffer * buf) * header when we get EOS and know the exact length */ flow = gst_wavenc_push_header (wavenc, 0x7FFF0000); + /* starting a file, means we have to finish it properly */ + wavenc->finished_properly = FALSE; + if (flow != GST_FLOW_OK) return flow; @@ -705,6 +711,8 @@ gst_wavenc_change_state (GstElement * element, GstStateChange transition) wavenc->rate = 0; wavenc->length = 0; wavenc->sent_header = FALSE; + /* its true because we haven't writen anything */ + wavenc->finished_properly = TRUE; break; default: break; @@ -714,6 +722,19 @@ gst_wavenc_change_state (GstElement * element, GstStateChange transition) if (ret != GST_STATE_CHANGE_SUCCESS) return ret; + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + if (!wavenc->finished_properly) { + GST_ELEMENT_WARNING (wavenc, STREAM, MUX, + ("Wav stream not finished properly"), + ("Wav stream not finished properly, no EOS received " + "before shutdown")); + } + break; + default: + break; + } + return ret; } diff --git a/gst/wavenc/gstwavenc.h b/gst/wavenc/gstwavenc.h index 52a1237193..f4f9aac1eb 100644 --- a/gst/wavenc/gstwavenc.h +++ b/gst/wavenc/gstwavenc.h @@ -54,6 +54,7 @@ struct _GstWavEnc { guint32 length; gboolean sent_header; + gboolean finished_properly; }; struct _GstWavEncClass {