[FFmpeg-cvslog] swr: support -async X as a simple way to do what ffmpeg -async X did

Michael Niedermayer git at videolan.org
Tue Dec 25 17:32:31 CET 2012


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Dec 22 23:53:45 2012 +0100| [f9e55c0fed8ca7c8d3df4a3dfb1b3664209bd1dd] | committer: Michael Niedermayer

swr: support -async X as a simple way to do what ffmpeg -async X did

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

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

 libswresample/swresample.c          |   10 ++++++++++
 libswresample/swresample_internal.h |    1 +
 2 files changed, 11 insertions(+)

diff --git a/libswresample/swresample.c b/libswresample/swresample.c
index af983a1..5caab40 100644
--- a/libswresample/swresample.c
+++ b/libswresample/swresample.c
@@ -97,6 +97,8 @@ static const AVOption options[]={
                                                         , OFFSET(soft_compensation_duration),AV_OPT_TYPE_FLOAT ,{.dbl=1                     }, 0      , INT_MAX   , PARAM },
 {"max_soft_comp"        , "set maximum factor by which data is stretched/squeezed to make it match the timestamps."
                                                         , OFFSET(max_soft_compensation),AV_OPT_TYPE_FLOAT ,{.dbl=0                     }, INT_MIN, INT_MAX   , PARAM },
+{"async"                , "simplified 1 parameter audio timestamp matching, 0(disabled), 1(filling and trimming), >1(maximum stretch/squeeze in samples per second)"
+                                                        , OFFSET(async)          , AV_OPT_TYPE_FLOAT ,{.dbl=0                     }, INT_MIN, INT_MAX   , PARAM },
 
 { "matrix_encoding"     , "set matrixed stereo encoding" , OFFSET(matrix_encoding), AV_OPT_TYPE_INT   ,{.i64 = AV_MATRIX_ENCODING_NONE}, AV_MATRIX_ENCODING_NONE,     AV_MATRIX_ENCODING_NB-1, PARAM, "matrix_encoding" },
     { "none",  "select none",               0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_NONE  }, INT_MIN, INT_MAX, PARAM, "matrix_encoding" },
@@ -278,6 +280,14 @@ av_cold int swr_init(struct SwrContext *s){
     set_audiodata_fmt(&s-> in, s-> in_sample_fmt);
     set_audiodata_fmt(&s->out, s->out_sample_fmt);
 
+    if (s->async) {
+        if (s->min_compensation >= FLT_MAX/2)
+            s->min_compensation = 0.001;
+        if (s->async > 1.0001) {
+            s->max_soft_compensation = s->async / (double) s->in_sample_rate;
+        }
+    }
+
     if (s->out_sample_rate!=s->in_sample_rate || (s->flags & SWR_FLAG_RESAMPLE)){
         s->resample = s->resampler->init(s->resample, s->out_sample_rate, s->in_sample_rate, s->filter_size, s->phase_shift, s->linear_interp, s->cutoff, s->int_sample_fmt, s->filter_type, s->kaiser_beta, s->precision, s->cheby);
     }else
diff --git a/libswresample/swresample_internal.h b/libswresample/swresample_internal.h
index 19ca0d0..d471517 100644
--- a/libswresample/swresample_internal.h
+++ b/libswresample/swresample_internal.h
@@ -84,6 +84,7 @@ struct SwrContext {
     float min_hard_compensation;                    ///< minimum below which no silence inject / sample drop will happen
     float soft_compensation_duration;               ///< duration over which soft compensation is applied
     float max_soft_compensation;                    ///< maximum soft compensation in seconds over soft_compensation_duration
+    float async;                                    ///< simple 1 parameter async, similar to ffmpegs -async
 
     int resample_first;                             ///< 1 if resampling must come first, 0 if rematrixing
     int rematrix;                                   ///< flag to indicate if rematrixing is needed (basically if input and output layouts mismatch)



More information about the ffmpeg-cvslog mailing list