diff options
author | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-10-13 13:24:50 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@theqtcompany.com> | 2015-10-14 10:57:25 +0000 |
commit | af3d4809763ef308f08ced947a73b624729ac7ea (patch) | |
tree | 4402b911e30383f6c6dace1e8cf3b8e85355db3a /chromium/third_party/ffmpeg/libswresample | |
parent | 0e8ff63a407fe323e215bb1a2c423c09a4747c8a (diff) | |
download | qtwebengine-chromium-af3d4809763ef308f08ced947a73b624729ac7ea.tar.gz |
BASELINE: Update Chromium to 47.0.2526.14
Also adding in sources needed for spellchecking.
Change-Id: Idd44170fa1616f26315188970a8d5ba7d472b18a
Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'chromium/third_party/ffmpeg/libswresample')
10 files changed, 67 insertions, 25 deletions
diff --git a/chromium/third_party/ffmpeg/libswresample/dither.c b/chromium/third_party/ffmpeg/libswresample/dither.c index 248062aab8c..08c793d4cf8 100644 --- a/chromium/third_party/ffmpeg/libswresample/dither.c +++ b/chromium/third_party/ffmpeg/libswresample/dither.c @@ -109,7 +109,7 @@ av_cold int swri_dither_init(SwrContext *s, enum AVSampleFormat out_fmt, enum AV memset(s->dither.ns_errors, 0, sizeof(s->dither.ns_errors)); for (i=0; filters[i].coefs; i++) { const filter_t *f = &filters[i]; - if (fabs(s->out_sample_rate - f->rate) / f->rate <= .05 && f->name == s->dither.method) { + if (llabs(s->out_sample_rate - f->rate)*20 <= f->rate && f->name == s->dither.method) { int j; s->dither.ns_taps = f->len; for (j=0; j<f->len; j++) diff --git a/chromium/third_party/ffmpeg/libswresample/options.c b/chromium/third_party/ffmpeg/libswresample/options.c index de846728343..1bc1a705101 100644 --- a/chromium/third_party/ffmpeg/libswresample/options.c +++ b/chromium/third_party/ffmpeg/libswresample/options.c @@ -49,8 +49,8 @@ static const AVOption options[]={ {"in_sample_fmt" , "set input sample format" , OFFSET( in_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, {"osf" , "set output sample format" , OFFSET(out_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, {"out_sample_fmt" , "set output sample format" , OFFSET(out_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, -{"tsf" , "set internal sample format" , OFFSET(int_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, -{"internal_sample_fmt" , "set internal sample format" , OFFSET(int_sample_fmt ), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, +{"tsf" , "set internal sample format" , OFFSET(user_int_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, +{"internal_sample_fmt" , "set internal sample format" , OFFSET(user_int_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, {"icl" , "set input channel layout" , OFFSET(user_in_ch_layout ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, 0 , INT64_MAX , PARAM, "channel_layout"}, {"in_channel_layout" , "set input channel layout" , OFFSET(user_in_ch_layout ), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, 0 , INT64_MAX , PARAM, "channel_layout"}, {"ocl" , "set output channel layout" , OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, 0 , INT64_MAX , PARAM, "channel_layout"}, diff --git a/chromium/third_party/ffmpeg/libswresample/soxr_resample.c b/chromium/third_party/ffmpeg/libswresample/soxr_resample.c index 0f75bc554c1..535e9cee07d 100644 --- a/chromium/third_party/ffmpeg/libswresample/soxr_resample.c +++ b/chromium/third_party/ffmpeg/libswresample/soxr_resample.c @@ -67,7 +67,17 @@ static void destroy(struct ResampleContext * *c){ } static int flush(struct SwrContext *s){ + s->delayed_samples_fixup = soxr_delay((soxr_t)s->resample); + soxr_process((soxr_t)s->resample, NULL, 0, NULL, NULL, 0, NULL); + + { + float f; + size_t idone, odone; + soxr_process((soxr_t)s->resample, &f, 0, &idone, &f, 0, &odone); + s->delayed_samples_fixup -= soxr_delay((soxr_t)s->resample); + } + return 0; } @@ -87,18 +97,34 @@ static int process( } static int64_t get_delay(struct SwrContext *s, int64_t base){ - double delay_s = soxr_delay((soxr_t)s->resample) / s->out_sample_rate; + double delayed_samples = soxr_delay((soxr_t)s->resample); + double delay_s; + + if (s->flushed) + delayed_samples += s->delayed_samples_fixup; + + delay_s = delayed_samples / s->out_sample_rate; + return (int64_t)(delay_s * base + .5); } static int invert_initial_buffer(struct ResampleContext *c, AudioData *dst, const AudioData *src, - int in_count, int *out_idx, int *out_sz) -{ + int in_count, int *out_idx, int *out_sz){ return 0; } +static int64_t get_out_samples(struct SwrContext *s, int in_samples){ + double out_samples = (double)s->out_sample_rate / s->in_sample_rate * in_samples; + double delayed_samples = soxr_delay((soxr_t)s->resample); + + if (s->flushed) + delayed_samples += s->delayed_samples_fixup; + + return (int64_t)(out_samples + delayed_samples + 1 + .5); +} + struct Resampler const swri_soxr_resampler={ create, destroy, process, flush, NULL /* set_compensation */, get_delay, - invert_initial_buffer, + invert_initial_buffer, get_out_samples }; diff --git a/chromium/third_party/ffmpeg/libswresample/swresample-test.c b/chromium/third_party/ffmpeg/libswresample/swresample-test.c index 7e2854da7c3..47c54a109b1 100644 --- a/chromium/third_party/ffmpeg/libswresample/swresample-test.c +++ b/chromium/third_party/ffmpeg/libswresample/swresample-test.c @@ -108,7 +108,7 @@ static const int rates[] = { 48000, }; -uint64_t layouts[]={ +static const uint64_t layouts[]={ AV_CH_LAYOUT_MONO , AV_CH_LAYOUT_STEREO , AV_CH_LAYOUT_2_1 , diff --git a/chromium/third_party/ffmpeg/libswresample/swresample.c b/chromium/third_party/ffmpeg/libswresample/swresample.c index ab02bac89a5..8e238998e96 100644 --- a/chromium/third_party/ffmpeg/libswresample/swresample.c +++ b/chromium/third_party/ffmpeg/libswresample/swresample.c @@ -133,6 +133,7 @@ static void clear_context(SwrContext *s){ swri_audio_convert_free(&s->full_convert); swri_rematrix_free(s); + s->delayed_samples_fixup = 0; s->flushed = 0; } @@ -173,6 +174,8 @@ av_cold int swr_init(struct SwrContext *s){ s-> in_ch_layout = s-> user_in_ch_layout; s->out_ch_layout = s->user_out_ch_layout; + s->int_sample_fmt= s->user_int_sample_fmt; + if(av_get_channel_layout_nb_channels(s-> in_ch_layout) > SWR_CH_MAX) { av_log(s, AV_LOG_WARNING, "Input channel layout 0x%"PRIx64" is invalid or unsupported.\n", s-> in_ch_layout); s->in_ch_layout = 0; @@ -210,7 +213,13 @@ av_cold int swr_init(struct SwrContext *s){ s->rematrix_custom; if(s->int_sample_fmt == AV_SAMPLE_FMT_NONE){ - if(av_get_planar_sample_fmt(s->in_sample_fmt) <= AV_SAMPLE_FMT_S16P){ + if( av_get_planar_sample_fmt(s-> in_sample_fmt) <= AV_SAMPLE_FMT_S16P + && av_get_planar_sample_fmt(s->out_sample_fmt) <= AV_SAMPLE_FMT_S16P){ + s->int_sample_fmt= AV_SAMPLE_FMT_S16P; + }else if( av_get_planar_sample_fmt(s-> in_sample_fmt) <= AV_SAMPLE_FMT_S16P + && !s->rematrix + && s->out_sample_rate==s->in_sample_rate + && !(s->flags & SWR_FLAG_RESAMPLE)){ s->int_sample_fmt= AV_SAMPLE_FMT_S16P; }else if( av_get_planar_sample_fmt(s-> in_sample_fmt) == AV_SAMPLE_FMT_S32P && av_get_planar_sample_fmt(s->out_sample_fmt) == AV_SAMPLE_FMT_S32P @@ -220,10 +229,10 @@ av_cold int swr_init(struct SwrContext *s){ }else if(av_get_planar_sample_fmt(s->in_sample_fmt) <= AV_SAMPLE_FMT_FLTP){ s->int_sample_fmt= AV_SAMPLE_FMT_FLTP; }else{ - av_log(s, AV_LOG_DEBUG, "Using double precision mode\n"); s->int_sample_fmt= AV_SAMPLE_FMT_DBLP; } } + av_log(s, AV_LOG_DEBUG, "Using %s internally between filters\n", av_get_sample_fmt_name(s->int_sample_fmt)); if( s->int_sample_fmt != AV_SAMPLE_FMT_S16P &&s->int_sample_fmt != AV_SAMPLE_FMT_S32P @@ -641,7 +650,7 @@ static int swr_convert_internal(struct SwrContext *s, AudioData *out, int out_co return ret; if(ret) for(ch=0; ch<s->dither.noise.ch_count; ch++) - if((ret=swri_get_dither(s, s->dither.noise.ch[ch], s->dither.noise.count, 12345678913579<<ch, s->dither.noise.fmt))<0) + if((ret=swri_get_dither(s, s->dither.noise.ch[ch], s->dither.noise.count, (12345678913579ULL*ch + 3141592) % 2718281828U, s->dither.noise.fmt))<0) return ret; av_assert0(s->dither.noise.ch_count == preout->ch_count); diff --git a/chromium/third_party/ffmpeg/libswresample/swresample_internal.h b/chromium/third_party/ffmpeg/libswresample/swresample_internal.h index 7595588f410..ce5eef4d9f5 100644 --- a/chromium/third_party/ffmpeg/libswresample/swresample_internal.h +++ b/chromium/third_party/ffmpeg/libswresample/swresample_internal.h @@ -25,7 +25,7 @@ #include "libavutil/channel_layout.h" #include "config.h" -#define SWR_CH_MAX 32 +#define SWR_CH_MAX 64 #define SQRT3_2 1.22474487139158904909 /* sqrt(3/2) */ @@ -119,6 +119,7 @@ struct SwrContext { int user_used_ch_count; ///< User set used channel count int64_t user_in_ch_layout; ///< User set input channel layout int64_t user_out_ch_layout; ///< User set output channel layout + enum AVSampleFormat user_int_sample_fmt; ///< User set internal sample format struct DitherContext dither; @@ -157,6 +158,7 @@ struct SwrContext { int64_t outpts; ///< output PTS int64_t firstpts; ///< first PTS int drop_output; ///< number of output samples to drop + double delayed_samples_fixup; ///< soxr 0.1.1: needed to fixup delayed_samples after flush has been called. struct AudioConvert *in_convert; ///< input conversion context struct AudioConvert *out_convert; ///< output conversion context diff --git a/chromium/third_party/ffmpeg/libswresample/version.h b/chromium/third_party/ffmpeg/libswresample/version.h index 94ac9c52d04..12b32826dbe 100644 --- a/chromium/third_party/ffmpeg/libswresample/version.h +++ b/chromium/third_party/ffmpeg/libswresample/version.h @@ -28,8 +28,8 @@ #include "libavutil/avutil.h" -#define LIBSWRESAMPLE_VERSION_MAJOR 1 -#define LIBSWRESAMPLE_VERSION_MINOR 2 +#define LIBSWRESAMPLE_VERSION_MAJOR 2 +#define LIBSWRESAMPLE_VERSION_MINOR 0 #define LIBSWRESAMPLE_VERSION_MICRO 100 #define LIBSWRESAMPLE_VERSION_INT AV_VERSION_INT(LIBSWRESAMPLE_VERSION_MAJOR, \ diff --git a/chromium/third_party/ffmpeg/libswresample/x86/audio_convert.asm b/chromium/third_party/ffmpeg/libswresample/x86/audio_convert.asm index 69e4f0538b7..e9a9acf2dbd 100644 --- a/chromium/third_party/ffmpeg/libswresample/x86/audio_convert.asm +++ b/chromium/third_party/ffmpeg/libswresample/x86/audio_convert.asm @@ -44,7 +44,7 @@ cglobal pack_2ch_%2_to_%1_%3, 3, 4, 6, dst, src, len, src2 test src2q, mmsize-1 jne pack_2ch_%2_to_%1_u_int %+ SUFFIX %else -pack_2ch_%2_to_%1_u_int %+ SUFFIX +pack_2ch_%2_to_%1_u_int %+ SUFFIX: %endif lea srcq , [srcq + (1<<%5)*lenq] lea src2q, [src2q + (1<<%5)*lenq] @@ -101,7 +101,7 @@ cglobal unpack_2ch_%2_to_%1_%3, 3, 4, 7, dst, src, len, dst2 test dst2q, mmsize-1 jne unpack_2ch_%2_to_%1_u_int %+ SUFFIX %else -unpack_2ch_%2_to_%1_u_int %+ SUFFIX +unpack_2ch_%2_to_%1_u_int %+ SUFFIX: %endif lea srcq , [srcq + (2<<%5)*lenq] lea dstq , [dstq + (1<<%4)*lenq] @@ -170,7 +170,7 @@ cglobal %2_to_%1_%3, 3, 3, 6, dst, src, len test srcq, mmsize-1 jne %2_to_%1_u_int %+ SUFFIX %else -%2_to_%1_u_int %+ SUFFIX +%2_to_%1_u_int %+ SUFFIX: %endif lea srcq , [srcq + (1<<%5)*lenq] lea dstq , [dstq + (1<<%4)*lenq] @@ -232,7 +232,7 @@ cglobal pack_6ch_%2_to_%1_%3, 2,8,7, dst, src, src1, src2, src3, src4, src5, len test src5q, mmsize-1 jne pack_6ch_%2_to_%1_u_int %+ SUFFIX %else -pack_6ch_%2_to_%1_u_int %+ SUFFIX +pack_6ch_%2_to_%1_u_int %+ SUFFIX: %endif sub src1q, srcq sub src2q, srcq @@ -335,7 +335,7 @@ cglobal unpack_6ch_%2_to_%1_%3, 2, 8, 8, dst, src, dst1, dst2, dst3, dst4, dst5, test dst5q, mmsize-1 jne unpack_6ch_%2_to_%1_u_int %+ SUFFIX %else -unpack_6ch_%2_to_%1_u_int %+ SUFFIX +unpack_6ch_%2_to_%1_u_int %+ SUFFIX: %endif sub dst1q, dstq sub dst2q, dstq @@ -443,7 +443,7 @@ cglobal pack_8ch_%2_to_%1_%3, 2,PACK_8CH_GPRS,10, ARCH_X86_32*48, dst, src, len, %endif jne pack_8ch_%2_to_%1_u_int %+ SUFFIX %else -pack_8ch_%2_to_%1_u_int %+ SUFFIX +pack_8ch_%2_to_%1_u_int %+ SUFFIX: %endif sub src1q, srcq sub src2q, srcq diff --git a/chromium/third_party/ffmpeg/libswresample/x86/rematrix.asm b/chromium/third_party/ffmpeg/libswresample/x86/rematrix.asm index f0ae9599a29..7984b9a729b 100644 --- a/chromium/third_party/ffmpeg/libswresample/x86/rematrix.asm +++ b/chromium/third_party/ffmpeg/libswresample/x86/rematrix.asm @@ -37,7 +37,7 @@ cglobal mix_2_1_%1_float, 7, 7, 6, out, in1, in2, coeffp, index1, index2, len test outq, mmsize-1 jne mix_2_1_float_u_int %+ SUFFIX %else -mix_2_1_float_u_int %+ SUFFIX +mix_2_1_float_u_int %+ SUFFIX: %endif VBROADCASTSS m4, [coeffpq + 4*index1q] VBROADCASTSS m5, [coeffpq + 4*index2q] @@ -79,7 +79,7 @@ cglobal mix_1_1_%1_float, 5, 5, 3, out, in, coeffp, index, len test outq, mmsize-1 jne mix_1_1_float_u_int %+ SUFFIX %else -mix_1_1_float_u_int %+ SUFFIX +mix_1_1_float_u_int %+ SUFFIX: %endif VBROADCASTSS m2, [coeffpq + 4*indexq] shl lenq , 2 @@ -111,7 +111,7 @@ cglobal mix_1_1_%1_int16, 5, 5, 6, out, in, coeffp, index, len test outq, mmsize-1 jne mix_1_1_int16_u_int %+ SUFFIX %else -mix_1_1_int16_u_int %+ SUFFIX +mix_1_1_int16_u_int %+ SUFFIX: %endif movd m4, [coeffpq + 4*indexq] SPLATW m5, m4 @@ -166,7 +166,7 @@ cglobal mix_2_1_%1_int16, 7, 7, 8, out, in1, in2, coeffp, index1, index2, len test outq, mmsize-1 jne mix_2_1_int16_u_int %+ SUFFIX %else -mix_2_1_int16_u_int %+ SUFFIX +mix_2_1_int16_u_int %+ SUFFIX: %endif movd m4, [coeffpq + 4*index1q] movd m6, [coeffpq + 4*index2q] diff --git a/chromium/third_party/ffmpeg/libswresample/x86/resample.asm b/chromium/third_party/ffmpeg/libswresample/x86/resample.asm index a57ff37bb99..4989aa69915 100644 --- a/chromium/third_party/ffmpeg/libswresample/x86/resample.asm +++ b/chromium/third_party/ffmpeg/libswresample/x86/resample.asm @@ -176,7 +176,12 @@ cglobal resample_common_%1, 1, 7, 2, ctx, phase_shift, dst, frac, \ .inner_loop: movu m1, [srcq+min_filter_count_x4q*1] %ifidn %1, int16 - PMADCSWD m0, m1, [filterq+min_filter_count_x4q*1], m0, m1 +%if cpuflag(xop) + vpmadcswd m0, m1, [filterq+min_filter_count_x4q*1], m0 +%else + pmaddwd m1, [filterq+min_filter_count_x4q*1] + paddd m0, m1 +%endif %else ; float/double %if cpuflag(fma4) || cpuflag(fma3) fmaddp%4 m0, m1, [filterq+min_filter_count_x4q*1], m0 |