[FFmpeg-cvslog] swr: test partial flushing

Michael Niedermayer git at videolan.org
Sun Mar 25 06:54:11 CEST 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sun Mar 25 05:37:26 2012 +0200| [19342bc725025a572c3e0bf1a3f27ba310d50d5c] | committer: Michael Niedermayer

swr: test partial flushing

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=19342bc725025a572c3e0bf1a3f27ba310d50d5c
---

 libswresample/swresample_test.c |   27 +++++++++++++++++++++++++--
 1 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/libswresample/swresample_test.c b/libswresample/swresample_test.c
index d41b964..9dd9f44 100644
--- a/libswresample/swresample_test.c
+++ b/libswresample/swresample_test.c
@@ -67,6 +67,18 @@ static void  set(uint8_t *a[], int ch, int index, int ch_count, enum AVSampleFor
     }
 }
 
+static void shift(uint8_t *a[], int index, int ch_count, enum AVSampleFormat f){
+    int i, ch;
+
+    if(av_sample_fmt_is_planar(f)){
+        f= av_get_alt_sample_fmt(f, 0);
+        for(ch= 0; ch<ch_count; ch++)
+            a[ch] += index*av_get_bytes_per_sample(f);
+    }else{
+        a[0] += index*ch_count*av_get_bytes_per_sample(f);
+    }
+}
+
 uint64_t layouts[]={
 AV_CH_LAYOUT_MONO                    ,
 AV_CH_LAYOUT_STEREO                  ,
@@ -109,6 +121,7 @@ int main(int argc, char **argv){
     uint8_t *ain[SWR_CH_MAX];
     uint8_t *aout[SWR_CH_MAX];
     uint8_t *amid[SWR_CH_MAX];
+    int flush_i=0;
 
     struct SwrContext * forw_ctx= NULL;
     struct SwrContext *backw_ctx= NULL;
@@ -116,6 +129,11 @@ int main(int argc, char **argv){
     in_sample_rate=16000;
     for(osr=0; osr<5; osr++){
         out_sample_rate= sample_rates[osr];
+    }
+
+    in_sample_rate=16000;
+    for(osr=0; osr<5; osr++){
+        out_sample_rate= sample_rates[osr];
         for(in_sample_fmt= AV_SAMPLE_FMT_U8; in_sample_fmt<=AV_SAMPLE_FMT_DBL; in_sample_fmt++){
             for(out_sample_fmt= AV_SAMPLE_FMT_U8; out_sample_fmt<=AV_SAMPLE_FMT_DBL; out_sample_fmt++){
                 for(in_ch_layout_index=0; layouts[in_ch_layout_index]; in_ch_layout_index++){
@@ -178,7 +196,12 @@ int main(int argc, char **argv){
                             fprintf(stderr, "[%f %f %f] len:%5d\n", sqrt(sse/out_count), x, maxdiff, out_count);
                         }
 
-                        flush_count=swr_convert(backw_ctx,aout, SAMPLES, 0, 0);
+                        flush_i++;
+                        flush_i%=21;
+                        flush_count = swr_convert(backw_ctx,aout, flush_i, 0, 0);
+                        shift(aout,  flush_i, in_ch_count, in_sample_fmt);
+                        flush_count+= swr_convert(backw_ctx,aout, SAMPLES-flush_i, 0, 0);
+                        shift(aout, -flush_i, in_ch_count, in_sample_fmt);
                         if(flush_count){
                             for(ch=0; ch<in_ch_count; ch++){
                                 double sse, x, maxdiff=0;
@@ -200,7 +223,7 @@ int main(int argc, char **argv){
                                 x = sum_ab/sum_bb;
                                 sse= sum_aa + sum_bb*x*x - 2*x*sum_ab;
 
-                                fprintf(stderr, "[%f %f %f] len:%5d\n", sqrt(sse/flush_count), x, maxdiff, flush_count);
+                                fprintf(stderr, "[%f %f %f] len:%5d F:%3d\n", sqrt(sse/flush_count), x, maxdiff, flush_count, flush_i);
                             }
                         }
 



More information about the ffmpeg-cvslog mailing list