Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
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
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
7e522859
Commit
7e522859
authored
Oct 07, 2012
by
Janne Grunau
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x86: vc1: call ff_vc1dsp_init_x86() under if (ARCH_X86)
parent
cb36febc
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
163 additions
and
94 deletions
+163
-94
vc1dsp.c
libavcodec/vc1dsp.c
+2
-2
vc1dsp.h
libavcodec/vc1dsp.h
+1
-1
Makefile
libavcodec/x86/Makefile
+1
-0
vc1dsp.h
libavcodec/x86/vc1dsp.h
+29
-0
vc1dsp_init.c
libavcodec/x86/vc1dsp_init.c
+123
-0
vc1dsp_mmx.c
libavcodec/x86/vc1dsp_mmx.c
+7
-91
No files found.
libavcodec/vc1dsp.c
View file @
7e522859
...
...
@@ -849,6 +849,6 @@ av_cold void ff_vc1dsp_init(VC1DSPContext* dsp) {
if
(
HAVE_ALTIVEC
)
ff_vc1dsp_init_altivec
(
dsp
);
if
(
HAVE_MMX
)
ff_vc1dsp_init_
mmx
(
dsp
);
if
(
ARCH_X86
)
ff_vc1dsp_init_
x86
(
dsp
);
}
libavcodec/vc1dsp.h
View file @
7e522859
...
...
@@ -74,6 +74,6 @@ typedef struct VC1DSPContext {
void
ff_vc1dsp_init
(
VC1DSPContext
*
c
);
void
ff_vc1dsp_init_altivec
(
VC1DSPContext
*
c
);
void
ff_vc1dsp_init_
mmx
(
VC1DSPContext
*
dsp
);
void
ff_vc1dsp_init_
x86
(
VC1DSPContext
*
dsp
);
#endif
/* AVCODEC_VC1DSP_H */
libavcodec/x86/Makefile
View file @
7e522859
...
...
@@ -18,6 +18,7 @@ OBJS-$(CONFIG_RV30_DECODER) += x86/rv34dsp_init.o
OBJS-$(CONFIG_RV40_DECODER)
+=
x86/rv34dsp_init.o
\
x86/rv40dsp_init.o
OBJS-$(CONFIG_TRUEHD_DECODER)
+=
x86/mlpdsp.o
OBJS-$(CONFIG_VC1_DECODER)
+=
x86/vc1dsp_init.o
OBJS-$(CONFIG_VP3DSP)
+=
x86/vp3dsp_init.o
OBJS-$(CONFIG_VP5_DECODER)
+=
x86/vp56dsp_init.o
OBJS-$(CONFIG_VP6_DECODER)
+=
x86/vp56dsp_init.o
...
...
libavcodec/x86/vc1dsp.h
0 → 100644
View file @
7e522859
/*
* VC-1 and WMV3 decoder - X86 DSP init functions
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* Libav is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with Libav; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef AVCODEC_X86_VC1DSP_H
#define AVCODEC_X86_VC1DSP_H
#include "libavcodec/vc1dsp.h"
void
ff_vc1dsp_init_mmx
(
VC1DSPContext
*
dsp
);
void
ff_vc1dsp_init_mmxext
(
VC1DSPContext
*
dsp
);
#endif
/* AVCODEC_X86_VC1DSP_H */
libavcodec/x86/vc1dsp_init.c
0 → 100644
View file @
7e522859
/*
* VC-1 and WMV3 - DSP functions MMX-optimized
* Copyright (c) 2007 Christophe GISQUET <christophe.gisquet@free.fr>
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
* files (the "Software"), to deal in the Software without
* restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following
* conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
#include "libavutil/cpu.h"
#include "libavutil/x86/cpu.h"
#include "libavcodec/vc1dsp.h"
#include "vc1dsp.h"
#include "config.h"
#define LOOP_FILTER(EXT) \
void ff_vc1_v_loop_filter4_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_h_loop_filter4_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_v_loop_filter8_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_h_loop_filter8_ ## EXT(uint8_t *src, int stride, int pq); \
\
static void vc1_v_loop_filter16_ ## EXT(uint8_t *src, int stride, int pq) \
{ \
ff_vc1_v_loop_filter8_ ## EXT(src, stride, pq); \
ff_vc1_v_loop_filter8_ ## EXT(src+8, stride, pq); \
} \
\
static void vc1_h_loop_filter16_ ## EXT(uint8_t *src, int stride, int pq) \
{ \
ff_vc1_h_loop_filter8_ ## EXT(src, stride, pq); \
ff_vc1_h_loop_filter8_ ## EXT(src+8*stride, stride, pq); \
}
#if HAVE_YASM
LOOP_FILTER
(
mmx2
)
LOOP_FILTER
(
sse2
)
LOOP_FILTER
(
ssse3
)
void
ff_vc1_h_loop_filter8_sse4
(
uint8_t
*
src
,
int
stride
,
int
pq
);
static
void
vc1_h_loop_filter16_sse4
(
uint8_t
*
src
,
int
stride
,
int
pq
)
{
ff_vc1_h_loop_filter8_sse4
(
src
,
stride
,
pq
);
ff_vc1_h_loop_filter8_sse4
(
src
+
8
*
stride
,
stride
,
pq
);
}
#endif
/* HAVE_YASM */
void
ff_put_vc1_chroma_mc8_mmx_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_mmx2_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_3dnow_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_put_vc1_chroma_mc8_ssse3_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_ssse3_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
av_cold
void
ff_vc1dsp_init_x86
(
VC1DSPContext
*
dsp
)
{
int
mm_flags
=
av_get_cpu_flags
();
if
(
INLINE_MMX
(
mm_flags
))
ff_vc1dsp_init_mmx
(
dsp
);
if
(
INLINE_MMXEXT
(
mm_flags
))
ff_vc1dsp_init_mmxext
(
dsp
);
#define ASSIGN_LF(EXT) \
dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_ ## EXT; \
dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_ ## EXT; \
dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_ ## EXT; \
dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_ ## EXT; \
dsp->vc1_v_loop_filter16 = vc1_v_loop_filter16_ ## EXT; \
dsp->vc1_h_loop_filter16 = vc1_h_loop_filter16_ ## EXT
#if HAVE_YASM
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
dsp
->
put_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_put_vc1_chroma_mc8_mmx_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_MMXEXT
)
{
ASSIGN_LF
(
mmx2
);
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_mmx2_nornd
;
}
else
if
(
mm_flags
&
AV_CPU_FLAG_3DNOW
)
{
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_3dnow_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSE2
)
{
dsp
->
vc1_v_loop_filter8
=
ff_vc1_v_loop_filter8_sse2
;
dsp
->
vc1_h_loop_filter8
=
ff_vc1_h_loop_filter8_sse2
;
dsp
->
vc1_v_loop_filter16
=
vc1_v_loop_filter16_sse2
;
dsp
->
vc1_h_loop_filter16
=
vc1_h_loop_filter16_sse2
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSSE3
)
{
ASSIGN_LF
(
ssse3
);
dsp
->
put_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_put_vc1_chroma_mc8_ssse3_nornd
;
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_ssse3_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSE4
)
{
dsp
->
vc1_h_loop_filter8
=
ff_vc1_h_loop_filter8_sse4
;
dsp
->
vc1_h_loop_filter16
=
vc1_h_loop_filter16_sse4
;
}
#endif
/* HAVE_YASM */
}
libavcodec/x86/vc1dsp_mmx.c
View file @
7e522859
...
...
@@ -28,9 +28,11 @@
#include "libavutil/internal.h"
#include "libavutil/mem.h"
#include "libavutil/x86/asm.h"
#include "libavutil/x86/cpu.h"
#include "libavcodec/dsputil.h"
#include "dsputil_mmx.h"
#include "libavcodec/vc1dsp.h"
#include "vc1dsp.h"
#if HAVE_INLINE_ASM
...
...
@@ -686,57 +688,8 @@ static void vc1_inv_trans_8x8_dc_mmx2(uint8_t *dest, int linesize, DCTELEM *bloc
);
}
#endif
/* HAVE_INLINE_ASM */
#define LOOP_FILTER(EXT) \
void ff_vc1_v_loop_filter4_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_h_loop_filter4_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_v_loop_filter8_ ## EXT(uint8_t *src, int stride, int pq); \
void ff_vc1_h_loop_filter8_ ## EXT(uint8_t *src, int stride, int pq); \
\
static void vc1_v_loop_filter16_ ## EXT(uint8_t *src, int stride, int pq) \
{ \
ff_vc1_v_loop_filter8_ ## EXT(src, stride, pq); \
ff_vc1_v_loop_filter8_ ## EXT(src+8, stride, pq); \
} \
\
static void vc1_h_loop_filter16_ ## EXT(uint8_t *src, int stride, int pq) \
{ \
ff_vc1_h_loop_filter8_ ## EXT(src, stride, pq); \
ff_vc1_h_loop_filter8_ ## EXT(src+8*stride, stride, pq); \
}
#if HAVE_YASM
LOOP_FILTER
(
mmx2
)
LOOP_FILTER
(
sse2
)
LOOP_FILTER
(
ssse3
)
void
ff_vc1_h_loop_filter8_sse4
(
uint8_t
*
src
,
int
stride
,
int
pq
);
static
void
vc1_h_loop_filter16_sse4
(
uint8_t
*
src
,
int
stride
,
int
pq
)
av_cold
void
ff_vc1dsp_init_mmx
(
VC1DSPContext
*
dsp
)
{
ff_vc1_h_loop_filter8_sse4
(
src
,
stride
,
pq
);
ff_vc1_h_loop_filter8_sse4
(
src
+
8
*
stride
,
stride
,
pq
);
}
#endif
/* HAVE_YASM */
void
ff_put_vc1_chroma_mc8_mmx_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_mmx2_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_3dnow_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_put_vc1_chroma_mc8_ssse3_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_avg_vc1_chroma_mc8_ssse3_nornd
(
uint8_t
*
dst
,
uint8_t
*
src
,
int
stride
,
int
h
,
int
x
,
int
y
);
void
ff_vc1dsp_init_mmx
(
VC1DSPContext
*
dsp
)
{
int
mm_flags
=
av_get_cpu_flags
();
#if HAVE_INLINE_ASM
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
dsp
->
put_vc1_mspel_pixels_tab
[
0
]
=
ff_put_vc1_mspel_mc00_mmx
;
dsp
->
put_vc1_mspel_pixels_tab
[
4
]
=
put_vc1_mspel_mc01_mmx
;
dsp
->
put_vc1_mspel_pixels_tab
[
8
]
=
put_vc1_mspel_mc02_mmx
;
...
...
@@ -756,9 +709,10 @@ void ff_vc1dsp_init_mmx(VC1DSPContext *dsp)
dsp
->
put_vc1_mspel_pixels_tab
[
7
]
=
put_vc1_mspel_mc31_mmx
;
dsp
->
put_vc1_mspel_pixels_tab
[
11
]
=
put_vc1_mspel_mc32_mmx
;
dsp
->
put_vc1_mspel_pixels_tab
[
15
]
=
put_vc1_mspel_mc33_mmx
;
}
}
if
(
mm_flags
&
AV_CPU_FLAG_MMXEXT
)
{
av_cold
void
ff_vc1dsp_init_mmxext
(
VC1DSPContext
*
dsp
)
{
dsp
->
avg_vc1_mspel_pixels_tab
[
0
]
=
ff_avg_vc1_mspel_mc00_mmx2
;
dsp
->
avg_vc1_mspel_pixels_tab
[
4
]
=
avg_vc1_mspel_mc01_mmx2
;
dsp
->
avg_vc1_mspel_pixels_tab
[
8
]
=
avg_vc1_mspel_mc02_mmx2
;
...
...
@@ -783,43 +737,5 @@ void ff_vc1dsp_init_mmx(VC1DSPContext *dsp)
dsp
->
vc1_inv_trans_4x8_dc
=
vc1_inv_trans_4x8_dc_mmx2
;
dsp
->
vc1_inv_trans_8x4_dc
=
vc1_inv_trans_8x4_dc_mmx2
;
dsp
->
vc1_inv_trans_4x4_dc
=
vc1_inv_trans_4x4_dc_mmx2
;
}
#endif
/* HAVE_INLINE_ASM */
#define ASSIGN_LF(EXT) \
dsp->vc1_v_loop_filter4 = ff_vc1_v_loop_filter4_ ## EXT; \
dsp->vc1_h_loop_filter4 = ff_vc1_h_loop_filter4_ ## EXT; \
dsp->vc1_v_loop_filter8 = ff_vc1_v_loop_filter8_ ## EXT; \
dsp->vc1_h_loop_filter8 = ff_vc1_h_loop_filter8_ ## EXT; \
dsp->vc1_v_loop_filter16 = vc1_v_loop_filter16_ ## EXT; \
dsp->vc1_h_loop_filter16 = vc1_h_loop_filter16_ ## EXT
#if HAVE_YASM
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
dsp
->
put_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_put_vc1_chroma_mc8_mmx_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_MMXEXT
)
{
ASSIGN_LF
(
mmx2
);
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_mmx2_nornd
;
}
else
if
(
mm_flags
&
AV_CPU_FLAG_3DNOW
)
{
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_3dnow_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSE2
)
{
dsp
->
vc1_v_loop_filter8
=
ff_vc1_v_loop_filter8_sse2
;
dsp
->
vc1_h_loop_filter8
=
ff_vc1_h_loop_filter8_sse2
;
dsp
->
vc1_v_loop_filter16
=
vc1_v_loop_filter16_sse2
;
dsp
->
vc1_h_loop_filter16
=
vc1_h_loop_filter16_sse2
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSSE3
)
{
ASSIGN_LF
(
ssse3
);
dsp
->
put_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_put_vc1_chroma_mc8_ssse3_nornd
;
dsp
->
avg_no_rnd_vc1_chroma_pixels_tab
[
0
]
=
ff_avg_vc1_chroma_mc8_ssse3_nornd
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSE4
)
{
dsp
->
vc1_h_loop_filter8
=
ff_vc1_h_loop_filter8_sse4
;
dsp
->
vc1_h_loop_filter16
=
vc1_h_loop_filter16_sse4
;
}
#endif
/* HAVE_YASM */
}
#endif
/* HAVE_INLINE_ASM */
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