faac: recreate encoder after flushing
authorMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 22 Dec 2011 16:15:28 +0000 (17:15 +0100)
committerMark Nauwelaerts <mark.nauwelaerts@collabora.co.uk>
Thu, 22 Dec 2011 16:16:59 +0000 (17:16 +0100)
... since it appears the existing one can't be bothered anymore to produce
some output.

ext/faac/gstfaac.c

index 95f4909..68c1e01 100644 (file)
@@ -691,6 +691,13 @@ gst_faac_handle_frame (GstAudioEncoder * enc, GstBuffer * in_buf)
     ret = gst_audio_encoder_finish_frame (enc, out_buf, faac->samples);
   } else {
     gst_buffer_unref (out_buf);
+    /* re-create encoder after final flush */
+    if (!in_buf) {
+      GST_DEBUG_OBJECT (faac, "flushed; recreating encoder");
+      gst_faac_close_encoder (faac);
+      if (!gst_faac_open_encoder (faac))
+        ret = GST_FLOW_ERROR;
+    }
   }
 
   return ret;