]> git.sesse.net Git - mlt/blobdiff - src/modules/sox/filter_sox.c
add sox 13.0.0 support
[mlt] / src / modules / sox / filter_sox.c
index 355a8abad0eb407c5b18cad15c073618a546fd1c..7c0928bd65a7cd1556c6f026f5745315c4832cf4 100644 (file)
@@ -3,19 +3,19 @@
  * Copyright (C) 2003-2004 Ushodaya Enterprises Limited
  * Author: Dan Dennedy <dan@dennedy.org>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
+ * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  */
 
 #include "filter_sox.h"
@@ -125,9 +125,6 @@ static int filter_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_format
        int i; // channel
        int count = mlt_properties_get_int( filter_properties, "effect_count" );
 
-       // Restore the original get_audio
-       frame->get_audio = mlt_frame_pop_audio( frame );
-
        // Get the producer's audio
        mlt_frame_get_audio( frame, buffer, format, frequency, &channels_avail, samples );
 
@@ -228,12 +225,18 @@ static int filter_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_format
                        int j;
                        char *normalise = mlt_properties_get( filter_properties, "normalise" );
                        double normalised_gain = 1.0;
+#if (ST_LIB_VERSION_CODE >= ST_LIB_VERSION(13,0,0))
+                       st_sample_t dummy_clipped_count = 0;
+#endif
                        
                        // Convert to sox encoding
                        while( p != end )
                        {
+#if (ST_LIB_VERSION_CODE >= ST_LIB_VERSION(13,0,0))
+                               *p = ST_SIGNED_WORD_TO_SAMPLE( *q, dummy_clipped_count );
+#else
                                *p = ST_SIGNED_WORD_TO_SAMPLE( *q );
-                               
+#endif
                                // Compute rms amplitude while we are accessing each sample
                                rms += ( double )*p * ( double )*p;
                                
@@ -323,7 +326,11 @@ static int filter_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_format
                        end = p + *samples;
                        while ( p != end )
                        {
+#if (ST_LIB_VERSION_CODE >= ST_LIB_VERSION(13,0,0))
+                               *q = ST_SAMPLE_TO_SIGNED_WORD( *p ++, dummy_clipped_count );
+#else
                                *q = ST_SAMPLE_TO_SIGNED_WORD( *p ++ );
+#endif
                                q += *channels;
                        }
                }
@@ -337,12 +344,11 @@ static int filter_get_audio( mlt_frame frame, int16_t **buffer, mlt_audio_format
 
 static mlt_frame filter_process( mlt_filter this, mlt_frame frame )
 {
-       if ( frame->get_audio != NULL )
+       if ( mlt_frame_is_test_audio( frame ) == 0 )
        {
                // Add the filter to the frame
-               mlt_frame_push_audio( frame, frame->get_audio );
                mlt_frame_push_audio( frame, this );
-               frame->get_audio = filter_get_audio;
+               mlt_frame_push_audio( frame, filter_get_audio );
                
                // Parse the window property and allocate smoothing buffer if needed
                mlt_properties properties = MLT_FILTER_PROPERTIES( this );