[SCM] libav/master: resample: fix avresample_get_delay() return value

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun May 4 21:36:32 UTC 2014


The following commit has been merged in the master branch:
commit d21bf0d27b547adcaabaa28d475e6b9f97dfe20a
Author: Anton Khirnov <anton at khirnov.net>
Date:   Tue Mar 4 21:18:27 2014 +0100

    resample: fix avresample_get_delay() return value
    
    The correct "next" input sample is not the first sample of the
    resampling buffer, but the center sample of the filter_length-sized
    block at the beginning.
    
    CC:libav-stable at libav.org

diff --git a/libavresample/resample.c b/libavresample/resample.c
index dc121fe..047572b 100644
--- a/libavresample/resample.c
+++ b/libavresample/resample.c
@@ -46,6 +46,7 @@ struct ResampleContext {
     void (*resample_one)(struct ResampleContext *c, int no_filter, void *dst0,
                          int dst_index, const void *src0, int src_size,
                          int index, int frac);
+    int padding_size;
 };
 
 
@@ -211,6 +212,7 @@ ResampleContext *ff_audio_resample_init(AVAudioResampleContext *avr)
         goto error;
     c->ideal_dst_incr = c->dst_incr;
 
+    c->padding_size   = (c->filter_length - 1) / 2;
     c->index = -phase_count * ((c->filter_length - 1) / 2);
     c->frac  = 0;
 
@@ -461,8 +463,10 @@ int ff_audio_resample(ResampleContext *c, AudioData *dst, AudioData *src)
 
 int avresample_get_delay(AVAudioResampleContext *avr)
 {
+    ResampleContext *c = avr->resample;
+
     if (!avr->resample_needed || !avr->resample)
         return 0;
 
-    return avr->resample->buffer->nb_samples;
+    return FFMAX(c->buffer->nb_samples - c->padding_size, 0);
 }

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list