avcodec/jpeg2000dec: Fix h/vden typo
[ffmpeg.git] / libavcodec / avfft.c
index 25fc4e0..2200f37 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
+#include "libavutil/attributes.h"
 #include "libavutil/mem.h"
 #include "avfft.h"
 #include "fft.h"
+#include "rdft.h"
+#include "dct.h"
 
 /* FFT */
 
 FFTContext *av_fft_init(int nbits, int inverse)
 {
-    FFTContext *s = av_malloc(sizeof(*s));
+    FFTContext *s = av_mallocz(sizeof(*s));
 
-    if (s)
-        ff_fft_init(s, nbits, inverse);
+    if (s && ff_fft_init(s, nbits, inverse))
+        av_freep(&s);
 
     return s;
 }
@@ -42,7 +45,7 @@ void av_fft_calc(FFTContext *s, FFTComplex *z)
     s->fft_calc(s, z);
 }
 
-void av_fft_end(FFTContext *s)
+av_cold void av_fft_end(FFTContext *s)
 {
     if (s) {
         ff_fft_end(s);
@@ -56,8 +59,8 @@ FFTContext *av_mdct_init(int nbits, int inverse, double scale)
 {
     FFTContext *s = av_malloc(sizeof(*s));
 
-    if (s)
-        ff_mdct_init(s, nbits, inverse, scale);
+    if (s && ff_mdct_init(s, nbits, inverse, scale))
+        av_freep(&s);
 
     return s;
 }
@@ -77,7 +80,7 @@ void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input)
     s->mdct_calc(s, output, input);
 }
 
-void av_mdct_end(FFTContext *s)
+av_cold void av_mdct_end(FFTContext *s)
 {
     if (s) {
         ff_mdct_end(s);
@@ -93,18 +96,18 @@ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans)
 {
     RDFTContext *s = av_malloc(sizeof(*s));
 
-    if (s)
-        ff_rdft_init(s, nbits, trans);
+    if (s && ff_rdft_init(s, nbits, trans))
+        av_freep(&s);
 
     return s;
 }
 
 void av_rdft_calc(RDFTContext *s, FFTSample *data)
 {
-    ff_rdft_calc(s, data);
+    s->rdft_calc(s, data);
 }
 
-void av_rdft_end(RDFTContext *s)
+av_cold void av_rdft_end(RDFTContext *s)
 {
     if (s) {
         ff_rdft_end(s);
@@ -120,18 +123,18 @@ DCTContext *av_dct_init(int nbits, enum DCTTransformType inverse)
 {
     DCTContext *s = av_malloc(sizeof(*s));
 
-    if (s)
-        ff_dct_init(s, nbits, inverse);
+    if (s && ff_dct_init(s, nbits, inverse))
+        av_freep(&s);
 
     return s;
 }
 
 void av_dct_calc(DCTContext *s, FFTSample *data)
 {
-    ff_dct_calc(s, data);
+    s->dct_calc(s, data);
 }
 
-void av_dct_end(DCTContext *s)
+av_cold void av_dct_end(DCTContext *s)
 {
     if (s) {
         ff_dct_end(s);