Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
ffmpeg
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Stefan Westerfeld
ffmpeg
Commits
5b1b536e
Commit
5b1b536e
authored
Jan 07, 2016
by
foo86
Committed by
Hendrik Leppkes
Jan 31, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avcodec/synth_filter: add more filters
parent
8984806a
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
128 additions
and
1 deletion
+128
-1
synth_filter.c
libavcodec/synth_filter.c
+115
-1
synth_filter.h
libavcodec/synth_filter.h
+13
-0
No files found.
libavcodec/synth_filter.c
View file @
5b1b536e
/*
* copyright (c) 2008 Michael Niedermayer <michaelni@gmx.at>
* Copyright (C) 2016 foo86
*
* This file is part of FFmpeg.
*
...
...
@@ -19,6 +20,8 @@
*/
#include "fft.h"
#include "dcadct.h"
#include "dcamath.h"
#include "synth_filter.h"
static
void
synth_filter_float
(
FFTContext
*
imdct
,
...
...
@@ -57,9 +60,120 @@ static void synth_filter_float(FFTContext *imdct,
*
synth_buf_offset
=
(
*
synth_buf_offset
-
32
)
&
511
;
}
static
void
synth_filter_float_64
(
FFTContext
*
imdct
,
float
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
float
synth_buf2
[
64
],
const
float
window
[
1024
],
float
out
[
64
],
const
float
in
[
64
],
float
scale
)
{
float
*
synth_buf
=
synth_buf_ptr
+
*
synth_buf_offset
;
int
i
,
j
;
imdct
->
imdct_half
(
imdct
,
synth_buf
,
in
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
float
a
=
synth_buf2
[
i
];
float
b
=
synth_buf2
[
i
+
32
];
float
c
=
0
;
float
d
=
0
;
for
(
j
=
0
;
j
<
1024
-
*
synth_buf_offset
;
j
+=
128
)
{
a
+=
window
[
i
+
j
]
*
(
-
synth_buf
[
31
-
i
+
j
]);
b
+=
window
[
i
+
j
+
32
]
*
(
synth_buf
[
i
+
j
]);
c
+=
window
[
i
+
j
+
64
]
*
(
synth_buf
[
32
+
i
+
j
]);
d
+=
window
[
i
+
j
+
96
]
*
(
synth_buf
[
63
-
i
+
j
]);
}
for
(
;
j
<
1024
;
j
+=
128
)
{
a
+=
window
[
i
+
j
]
*
(
-
synth_buf
[
31
-
i
+
j
-
1024
]);
b
+=
window
[
i
+
j
+
32
]
*
(
synth_buf
[
i
+
j
-
1024
]);
c
+=
window
[
i
+
j
+
64
]
*
(
synth_buf
[
32
+
i
+
j
-
1024
]);
d
+=
window
[
i
+
j
+
96
]
*
(
synth_buf
[
63
-
i
+
j
-
1024
]);
}
out
[
i
]
=
a
*
scale
;
out
[
i
+
32
]
=
b
*
scale
;
synth_buf2
[
i
]
=
c
;
synth_buf2
[
i
+
32
]
=
d
;
}
*
synth_buf_offset
=
(
*
synth_buf_offset
-
64
)
&
1023
;
}
static
void
synth_filter_fixed
(
DCADCTContext
*
imdct
,
int32_t
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
int32_t
synth_buf2
[
32
],
const
int32_t
window
[
512
],
int32_t
out
[
32
],
const
int32_t
in
[
32
])
{
int32_t
*
synth_buf
=
synth_buf_ptr
+
*
synth_buf_offset
;
int
i
,
j
;
imdct
->
imdct_half
[
0
](
synth_buf
,
in
);
for
(
i
=
0
;
i
<
16
;
i
++
)
{
int64_t
a
=
synth_buf2
[
i
]
*
(
INT64_C
(
1
)
<<
21
);
int64_t
b
=
synth_buf2
[
i
+
16
]
*
(
INT64_C
(
1
)
<<
21
);
int64_t
c
=
0
;
int64_t
d
=
0
;
for
(
j
=
0
;
j
<
512
-
*
synth_buf_offset
;
j
+=
64
)
{
a
+=
(
int64_t
)
window
[
i
+
j
]
*
synth_buf
[
i
+
j
];
b
+=
(
int64_t
)
window
[
i
+
j
+
16
]
*
synth_buf
[
15
-
i
+
j
];
c
+=
(
int64_t
)
window
[
i
+
j
+
32
]
*
synth_buf
[
16
+
i
+
j
];
d
+=
(
int64_t
)
window
[
i
+
j
+
48
]
*
synth_buf
[
31
-
i
+
j
];
}
for
(
;
j
<
512
;
j
+=
64
)
{
a
+=
(
int64_t
)
window
[
i
+
j
]
*
synth_buf
[
i
+
j
-
512
];
b
+=
(
int64_t
)
window
[
i
+
j
+
16
]
*
synth_buf
[
15
-
i
+
j
-
512
];
c
+=
(
int64_t
)
window
[
i
+
j
+
32
]
*
synth_buf
[
16
+
i
+
j
-
512
];
d
+=
(
int64_t
)
window
[
i
+
j
+
48
]
*
synth_buf
[
31
-
i
+
j
-
512
];
}
out
[
i
]
=
clip23
(
norm21
(
a
));
out
[
i
+
16
]
=
clip23
(
norm21
(
b
));
synth_buf2
[
i
]
=
norm21
(
c
);
synth_buf2
[
i
+
16
]
=
norm21
(
d
);
}
*
synth_buf_offset
=
(
*
synth_buf_offset
-
32
)
&
511
;
}
static
void
synth_filter_fixed_64
(
DCADCTContext
*
imdct
,
int32_t
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
int32_t
synth_buf2
[
64
],
const
int32_t
window
[
1024
],
int32_t
out
[
64
],
const
int32_t
in
[
64
])
{
int32_t
*
synth_buf
=
synth_buf_ptr
+
*
synth_buf_offset
;
int
i
,
j
;
imdct
->
imdct_half
[
1
](
synth_buf
,
in
);
for
(
i
=
0
;
i
<
32
;
i
++
)
{
int64_t
a
=
synth_buf2
[
i
]
*
(
INT64_C
(
1
)
<<
20
);
int64_t
b
=
synth_buf2
[
i
+
32
]
*
(
INT64_C
(
1
)
<<
20
);
int64_t
c
=
0
;
int64_t
d
=
0
;
for
(
j
=
0
;
j
<
1024
-
*
synth_buf_offset
;
j
+=
128
)
{
a
+=
(
int64_t
)
window
[
i
+
j
]
*
synth_buf
[
i
+
j
];
b
+=
(
int64_t
)
window
[
i
+
j
+
32
]
*
synth_buf
[
31
-
i
+
j
];
c
+=
(
int64_t
)
window
[
i
+
j
+
64
]
*
synth_buf
[
32
+
i
+
j
];
d
+=
(
int64_t
)
window
[
i
+
j
+
96
]
*
synth_buf
[
63
-
i
+
j
];
}
for
(
;
j
<
1024
;
j
+=
128
)
{
a
+=
(
int64_t
)
window
[
i
+
j
]
*
synth_buf
[
i
+
j
-
1024
];
b
+=
(
int64_t
)
window
[
i
+
j
+
32
]
*
synth_buf
[
31
-
i
+
j
-
1024
];
c
+=
(
int64_t
)
window
[
i
+
j
+
64
]
*
synth_buf
[
32
+
i
+
j
-
1024
];
d
+=
(
int64_t
)
window
[
i
+
j
+
96
]
*
synth_buf
[
63
-
i
+
j
-
1024
];
}
out
[
i
]
=
clip23
(
norm20
(
a
));
out
[
i
+
32
]
=
clip23
(
norm20
(
b
));
synth_buf2
[
i
]
=
norm20
(
c
);
synth_buf2
[
i
+
32
]
=
norm20
(
d
);
}
*
synth_buf_offset
=
(
*
synth_buf_offset
-
64
)
&
1023
;
}
av_cold
void
ff_synth_filter_init
(
SynthFilterContext
*
c
)
{
c
->
synth_filter_float
=
synth_filter_float
;
c
->
synth_filter_float
=
synth_filter_float
;
c
->
synth_filter_float_64
=
synth_filter_float_64
;
c
->
synth_filter_fixed
=
synth_filter_fixed
;
c
->
synth_filter_fixed_64
=
synth_filter_fixed_64
;
if
(
ARCH_AARCH64
)
ff_synth_filter_init_aarch64
(
c
);
...
...
libavcodec/synth_filter.h
View file @
5b1b536e
...
...
@@ -22,6 +22,7 @@
#define AVCODEC_SYNTH_FILTER_H
#include "fft.h"
#include "dcadct.h"
typedef
struct
SynthFilterContext
{
void
(
*
synth_filter_float
)(
FFTContext
*
imdct
,
...
...
@@ -29,6 +30,18 @@ typedef struct SynthFilterContext {
float
synth_buf2
[
32
],
const
float
window
[
512
],
float
out
[
32
],
const
float
in
[
32
],
float
scale
);
void
(
*
synth_filter_float_64
)(
FFTContext
*
imdct
,
float
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
float
synth_buf2
[
64
],
const
float
window
[
1024
],
float
out
[
64
],
const
float
in
[
64
],
float
scale
);
void
(
*
synth_filter_fixed
)(
DCADCTContext
*
imdct
,
int32_t
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
int32_t
synth_buf2
[
32
],
const
int32_t
window
[
512
],
int32_t
out
[
32
],
const
int32_t
in
[
32
]);
void
(
*
synth_filter_fixed_64
)(
DCADCTContext
*
imdct
,
int32_t
*
synth_buf_ptr
,
int
*
synth_buf_offset
,
int32_t
synth_buf2
[
64
],
const
int32_t
window
[
1024
],
int32_t
out
[
64
],
const
int32_t
in
[
64
]);
}
SynthFilterContext
;
void
ff_synth_filter_init
(
SynthFilterContext
*
c
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment