diff --git a/libavcodec/celp_filters.c b/libavcodec/celp_filters.c
index 2a6b0670b491f05a0c1ed96d3276d1cee2d12427..b2094a164a66d885bdf1098e0a3bb71a3597887c 100644
--- a/libavcodec/celp_filters.c
+++ b/libavcodec/celp_filters.c
@@ -103,3 +103,23 @@ void ff_celp_lp_synthesis_filterf(
             out[n] -= filter_coeffs[i-1] * out[n-i];
     }
 }
+
+void ff_celp_lp_zero_synthesis_filterf(
+        float *out,
+        const float* filter_coeffs,
+        const float* in,
+        int buffer_length,
+        int filter_length)
+{
+    int i,n;
+
+    // Avoids a +1 in the inner loop.
+    filter_length++;
+
+    for(n=0; n<buffer_length; n++)
+    {
+        out[n] = in[n];
+        for(i=1; i<filter_length; i++)
+            out[n] -= filter_coeffs[i-1] * in[n-i];
+    }
+}
diff --git a/libavcodec/celp_filters.h b/libavcodec/celp_filters.h
index d33aafd229c7d213e8c13e00ed42dbf673a8665b..4a9eb1c49b120cbf69366dbbcdf4e2b40bb38ba3 100644
--- a/libavcodec/celp_filters.h
+++ b/libavcodec/celp_filters.h
@@ -91,4 +91,26 @@ void ff_celp_lp_synthesis_filterf(
         int buffer_length,
         int filter_length);
 
+/**
+ * LP zero synthesis filter.
+ * @param out [out] pointer to output buffer
+ * @param filter_coeffs filter coefficients.
+ * @param in input signal
+ *        - the array in[-filter_length, -1] must
+ *        contain the previous input of this filter
+ * @param buffer_length amount of data to process
+ * @param filter_length filter length (10 for 10th order LP filter)
+ *
+ * @note Output buffer must contain filter_length samples of past
+ *       speech data before pointer.
+ *
+ * Routine applies A(z) filter to given speech data.
+ */
+void ff_celp_lp_zero_synthesis_filterf(
+        float *out,
+        const float* filter_coeffs,
+        const float* in,
+        int buffer_length,
+        int filter_length);
+
 #endif /* AVCODEC_CELP_FILTERS_H */