summaryrefslogtreecommitdiff
path: root/chromium/third_party/ffmpeg/libswresample
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-10-13 13:24:50 +0200
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2015-10-14 10:57:25 +0000
commitaf3d4809763ef308f08ced947a73b624729ac7ea (patch)
tree4402b911e30383f6c6dace1e8cf3b8e85355db3a /chromium/third_party/ffmpeg/libswresample
parent0e8ff63a407fe323e215bb1a2c423c09a4747c8a (diff)
downloadqtwebengine-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')
-rw-r--r--chromium/third_party/ffmpeg/libswresample/dither.c2
-rw-r--r--chromium/third_party/ffmpeg/libswresample/options.c4
-rw-r--r--chromium/third_party/ffmpeg/libswresample/soxr_resample.c34
-rw-r--r--chromium/third_party/ffmpeg/libswresample/swresample-test.c2
-rw-r--r--chromium/third_party/ffmpeg/libswresample/swresample.c15
-rw-r--r--chromium/third_party/ffmpeg/libswresample/swresample_internal.h4
-rw-r--r--chromium/third_party/ffmpeg/libswresample/version.h4
-rw-r--r--chromium/third_party/ffmpeg/libswresample/x86/audio_convert.asm12
-rw-r--r--chromium/third_party/ffmpeg/libswresample/x86/rematrix.asm8
-rw-r--r--chromium/third_party/ffmpeg/libswresample/x86/resample.asm7
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