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
2d604443
Commit
2d604443
authored
Feb 08, 2014
by
Diego Biurrun
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dsputil: Split motion estimation compare bits off into their own context
parent
a578b040
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
31 changed files
with
184 additions
and
215 deletions
+184
-215
configure
configure
+9
-9
Makefile
libavcodec/Makefile
+1
-1
ac3enc.c
libavcodec/ac3enc.c
+3
-2
ac3enc.h
libavcodec/ac3enc.h
+2
-2
Makefile
libavcodec/arm/Makefile
+2
-2
me_cmp_armv6.S
libavcodec/arm/me_cmp_armv6.S
+0
-0
me_cmp_init_arm.c
libavcodec/arm/me_cmp_init_arm.c
+2
-3
dv.h
libavcodec/dv.h
+1
-1
dvenc.c
libavcodec/dvenc.c
+5
-5
error_resilience.c
libavcodec/error_resilience.c
+5
-5
error_resilience.h
libavcodec/error_resilience.h
+2
-2
h264.c
libavcodec/h264.c
+4
-4
h264.h
libavcodec/h264.h
+2
-2
h264_slice.c
libavcodec/h264_slice.c
+1
-2
me_cmp.c
libavcodec/me_cmp.c
+9
-19
me_cmp.h
libavcodec/me_cmp.h
+12
-24
motion_est.c
libavcodec/motion_est.c
+22
-21
motion_est_template.c
libavcodec/motion_est_template.c
+32
-33
mpeg4videoenc.c
libavcodec/mpeg4videoenc.c
+1
-1
mpegvideo.c
libavcodec/mpegvideo.c
+2
-2
mpegvideo.h
libavcodec/mpegvideo.h
+2
-2
mpegvideo_enc.c
libavcodec/mpegvideo_enc.c
+44
-52
mpegvideoencdsp.c
libavcodec/mpegvideoencdsp.c
+1
-1
Makefile
libavcodec/ppc/Makefile
+1
-1
me_cmp.c
libavcodec/ppc/me_cmp.c
+2
-2
svq1enc.c
libavcodec/svq1enc.c
+5
-5
svq1enc.h
libavcodec/svq1enc.h
+2
-2
utils.c
libavcodec/utils.c
+3
-3
Makefile
libavcodec/x86/Makefile
+2
-2
me_cmp.asm
libavcodec/x86/me_cmp.asm
+1
-1
me_cmp_init.c
libavcodec/x86/me_cmp_init.c
+4
-4
No files found.
configure
View file @
2d604443
...
...
@@ -1533,7 +1533,6 @@ CONFIG_EXTRA="
blockdsp
bswapdsp
cabac
dsputil
dvprofile
fdctdsp
gcrypt
...
...
@@ -1552,6 +1551,7 @@ CONFIG_EXTRA="
intrax8
lgplv3
lpc
me_cmp
mpeg_er
mpegaudio
mpegaudiodsp
...
...
@@ -1707,24 +1707,24 @@ threads_if_any="$THREADS_LIST"
# subsystems
dct_select
=
"rdft"
dsputil_select
=
"fdctdsp idctdsp pixblockdsp"
error_resilience_select
=
"dsputil"
error_resilience_select
=
"me_cmp"
intrax8_select
=
"error_resilience"
mdct_select
=
"fft"
rdft_select
=
"fft"
me_cmp_select
=
"fdctdsp idctdsp pixblockdsp"
mpeg_er_select
=
"error_resilience"
mpegaudio_select
=
"mpegaudiodsp"
mpegaudiodsp_select
=
"dct"
mpegvideo_select
=
"blockdsp
dsputil hpeldsp idctds
p videodsp"
mpegvideoenc_select
=
"
dsputil
mpegvideo pixblockdsp qpeldsp"
mpegvideo_select
=
"blockdsp
hpeldsp idctdsp me_cm
p videodsp"
mpegvideoenc_select
=
"
me_cmp
mpegvideo pixblockdsp qpeldsp"
# decoders / encoders
aac_decoder_select
=
"mdct sinewin"
aac_encoder_select
=
"audio_frame_queue mdct sinewin"
aac_latm_decoder_select
=
"aac_decoder aac_latm_parser"
ac3_decoder_select
=
"ac3_parser ac3dsp bswapdsp mdct"
ac3_encoder_select
=
"ac3dsp audiodsp
dsputil mdct
"
ac3_fixed_encoder_select
=
"ac3dsp audiodsp
dsputil mdct
"
ac3_encoder_select
=
"ac3dsp audiodsp
mdct me_cmp
"
ac3_fixed_encoder_select
=
"ac3dsp audiodsp
mdct me_cmp
"
aic_decoder_select
=
"golomb idctdsp"
alac_encoder_select
=
"lpc"
als_decoder_select
=
"bswapdsp"
...
...
@@ -1752,7 +1752,7 @@ dca_decoder_select="mdct"
dnxhd_decoder_select
=
"blockdsp idctdsp"
dnxhd_encoder_select
=
"aandcttables blockdsp fdctdsp idctdsp mpegvideoenc pixblockdsp"
dvvideo_decoder_select
=
"dvprofile idctdsp"
dvvideo_encoder_select
=
"d
sputil dvprofile fdctds
p pixblockdsp"
dvvideo_encoder_select
=
"d
vprofile fdctdsp me_cm
p pixblockdsp"
dxa_decoder_deps
=
"zlib"
eac3_decoder_select
=
"ac3_decoder"
eac3_encoder_select
=
"ac3_encoder"
...
...
@@ -1856,7 +1856,7 @@ shorten_decoder_select="golomb"
sipr_decoder_select
=
"lsp"
sp5x_decoder_select
=
"mjpeg_decoder"
svq1_decoder_select
=
"hpeldsp"
svq1_encoder_select
=
"aandcttables
dsputil hpelds
p mpegvideoenc"
svq1_encoder_select
=
"aandcttables
hpeldsp me_cm
p mpegvideoenc"
svq3_decoder_select
=
"h264_decoder hpeldsp tpeldsp"
svq3_decoder_suggest
=
"zlib"
tak_decoder_select
=
"audiodsp"
...
...
libavcodec/Makefile
View file @
2d604443
...
...
@@ -35,7 +35,6 @@ OBJS-$(CONFIG_BLOCKDSP) += blockdsp.o
OBJS-$(CONFIG_BSWAPDSP)
+=
bswapdsp.o
OBJS-$(CONFIG_CABAC)
+=
cabac.o
OBJS-$(CONFIG_DCT)
+=
dct.o
dct32_fixed.o
dct32_float.o
OBJS-$(CONFIG_DSPUTIL)
+=
dsputil.o
OBJS-$(CONFIG_DXVA2)
+=
dxva2.o
OBJS-$(CONFIG_ERROR_RESILIENCE)
+=
error_resilience.o
OBJS-$(CONFIG_FDCTDSP)
+=
fdctdsp.o
faandct.o
\
...
...
@@ -60,6 +59,7 @@ OBJS-$(CONFIG_LIBXVID) += libxvid_rc.o
OBJS-$(CONFIG_LPC)
+=
lpc.o
OBJS-$(CONFIG_LSP)
+=
lsp.o
OBJS-$(CONFIG_MDCT)
+=
mdct_fixed.o
mdct_float.o
OBJS-$(CONFIG_ME_CMP)
+=
me_cmp.o
OBJS-$(CONFIG_MPEG_ER)
+=
mpeg_er.o
OBJS-$(CONFIG_MPEGAUDIO)
+=
mpegaudio.o
mpegaudiodata.o
\
mpegaudiodecheader.o
...
...
libavcodec/ac3enc.c
View file @
2d604443
...
...
@@ -36,6 +36,7 @@
#include "libavutil/internal.h"
#include "libavutil/opt.h"
#include "avcodec.h"
#include "me_cmp.h"
#include "put_bits.h"
#include "audiodsp.h"
#include "ac3dsp.h"
...
...
@@ -379,7 +380,7 @@ static void compute_exp_strategy(AC3EncodeContext *s)
exp_strategy
[
blk
]
=
EXP_NEW
;
continue
;
}
exp_diff
=
s
->
dsp
.
sad
[
0
](
NULL
,
exp
,
exp
-
AC3_MAX_COEFS
,
16
,
16
);
exp_diff
=
s
->
mecc
.
sad
[
0
](
NULL
,
exp
,
exp
-
AC3_MAX_COEFS
,
16
,
16
);
exp_strategy
[
blk
]
=
EXP_REUSE
;
if
(
ch
==
CPL_CH
&&
exp_diff
>
(
EXP_DIFF_THRESHOLD
*
(
s
->
blocks
[
blk
].
end_freq
[
ch
]
-
s
->
start_freq
[
ch
])
/
AC3_MAX_COEFS
))
exp_strategy
[
blk
]
=
EXP_NEW
;
...
...
@@ -2482,7 +2483,7 @@ av_cold int ff_ac3_encode_init(AVCodecContext *avctx)
goto
init_fail
;
ff_audiodsp_init
(
&
s
->
adsp
);
ff_
dsputil_init
(
&
s
->
dsp
,
avctx
);
ff_
me_cmp_init
(
&
s
->
mecc
,
avctx
);
ff_ac3dsp_init
(
&
s
->
ac3dsp
,
avctx
->
flags
&
CODEC_FLAG_BITEXACT
);
dprint_options
(
s
);
...
...
libavcodec/ac3enc.h
View file @
2d604443
...
...
@@ -35,9 +35,9 @@
#include "ac3.h"
#include "ac3dsp.h"
#include "avcodec.h"
#include "dsputil.h"
#include "fft.h"
#include "mathops.h"
#include "me_cmp.h"
#include "put_bits.h"
#include "audiodsp.h"
...
...
@@ -162,9 +162,9 @@ typedef struct AC3EncodeContext {
AC3EncOptions
options
;
///< encoding options
AVCodecContext
*
avctx
;
///< parent AVCodecContext
PutBitContext
pb
;
///< bitstream writer context
DSPContext
dsp
;
AudioDSPContext
adsp
;
AVFloatDSPContext
fdsp
;
MECmpContext
mecc
;
AC3DSPContext
ac3dsp
;
///< AC-3 optimized functions
FFTContext
mdct
;
///< FFT context for MDCT calculation
const
SampleType
*
mdct_window
;
///< MDCT window function array
...
...
libavcodec/arm/Makefile
View file @
2d604443
...
...
@@ -6,7 +6,6 @@ OBJS-$(CONFIG_AC3DSP) += arm/ac3dsp_init_arm.o \
arm/ac3dsp_arm.o
OBJS-$(CONFIG_AUDIODSP)
+=
arm/audiodsp_init_arm.o
OBJS-$(CONFIG_BLOCKDSP)
+=
arm/blockdsp_init_arm.o
OBJS-$(CONFIG_DSPUTIL)
+=
arm/dsputil_init_arm.o
OBJS-$(CONFIG_FFT)
+=
arm/fft_init_arm.o
\
arm/fft_fixed_init_arm.o
OBJS-$(CONFIG_H264CHROMA)
+=
arm/h264chroma_init_arm.o
...
...
@@ -19,6 +18,7 @@ OBJS-$(CONFIG_IDCTDSP) += arm/idctdsp_init_arm.o \
arm/idctdsp_arm.o
\
arm/jrevdct_arm.o
\
arm/simple_idct_arm.o
OBJS-$(CONFIG_ME_CMP)
+=
arm/me_cmp_init_arm.o
OBJS-$(CONFIG_MPEGAUDIODSP)
+=
arm/mpegaudiodsp_init_arm.o
OBJS-$(CONFIG_MPEGVIDEO)
+=
arm/mpegvideo_arm.o
OBJS-$(CONFIG_MPEGVIDEOENC)
+=
arm/mpegvideoencdsp_init_arm.o
...
...
@@ -53,13 +53,13 @@ ARMV5TE-OBJS-$(CONFIG_VIDEODSP) += arm/videodsp_init_armv5te.o \
ARMV5TE-OBJS-$(CONFIG_MLP_DECODER)
+=
arm/mlpdsp_armv5te.o
ARMV6-OBJS-$(CONFIG_AC3DSP)
+=
arm/ac3dsp_armv6.o
ARMV6-OBJS-$(CONFIG_DSPUTIL)
+=
arm/dsputil_armv6.o
ARMV6-OBJS-$(CONFIG_H264DSP)
+=
arm/h264dsp_armv6.o
ARMV6-OBJS-$(CONFIG_HPELDSP)
+=
arm/hpeldsp_init_armv6.o
\
arm/hpeldsp_armv6.o
ARMV6-OBJS-$(CONFIG_IDCTDSP)
+=
arm/idctdsp_init_armv6.o
\
arm/idctdsp_armv6.o
\
arm/simple_idct_armv6.o
ARMV6-OBJS-$(CONFIG_ME_CMP)
+=
arm/me_cmp_armv6.o
ARMV6-OBJS-$(CONFIG_MPEGAUDIODSP)
+=
arm/mpegaudiodsp_fixed_armv6.o
ARMV6-OBJS-$(CONFIG_MPEGVIDEOENC)
+=
arm/mpegvideoencdsp_armv6.o
ARMV6-OBJS-$(CONFIG_PIXBLOCKDSP)
+=
arm/pixblockdsp_armv6.o
...
...
libavcodec/arm/
dsputil
_armv6.S
→
libavcodec/arm/
me_cmp
_armv6.S
View file @
2d604443
File moved
libavcodec/arm/
dsputil
_init_arm.c
→
libavcodec/arm/
me_cmp
_init_arm.c
View file @
2d604443
...
...
@@ -22,7 +22,7 @@
#include "libavutil/cpu.h"
#include "libavutil/arm/cpu.h"
#include "libavcodec/avcodec.h"
#include "libavcodec/
dsputil
.h"
#include "libavcodec/
me_cmp
.h"
#include "libavcodec/mpegvideo.h"
int
ff_pix_abs16_armv6
(
MpegEncContext
*
s
,
uint8_t
*
blk1
,
uint8_t
*
blk2
,
...
...
@@ -38,8 +38,7 @@ int ff_pix_abs8_armv6(MpegEncContext *s, uint8_t *blk1, uint8_t *blk2,
int
ff_sse16_armv6
(
MpegEncContext
*
s
,
uint8_t
*
blk1
,
uint8_t
*
blk2
,
int
line_size
,
int
h
);
av_cold
void
ff_dsputil_init_arm
(
DSPContext
*
c
,
AVCodecContext
*
avctx
)
av_cold
void
ff_me_cmp_init_arm
(
MECmpContext
*
c
,
AVCodecContext
*
avctx
)
{
int
cpu_flags
=
av_get_cpu_flags
();
...
...
libavcodec/dv.h
View file @
2d604443
...
...
@@ -28,7 +28,7 @@
#define AVCODEC_DV_H
#include "avcodec.h"
#include "
dsputil
.h"
#include "
me_cmp
.h"
#include "get_bits.h"
#include "dv_profile.h"
...
...
libavcodec/dvenc.c
View file @
2d604443
...
...
@@ -28,9 +28,9 @@
#include "libavutil/pixdesc.h"
#include "config.h"
#include "avcodec.h"
#include "dsputil.h"
#include "fdctdsp.h"
#include "internal.h"
#include "me_cmp.h"
#include "pixblockdsp.h"
#include "put_bits.h"
#include "dv.h"
...
...
@@ -40,8 +40,8 @@
static
av_cold
int
dvvideo_encode_init
(
AVCodecContext
*
avctx
)
{
DVVideoContext
*
s
=
avctx
->
priv_data
;
DSPContext
dsp
;
FDCTDSPContext
fdsp
;
MECmpContext
mecc
;
PixblockDSPContext
pdsp
;
int
ret
;
...
...
@@ -65,13 +65,13 @@ static av_cold int dvvideo_encode_init(AVCodecContext *avctx)
dv_vlc_map_tableinit
();
ff_dsputil_init
(
&
dsp
,
avctx
);
ff_fdctdsp_init
(
&
fdsp
,
avctx
);
ff_me_cmp_init
(
&
mecc
,
avctx
);
ff_pixblockdsp_init
(
&
pdsp
,
avctx
);
ff_set_cmp
(
&
dsp
,
dsp
.
ildct_cmp
,
avctx
->
ildct_cmp
);
ff_set_cmp
(
&
mecc
,
mecc
.
ildct_cmp
,
avctx
->
ildct_cmp
);
s
->
get_pixels
=
pdsp
.
get_pixels
;
s
->
ildct_cmp
=
dsp
.
ildct_cmp
[
5
];
s
->
ildct_cmp
=
mecc
.
ildct_cmp
[
5
];
s
->
fdct
[
0
]
=
fdsp
.
fdct
;
s
->
fdct
[
1
]
=
fdsp
.
fdct248
;
...
...
libavcodec/error_resilience.c
View file @
2d604443
...
...
@@ -715,11 +715,11 @@ FF_ENABLE_DEPRECATION_WARNINGS
}
else
{
ff_thread_await_progress
(
s
->
last_pic
.
tf
,
mb_y
,
0
);
}
is_intra_likely
+=
s
->
dsp
->
sad
[
0
](
NULL
,
last_mb_ptr
,
mb_ptr
,
linesize
[
0
],
16
);
is_intra_likely
-=
s
->
dsp
->
sad
[
0
](
NULL
,
last_mb_ptr
,
last_mb_ptr
+
linesize
[
0
]
*
16
,
linesize
[
0
],
16
);
is_intra_likely
+=
s
->
mecc
->
sad
[
0
](
NULL
,
last_mb_ptr
,
mb_ptr
,
linesize
[
0
],
16
);
is_intra_likely
-=
s
->
mecc
->
sad
[
0
](
NULL
,
last_mb_ptr
,
last_mb_ptr
+
linesize
[
0
]
*
16
,
linesize
[
0
],
16
);
}
else
{
if
(
IS_INTRA
(
s
->
cur_pic
.
mb_type
[
mb_xy
]))
is_intra_likely
++
;
...
...
libavcodec/error_resilience.h
View file @
2d604443
...
...
@@ -23,7 +23,7 @@
#include <stdint.h>
#include "avcodec.h"
#include "
dsputil
.h"
#include "
me_cmp
.h"
#include "thread.h"
///< current MB is the first after a resync marker
...
...
@@ -52,7 +52,7 @@ typedef struct ERPicture {
typedef
struct
ERContext
{
AVCodecContext
*
avctx
;
DSPContext
*
dsp
;
MECmpContext
*
mecc
;
int
*
mb_index2xy
;
int
mb_num
;
...
...
libavcodec/h264.c
View file @
2d604443
...
...
@@ -33,7 +33,6 @@
#include "internal.h"
#include "cabac.h"
#include "cabac_functions.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "avcodec.h"
#include "h264.h"
...
...
@@ -42,6 +41,7 @@
#include "h264_mvpred.h"
#include "golomb.h"
#include "mathops.h"
#include "me_cmp.h"
#include "mpegutils.h"
#include "rectangle.h"
#include "svq3.h"
...
...
@@ -490,7 +490,7 @@ int ff_h264_context_init(H264Context *h)
if
(
CONFIG_ERROR_RESILIENCE
)
{
/* init ER */
er
->
avctx
=
h
->
avctx
;
er
->
dsp
=
&
h
->
dsp
;
er
->
mecc
=
&
h
->
mecc
;
er
->
decode_mb
=
h264_er_decode_mb
;
er
->
opaque
=
h
;
er
->
quarter_sample
=
1
;
...
...
@@ -620,7 +620,7 @@ av_cold int ff_h264_decode_init(AVCodecContext *avctx)
/* needed so that IDCT permutation is known early */
if
(
CONFIG_ERROR_RESILIENCE
)
ff_
dsputil_init
(
&
h
->
dsp
,
h
->
avctx
);
ff_
me_cmp_init
(
&
h
->
mecc
,
h
->
avctx
);
ff_videodsp_init
(
&
h
->
vdsp
,
8
);
memset
(
h
->
pps
.
scaling_matrix4
,
16
,
6
*
16
*
sizeof
(
uint8_t
));
...
...
@@ -1234,7 +1234,7 @@ int ff_h264_set_parameter_from_sps(H264Context *h)
ff_h264_pred_init
(
&
h
->
hpc
,
h
->
avctx
->
codec_id
,
h
->
sps
.
bit_depth_luma
,
h
->
sps
.
chroma_format_idc
);
if
(
CONFIG_ERROR_RESILIENCE
)
ff_
dsputil_init
(
&
h
->
dsp
,
h
->
avctx
);
ff_
me_cmp_init
(
&
h
->
mecc
,
h
->
avctx
);
ff_videodsp_init
(
&
h
->
vdsp
,
h
->
sps
.
bit_depth_luma
);
}
else
{
av_log
(
h
->
avctx
,
AV_LOG_ERROR
,
"Unsupported bit depth %d
\n
"
,
...
...
libavcodec/h264.h
View file @
2d604443
...
...
@@ -30,13 +30,13 @@
#include "libavutil/intreadwrite.h"
#include "cabac.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "get_bits.h"
#include "h264chroma.h"
#include "h264dsp.h"
#include "h264pred.h"
#include "h264qpel.h"
#include "me_cmp.h"
#include "mpegutils.h"
#include "parser.h"
#include "qpeldsp.h"
...
...
@@ -302,7 +302,7 @@ typedef struct H264Picture {
*/
typedef
struct
H264Context
{
AVCodecContext
*
avctx
;
DSPContext
dsp
;
MECmpContext
mecc
;
VideoDSPContext
vdsp
;
H264DSPContext
h264dsp
;
H264ChromaContext
h264chroma
;
...
...
libavcodec/h264_slice.c
View file @
2d604443
...
...
@@ -31,7 +31,6 @@
#include "internal.h"
#include "cabac.h"
#include "cabac_functions.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "avcodec.h"
#include "h264.h"
...
...
@@ -1119,7 +1118,7 @@ static int h264_slice_header_init(H264Context *h, int reinit)
if
(
!
c
)
return
AVERROR
(
ENOMEM
);
c
->
avctx
=
h
->
avctx
;
c
->
dsp
=
h
->
dsp
;
c
->
mecc
=
h
->
mecc
;
c
->
vdsp
=
h
->
vdsp
;
c
->
h264dsp
=
h
->
h264dsp
;
c
->
h264qpel
=
h
->
h264qpel
;
...
...
libavcodec/
dsputil
.c
→
libavcodec/
me_cmp
.c
View file @
2d604443
/*
* DSP utils
* Copyright (c) 2000, 2001 Fabrice Bellard
* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
...
...
@@ -20,16 +16,11 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* DSP utils
*/
#include "libavutil/attributes.h"
#include "avcodec.h"
#include "copy_block.h"
#include "dsputil.h"
#include "simple_idct.h"
#include "me_cmp.h"
#include "mpegvideo.h"
#include "config.h"
...
...
@@ -369,7 +360,7 @@ static int zero_cmp(MpegEncContext *s, uint8_t *a, uint8_t *b,
return
0
;
}
void
ff_set_cmp
(
DSP
Context
*
c
,
me_cmp_func
*
cmp
,
int
type
)
void
ff_set_cmp
(
MECmp
Context
*
c
,
me_cmp_func
*
cmp
,
int
type
)
{
int
i
;
...
...
@@ -551,7 +542,7 @@ static int dct_sad8x8_c(MpegEncContext *s, uint8_t *src1,
s
->
pdsp
.
diff_pixels
(
temp
,
src1
,
src2
,
stride
);
s
->
fdsp
.
fdct
(
temp
);
return
s
->
dsp
.
sum_abs_dctelem
(
temp
);
return
s
->
mecc
.
sum_abs_dctelem
(
temp
);
}
#if CONFIG_GPL
...
...
@@ -722,7 +713,7 @@ static int rd8x8_c(MpegEncContext *s, uint8_t *src1, uint8_t *src2,
s
->
idsp
.
idct_add
(
lsrc2
,
8
,
temp
);
distortion
=
s
->
dsp
.
sse
[
1
](
NULL
,
lsrc2
,
lsrc1
,
8
,
8
);
distortion
=
s
->
mecc
.
sse
[
1
](
NULL
,
lsrc2
,
lsrc1
,
8
,
8
);
return
distortion
+
((
bits
*
s
->
qscale
*
s
->
qscale
*
109
+
64
)
>>
7
);
}
...
...
@@ -891,8 +882,7 @@ WRAPPER8_16_SQ(quant_psnr8x8_c, quant_psnr16_c)
WRAPPER8_16_SQ
(
rd8x8_c
,
rd16_c
)
WRAPPER8_16_SQ
(
bit8x8_c
,
bit16_c
)
/* init static data */
av_cold
void
ff_dsputil_static_init
(
void
)
av_cold
void
ff_me_cmp_init_static
(
void
)
{
int
i
;
...
...
@@ -900,7 +890,7 @@ av_cold void ff_dsputil_static_init(void)
ff_square_tab
[
i
]
=
(
i
-
256
)
*
(
i
-
256
);
}
av_cold
void
ff_
dsputil_init
(
DSP
Context
*
c
,
AVCodecContext
*
avctx
)
av_cold
void
ff_
me_cmp_init
(
MECmp
Context
*
c
,
AVCodecContext
*
avctx
)
{
c
->
sum_abs_dctelem
=
sum_abs_dctelem_c
;
...
...
@@ -944,9 +934,9 @@ av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
c
->
nsse
[
1
]
=
nsse8_c
;
if
(
ARCH_ARM
)
ff_
dsputil
_init_arm
(
c
,
avctx
);
ff_
me_cmp
_init_arm
(
c
,
avctx
);
if
(
ARCH_PPC
)
ff_
dsputil
_init_ppc
(
c
,
avctx
);
ff_
me_cmp
_init_ppc
(
c
,
avctx
);
if
(
ARCH_X86
)
ff_
dsputil
_init_x86
(
c
,
avctx
);
ff_
me_cmp
_init_x86
(
c
,
avctx
);
}
libavcodec/
dsputil
.h
→
libavcodec/
me_cmp
.h
View file @
2d604443
/*
* DSP utils
* Copyright (c) 2000, 2001, 2002 Fabrice Bellard
* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
*
* This file is part of Libav.
*
* Libav is free software; you can redistribute it and/or
...
...
@@ -20,15 +16,10 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/**
* @file
* DSP utils.
* Note, many functions in here may use MMX which trashes the FPU state, it is
* absolutely necessary to call emms_c() between DSP & float/double code.
*/
#ifndef AVCODEC_ME_CMP_H
#define AVCODEC_ME_CMP_H
#ifndef AVCODEC_DSPUTIL_H
#define AVCODEC_DSPUTIL_H
#include <stdint.h>
#include "avcodec.h"
...
...
@@ -44,10 +35,7 @@ typedef int (*me_cmp_func)(struct MpegEncContext *c,
uint8_t
*
blk1
/* align width (8 or 16) */
,
uint8_t
*
blk2
/* align 1 */
,
int
line_size
,
int
h
);
/**
* DSPContext.
*/
typedef
struct
DSPContext
{
typedef
struct
MECmpContext
{
int
(
*
sum_abs_dctelem
)(
int16_t
*
block
/* align 16 */
);
me_cmp_func
sad
[
6
];
/* identical to pix_absAxA except additional void * */
...
...
@@ -71,15 +59,15 @@ typedef struct DSPContext {
me_cmp_func
frame_skip_cmp
[
6
];
// only width 8 used
me_cmp_func
pix_abs
[
2
][
4
];
}
DSP
Context
;
}
MECmp
Context
;
void
ff_dsputil_static_init
(
void
);
void
ff_dsputil_init
(
DSPContext
*
p
,
AVCodecContext
*
avctx
);
void
ff_me_cmp_init_static
(
void
);
void
ff_set_cmp
(
DSPContext
*
c
,
me_cmp_func
*
cmp
,
int
type
);
void
ff_me_cmp_init
(
MECmpContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_me_cmp_init_arm
(
MECmpContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_me_cmp_init_ppc
(
MECmpContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_me_cmp_init_x86
(
MECmpContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_dsputil_init_arm
(
DSPContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_dsputil_init_ppc
(
DSPContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_dsputil_init_x86
(
DSPContext
*
c
,
AVCodecContext
*
avctx
);
void
ff_set_cmp
(
MECmpContext
*
c
,
me_cmp_func
*
cmp
,
int
type
);
#endif
/* AVCODEC_
DSPUTIL
_H */
#endif
/* AVCODEC_
ME_CMP
_H */
libavcodec/motion_est.c
View file @
2d604443
...
...
@@ -317,10 +317,10 @@ int ff_init_me(MpegEncContext *s){
av_log
(
s
->
avctx
,
AV_LOG_INFO
,
"ME_MAP size may be a little small for the selected diamond size
\n
"
);
}
ff_set_cmp
(
&
s
->
dsp
,
s
->
dsp
.
me_pre_cmp
,
c
->
avctx
->
me_pre_cmp
);
ff_set_cmp
(
&
s
->
dsp
,
s
->
dsp
.
me_cmp
,
c
->
avctx
->
me_cmp
);
ff_set_cmp
(
&
s
->
dsp
,
s
->
dsp
.
me_sub_cmp
,
c
->
avctx
->
me_sub_cmp
);
ff_set_cmp
(
&
s
->
dsp
,
s
->
dsp
.
mb_cmp
,
c
->
avctx
->
mb_cmp
);
ff_set_cmp
(
&
s
->
mecc
,
s
->
mecc
.
me_pre_cmp
,
c
->
avctx
->
me_pre_cmp
);
ff_set_cmp
(
&
s
->
mecc
,
s
->
mecc
.
me_cmp
,
c
->
avctx
->
me_cmp
);
ff_set_cmp
(
&
s
->
mecc
,
s
->
mecc
.
me_sub_cmp
,
c
->
avctx
->
me_sub_cmp
);
ff_set_cmp
(
&
s
->
mecc
,
s
->
mecc
.
mb_cmp
,
c
->
avctx
->
mb_cmp
);
c
->
flags
=
get_flags
(
c
,
0
,
c
->
avctx
->
me_cmp
&
FF_CMP_CHROMA
);
c
->
sub_flags
=
get_flags
(
c
,
0
,
c
->
avctx
->
me_sub_cmp
&
FF_CMP_CHROMA
);
...
...
@@ -361,12 +361,10 @@ int ff_init_me(MpegEncContext *s){
/* 8x8 fullpel search would need a 4x4 chroma compare, which we do
* not have yet, and even if we had, the motion estimation code
* does not expect it. */
if
((
c
->
avctx
->
me_cmp
&
FF_CMP_CHROMA
)
/* && !s->dsp.me_cmp[2]*/
){
s
->
dsp
.
me_cmp
[
2
]
=
zero_cmp
;
}
if
((
c
->
avctx
->
me_sub_cmp
&
FF_CMP_CHROMA
)
&&
!
s
->
dsp
.
me_sub_cmp
[
2
]){
s
->
dsp
.
me_sub_cmp
[
2
]
=
zero_cmp
;
}
if
((
c
->
avctx
->
me_cmp
&
FF_CMP_CHROMA
)
/* && !s->mecc.me_cmp[2] */
)
s
->
mecc
.
me_cmp
[
2
]
=
zero_cmp
;
if
((
c
->
avctx
->
me_sub_cmp
&
FF_CMP_CHROMA
)
&&
!
s
->
mecc
.
me_sub_cmp
[
2
])
s
->
mecc
.
me_sub_cmp
[
2
]
=
zero_cmp
;
c
->
hpel_put
[
2
][
0
]
=
c
->
hpel_put
[
2
][
1
]
=
c
->
hpel_put
[
2
][
2
]
=
c
->
hpel_put
[
2
][
3
]
=
zero_hpel
;
...
...
@@ -379,7 +377,7 @@ int ff_init_me(MpegEncContext *s){
#define CHECK_SAD_HALF_MV(suffix, x, y) \
{\
d
= s->dsp.pix_abs[size][(x?1:0)+(y?2:0)](NULL, pix, ptr+((x)>>1), stride, h);
\
d
= s->mecc.pix_abs[size][(x ? 1 : 0) + (y ? 2 : 0)](NULL, pix, ptr + ((x) >> 1), stride, h);
\
d += (mv_penalty[pen_x + x] + mv_penalty[pen_y + y])*penalty_factor;\
COPY3_IF_LT(dminh, d, dx, x, dy, y)\
}
...
...
@@ -615,7 +613,7 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
dmin4
=
c
->
sub_motion_search
(
s
,
&
mx4
,
&
my4
,
dmin4
,
block
,
block
,
size
,
h
);
if
(
s
->
dsp
.
me_sub_cmp
[
0
]
!=
s
->
dsp
.
mb_cmp
[
0
])
{
if
(
s
->
mecc
.
me_sub_cmp
[
0
]
!=
s
->
mecc
.
mb_cmp
[
0
])
{
int
dxy
;
const
int
offset
=
((
block
&
1
)
+
(
block
>>
1
)
*
stride
)
*
8
;
uint8_t
*
dest_y
=
c
->
scratchpad
+
offset
;
...
...
@@ -657,8 +655,11 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
if
(
same
)
return
INT_MAX
;
if
(
s
->
dsp
.
me_sub_cmp
[
0
]
!=
s
->
dsp
.
mb_cmp
[
0
]){
dmin_sum
+=
s
->
dsp
.
mb_cmp
[
0
](
s
,
s
->
new_picture
.
f
->
data
[
0
]
+
s
->
mb_x
*
16
+
s
->
mb_y
*
16
*
stride
,
c
->
scratchpad
,
stride
,
16
);
if
(
s
->
mecc
.
me_sub_cmp
[
0
]
!=
s
->
mecc
.
mb_cmp
[
0
])
{
dmin_sum
+=
s
->
mecc
.
mb_cmp
[
0
](
s
,
s
->
new_picture
.
f
->
data
[
0
]
+
s
->
mb_x
*
16
+
s
->
mb_y
*
16
*
stride
,
c
->
scratchpad
,
stride
,
16
);
}
if
(
c
->
avctx
->
mb_cmp
&
FF_CMP_CHROMA
){
...
...
@@ -680,8 +681,8 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift)
s
->
hdsp
.
put_pixels_tab
[
1
][
dxy
](
c
->
scratchpad
+
8
,
s
->
last_picture
.
f
->
data
[
2
]
+
offset
,
s
->
uvlinesize
,
8
);
}
dmin_sum
+=
s
->
dsp
.
mb_cmp
[
1
](
s
,
s
->
new_picture
.
f
->
data
[
1
]
+
s
->
mb_x
*
8
+
s
->
mb_y
*
8
*
s
->
uvlinesize
,
c
->
scratchpad
,
s
->
uvlinesize
,
8
);
dmin_sum
+=
s
->
dsp
.
mb_cmp
[
1
](
s
,
s
->
new_picture
.
f
->
data
[
2
]
+
s
->
mb_x
*
8
+
s
->
mb_y
*
8
*
s
->
uvlinesize
,
c
->
scratchpad
+
8
,
s
->
uvlinesize
,
8
);
dmin_sum
+=
s
->
mecc
.
mb_cmp
[
1
](
s
,
s
->
new_picture
.
f
->
data
[
1
]
+
s
->
mb_x
*
8
+
s
->
mb_y
*
8
*
s
->
uvlinesize
,
c
->
scratchpad
,
s
->
uvlinesize
,
8
);
dmin_sum
+=
s
->
mecc
.
mb_cmp
[
1
](
s
,
s
->
new_picture
.
f
->
data
[
2
]
+
s
->
mb_x
*
8
+
s
->
mb_y
*
8
*
s
->
uvlinesize
,
c
->
scratchpad
+
8
,
s
->
uvlinesize
,
8
);
}
c
->
pred_x
=
mx
;
...
...
@@ -777,7 +778,7 @@ static int interlaced_search(MpegEncContext *s, int ref_index,
mv_table
[
xy
][
0
]
=
mx_i
;
mv_table
[
xy
][
1
]
=
my_i
;
if
(
s
->
dsp
.
me_sub_cmp
[
0
]
!=
s
->
dsp
.
mb_cmp
[
0
])
{
if
(
s
->
mecc
.
me_sub_cmp
[
0
]
!=
s
->
mecc
.
mb_cmp
[
0
])
{
int
dxy
;
//FIXME chroma ME
...
...
@@ -789,7 +790,7 @@ static int interlaced_search(MpegEncContext *s, int ref_index,
}
else
{
s
->
hdsp
.
put_pixels_tab
[
size
][
dxy
](
c
->
scratchpad
,
ref
,
stride
,
h
);
}
dmin
=
s
->
dsp
.
mb_cmp
[
size
](
s
,
c
->
src
[
block
][
0
],
c
->
scratchpad
,
stride
,
h
);
dmin
=
s
->
mecc
.
mb_cmp
[
size
](
s
,
c
->
src
[
block
][
0
],
c
->
scratchpad
,
stride
,
h
);
dmin
+=
(
mv_penalty
[
mx_i
-
c
->
pred_x
]
+
mv_penalty
[
my_i
-
c
->
pred_y
]
+
1
)
*
c
->
mb_penalty_factor
;
}
else
dmin
+=
c
->
mb_penalty_factor
;
//field_select bits
...
...
@@ -940,7 +941,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s,
/* At this point (mx,my) are full-pell and the relative displacement */
ppix
=
c
->
ref
[
0
][
0
]
+
(
my
*
s
->
linesize
)
+
mx
;
vard
=
s
->
dsp
.
sse
[
0
](
NULL
,
pix
,
ppix
,
s
->
linesize
,
16
);
vard
=
s
->
mecc
.
sse
[
0
](
NULL
,
pix
,
ppix
,
s
->
linesize
,
16
);
pic
->
mc_mb_var
[
s
->
mb_stride
*
mb_y
+
mb_x
]
=
(
vard
+
128
)
>>
8
;
c
->
mc_mb_var_sum_temp
+=
(
vard
+
128
)
>>
8
;
...
...
@@ -1037,7 +1038,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s,
*
(
uint32_t
*
)(
&
c
->
scratchpad
[
i
*
s
->
linesize
+
12
])
=
mean
;
}
intra_score
=
s
->
dsp
.
mb_cmp
[
0
](
s
,
c
->
scratchpad
,
pix
,
s
->
linesize
,
16
);
intra_score
=
s
->
mecc
.
mb_cmp
[
0
](
s
,
c
->
scratchpad
,
pix
,
s
->
linesize
,
16
);
}
intra_score
+=
c
->
mb_penalty_factor
*
16
;
...
...
@@ -1237,7 +1238,7 @@ static inline int check_bidir_mv(MpegEncContext * s,
fbmin
=
(
mv_penalty_f
[
motion_fx
-
pred_fx
]
+
mv_penalty_f
[
motion_fy
-
pred_fy
])
*
c
->
mb_penalty_factor
+
(
mv_penalty_b
[
motion_bx
-
pred_bx
]
+
mv_penalty_b
[
motion_by
-
pred_by
])
*
c
->
mb_penalty_factor
+
s
->
dsp
.
mb_cmp
[
size
](
s
,
src_data
[
0
],
dest_y
,
stride
,
h
);
//
FIXME new_pic
+
s
->
mecc
.
mb_cmp
[
size
](
s
,
src_data
[
0
],
dest_y
,
stride
,
h
);
//
FIXME new_pic
if
(
c
->
avctx
->
mb_cmp
&
FF_CMP_CHROMA
){
}
...
...
libavcodec/motion_est_template.c
View file @
2d604443
...
...
@@ -63,8 +63,8 @@ static int hpel_motion_search(MpegEncContext * s,
//FIXME factorize
cmp_sub
=
s
->
dsp
.
me_sub_cmp
[
size
];
chroma_cmp_sub
=
s
->
dsp
.
me_sub_cmp
[
size
+
1
];
cmp_sub
=
s
->
mecc
.
me_sub_cmp
[
size
];
chroma_cmp_sub
=
s
->
mecc
.
me_sub_cmp
[
size
+
1
];
if
(
c
->
skip
){
//FIXME move out of hpel?
*
mx_ptr
=
0
;
...
...
@@ -166,7 +166,6 @@ static inline int get_mb_score(MpegEncContext *s, int mx, int my,
int
src_index
,
int
ref_index
,
int
size
,
int
h
,
int
add_rate
)
{
// const int check_luma= s->dsp.me_sub_cmp != s->dsp.mb_cmp;
MotionEstContext
*
const
c
=
&
s
->
me
;
const
int
penalty_factor
=
c
->
mb_penalty_factor
;
const
int
flags
=
c
->
mb_flags
;
...
...
@@ -179,8 +178,8 @@ static inline int get_mb_score(MpegEncContext *s, int mx, int my,
//FIXME factorize
cmp_sub
=
s
->
dsp
.
mb_cmp
[
size
];
chroma_cmp_sub
=
s
->
dsp
.
mb_cmp
[
size
+
1
];
cmp_sub
=
s
->
mecc
.
mb_cmp
[
size
];
chroma_cmp_sub
=
s
->
mecc
.
mb_cmp
[
size
+
1
];
// assert(!c->skip);
// assert(c->avctx->me_sub_cmp != c->avctx->mb_cmp);
...
...
@@ -226,12 +225,12 @@ static int qpel_motion_search(MpegEncContext * s,
LOAD_COMMON
int
flags
=
c
->
sub_flags
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
//factorize FIXME
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
// FIXME: factorize
//FIXME factorize
cmp_sub
=
s
->
dsp
.
me_sub_cmp
[
size
];
chroma_cmp_sub
=
s
->
dsp
.
me_sub_cmp
[
size
+
1
];
cmp_sub
=
s
->
mecc
.
me_sub_cmp
[
size
];
chroma_cmp_sub
=
s
->
mecc
.
me_sub_cmp
[
size
+
1
];
if
(
c
->
skip
){
//FIXME somehow move up (benchmark)
*
mx_ptr
=
0
;
...
...
@@ -427,8 +426,8 @@ static av_always_inline int small_diamond_search(MpegEncContext * s, int *best,
LOAD_COMMON2
unsigned
map_generation
=
c
->
map_generation
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
{
/* ensure that the best point is in the MAP as h/qpel refinement needs it */
const
unsigned
key
=
(
best
[
1
]
<<
ME_MAP_MV_BITS
)
+
best
[
0
]
+
map_generation
;
...
...
@@ -468,8 +467,8 @@ static int funny_diamond_search(MpegEncContext * s, int *best, int dmin,
LOAD_COMMON2
unsigned
map_generation
=
c
->
map_generation
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
for
(
dia_size
=
1
;
dia_size
<=
4
;
dia_size
++
){
int
dir
;
...
...
@@ -511,8 +510,8 @@ static int hex_search(MpegEncContext * s, int *best, int dmin,
int
x
,
y
,
d
;
const
int
dec
=
dia_size
&
(
dia_size
-
1
);
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
for
(;
dia_size
;
dia_size
=
dec
?
dia_size
-
1
:
dia_size
>>
1
){
do
{
...
...
@@ -548,8 +547,8 @@ static int l2s_dia_search(MpegEncContext * s, int *best, int dmin,
static
const
int
hex
[
8
][
2
]
=
{{
-
2
,
0
},
{
-
1
,
-
1
},
{
0
,
-
2
},
{
1
,
-
1
},
{
2
,
0
},
{
1
,
1
},
{
0
,
2
},
{
-
1
,
1
}};
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
for
(;
dia_size
;
dia_size
=
dec
?
dia_size
-
1
:
dia_size
>>
1
){
do
{
...
...
@@ -587,8 +586,8 @@ static int umh_search(MpegEncContext * s, int *best, int dmin,
{
-
2
,
3
},
{
0
,
4
},
{
2
,
3
},
{
-
2
,
-
3
},
{
0
,
-
4
},
{
2
,
-
3
},};
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
x
=
best
[
0
];
y
=
best
[
1
];
...
...
@@ -630,8 +629,8 @@ static int full_search(MpegEncContext * s, int *best, int dmin,
int
x
,
y
,
d
;
const
int
dia_size
=
c
->
dia_size
&
0xFF
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
for
(
y
=
FFMAX
(
-
dia_size
,
ymin
);
y
<=
FFMIN
(
dia_size
,
ymax
);
y
++
){
for
(
x
=
FFMAX
(
-
dia_size
,
xmin
);
x
<=
FFMIN
(
dia_size
,
xmax
);
x
++
){
...
...
@@ -694,8 +693,8 @@ static int sab_diamond_search(MpegEncContext * s, int *best, int dmin,
LOAD_COMMON2
unsigned
map_generation
=
c
->
map_generation
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
/*Note j<MAX_SAB_SIZE is needed if MAX_SAB_SIZE < ME_MAP_SIZE as j can
become larger due to MVs overflowing their ME_MAP_MV_BITS bits space in map
...
...
@@ -779,8 +778,8 @@ static int var_diamond_search(MpegEncContext * s, int *best, int dmin,
LOAD_COMMON2
unsigned
map_generation
=
c
->
map_generation
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
for
(
dia_size
=
1
;
dia_size
<=
c
->
dia_size
;
dia_size
++
){
int
dir
,
start
,
end
;
...
...
@@ -880,12 +879,12 @@ static av_always_inline int epzs_motion_search_internal(MpegEncContext * s, int
if
(
c
->
pre_pass
){
penalty_factor
=
c
->
pre_penalty_factor
;
cmpf
=
s
->
dsp
.
me_pre_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_pre_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_pre_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_pre_cmp
[
size
+
1
];
}
else
{
penalty_factor
=
c
->
penalty_factor
;
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
}
map_generation
=
update_map_generation
(
c
);
...
...
@@ -1009,8 +1008,8 @@ static int epzs_motion_search4(MpegEncContext * s,
int
flags
=
c
->
flags
;
LOAD_COMMON2
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
map_generation
=
update_map_generation
(
c
);
...
...
@@ -1068,8 +1067,8 @@ static int epzs_motion_search2(MpegEncContext * s,
int
flags
=
c
->
flags
;
LOAD_COMMON2
cmpf
=
s
->
dsp
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
dsp
.
me_cmp
[
size
+
1
];
cmpf
=
s
->
mecc
.
me_cmp
[
size
];
chroma_cmpf
=
s
->
mecc
.
me_cmp
[
size
+
1
];
map_generation
=
update_map_generation
(
c
);
...
...
libavcodec/mpeg4videoenc.c
View file @
2d604443
...
...
@@ -689,7 +689,7 @@ void ff_mpeg4_encode_mb(MpegEncContext *s, int16_t block[6][64],
b_pic
=
pic
->
f
->
data
[
0
]
+
offset
;
if
(
!
pic
->
shared
)
b_pic
+=
INPLACE_OFFSET
;
diff
=
s
->
dsp
.
sad
[
0
](
NULL
,
p_pic
,
b_pic
,
s
->
linesize
,
16
);
diff
=
s
->
mecc
.
sad
[
0
](
NULL
,
p_pic
,
b_pic
,
s
->
linesize
,
16
);
if
(
diff
>
s
->
qscale
*
70
)
{
// FIXME check that 70 is optimal
s
->
mb_skipped
=
0
;
break
;
...
...
libavcodec/mpegvideo.c
View file @
2d604443
...
...
@@ -378,9 +378,9 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
av_cold
int
ff_dct_common_init
(
MpegEncContext
*
s
)
{
ff_blockdsp_init
(
&
s
->
bdsp
,
s
->
avctx
);
ff_dsputil_init
(
&
s
->
dsp
,
s
->
avctx
);
ff_hpeldsp_init
(
&
s
->
hdsp
,
s
->
avctx
->
flags
);
ff_idctdsp_init
(
&
s
->
idsp
,
s
->
avctx
);
ff_me_cmp_init
(
&
s
->
mecc
,
s
->
avctx
);
ff_mpegvideodsp_init
(
&
s
->
mdsp
);
ff_videodsp_init
(
&
s
->
vdsp
,
s
->
avctx
->
bits_per_raw_sample
);
...
...
@@ -1051,7 +1051,7 @@ static int init_er(MpegEncContext *s)
int
i
;
er
->
avctx
=
s
->
avctx
;
er
->
dsp
=
&
s
->
dsp
;
er
->
mecc
=
&
s
->
mecc
;
er
->
mb_index2xy
=
s
->
mb_index2xy
;
er
->
mb_num
=
s
->
mb_num
;
...
...
libavcodec/mpegvideo.h
View file @
2d604443
...
...
@@ -30,13 +30,13 @@
#include "avcodec.h"
#include "blockdsp.h"
#include "dsputil.h"
#include "error_resilience.h"
#include "fdctdsp.h"
#include "get_bits.h"
#include "h263dsp.h"
#include "hpeldsp.h"
#include "idctdsp.h"
#include "me_cmp.h"
#include "mpegvideodsp.h"
#include "mpegvideoencdsp.h"
#include "pixblockdsp.h"
...
...
@@ -356,10 +356,10 @@ typedef struct MpegEncContext {
int
h263_long_vectors
;
///< use horrible h263v1 long vector mode
BlockDSPContext
bdsp
;
DSPContext
dsp
;
///< pointers for accelerated dsp functions
FDCTDSPContext
fdsp
;
HpelDSPContext
hdsp
;
IDCTDSPContext
idsp
;
MECmpContext
mecc
;
MpegVideoDSPContext
mdsp
;
MpegvideoEncDSPContext
mpvencdsp
;
PixblockDSPContext
pdsp
;
...
...
libavcodec/mpegvideo_enc.c
View file @
2d604443
This diff is collapsed.
Click to expand it.
libavcodec/mpegvideoencdsp.c
View file @
2d604443
...
...
@@ -24,8 +24,8 @@
#include "libavutil/attributes.h"
#include "libavutil/imgutils.h"
#include "avcodec.h"
#include "dsputil.h"
#include "imgconvert.h"
#include "me_cmp.h"
#include "mpegvideoencdsp.h"
static
int
try_8x8basis_c
(
int16_t
rem
[
64
],
int16_t
weight
[
64
],
...
...
libavcodec/ppc/Makefile
View file @
2d604443
...
...
@@ -2,7 +2,6 @@ OBJS += ppc/fmtconvert_altivec.o \
OBJS-$(CONFIG_AUDIODSP)
+=
ppc/audiodsp.o
OBJS-$(CONFIG_BLOCKDSP)
+=
ppc/blockdsp.o
OBJS-$(CONFIG_DSPUTIL)
+=
ppc/dsputil_altivec.o
OBJS-$(CONFIG_FFT)
+=
ppc/fft_altivec.o
OBJS-$(CONFIG_H264CHROMA)
+=
ppc/h264chroma_init.o
OBJS-$(CONFIG_H264DSP)
+=
ppc/h264dsp.o
...
...
@@ -11,6 +10,7 @@ OBJS-$(CONFIG_HPELDSP) += ppc/hpeldsp_altivec.o
OBJS-$(CONFIG_HUFFYUVDSP)
+=
ppc/huffyuvdsp_altivec.o
OBJS-$(CONFIG_FDCTDSP)
+=
ppc/fdctdsp.o
OBJS-$(CONFIG_IDCTDSP)
+=
ppc/idctdsp.o
OBJS-$(CONFIG_ME_CMP)
+=
ppc/me_cmp.o
OBJS-$(CONFIG_MPEGAUDIODSP)
+=
ppc/mpegaudiodsp_altivec.o
OBJS-$(CONFIG_MPEGVIDEO)
+=
ppc/mpegvideo_altivec.o
\
ppc/mpegvideodsp.o
...
...
libavcodec/ppc/
dsputil_altivec
.c
→
libavcodec/ppc/
me_cmp
.c
View file @
2d604443
...
...
@@ -31,8 +31,8 @@
#include "libavutil/ppc/types_altivec.h"
#include "libavutil/ppc/util_altivec.h"
#include "libavcodec/avcodec.h"
#include "libavcodec/dsputil.h"
#include "libavcodec/mpegvideo.h"
#include "libavcodec/me_cmp.h"
#if HAVE_ALTIVEC
static
int
sad16_x2_altivec
(
MpegEncContext
*
v
,
uint8_t
*
pix1
,
uint8_t
*
pix2
,
...
...
@@ -744,7 +744,7 @@ static int hadamard8_diff16_altivec(MpegEncContext *s, uint8_t *dst,
}
#endif
/* HAVE_ALTIVEC */
av_cold
void
ff_
dsputil_init_ppc
(
DSP
Context
*
c
,
AVCodecContext
*
avctx
)
av_cold
void
ff_
me_cmp_init_ppc
(
MECmp
Context
*
c
,
AVCodecContext
*
avctx
)
{
#if HAVE_ALTIVEC
if
(
!
PPC_ALTIVEC
(
av_get_cpu_flags
()))
...
...
libavcodec/svq1enc.c
View file @
2d604443
...
...
@@ -27,8 +27,8 @@
*/
#include "avcodec.h"
#include "dsputil.h"
#include "hpeldsp.h"
#include "me_cmp.h"
#include "mpegvideo.h"
#include "h263.h"
#include "internal.h"
...
...
@@ -306,7 +306,7 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane,
s
->
m
.
current_picture
.
motion_val
[
0
]
=
s
->
motion_val8
[
plane
]
+
2
;
s
->
m
.
p_mv_table
=
s
->
motion_val16
[
plane
]
+
s
->
m
.
mb_stride
+
1
;
s
->
m
.
dsp
=
s
->
dsp
;
// move
s
->
m
.
mecc
=
s
->
mecc
;
// move
ff_init_me
(
&
s
->
m
);
s
->
m
.
me
.
dia_size
=
s
->
avctx
->
dia_size
;
...
...
@@ -431,8 +431,8 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane,
best
=
score
[
1
]
<=
score
[
0
];
vlc
=
ff_svq1_block_type_vlc
[
SVQ1_BLOCK_SKIP
];
score
[
2
]
=
s
->
dsp
.
sse
[
0
](
NULL
,
src
+
16
*
x
,
ref
,
stride
,
16
);
score
[
2
]
=
s
->
mecc
.
sse
[
0
](
NULL
,
src
+
16
*
x
,
ref
,
stride
,
16
);
score
[
2
]
+=
vlc
[
1
]
*
lambda
;
if
(
score
[
2
]
<
score
[
best
]
&&
mx
==
0
&&
my
==
0
)
{
best
=
2
;
...
...
@@ -509,8 +509,8 @@ static av_cold int svq1_encode_init(AVCodecContext *avctx)
SVQ1EncContext
*
const
s
=
avctx
->
priv_data
;
int
ret
;
ff_dsputil_init
(
&
s
->
dsp
,
avctx
);
ff_hpeldsp_init
(
&
s
->
hdsp
,
avctx
->
flags
);
ff_me_cmp_init
(
&
s
->
mecc
,
avctx
);
ff_mpegvideoencdsp_init
(
&
s
->
m
.
mpvencdsp
,
avctx
);
avctx
->
coded_frame
=
av_frame_alloc
();
...
...
libavcodec/svq1enc.h
View file @
2d604443
...
...
@@ -25,9 +25,9 @@
#include "libavutil/frame.h"
#include "avcodec.h"
#include "dsputil.h"
#include "get_bits.h"
#include "hpeldsp.h"
#include "me_cmp.h"
#include "mpegvideo.h"
#include "put_bits.h"
...
...
@@ -37,7 +37,7 @@ typedef struct SVQ1EncContext {
* of MpegEncContext, so this will be removed then. */
MpegEncContext
m
;
AVCodecContext
*
avctx
;
DSPContext
dsp
;
MECmpContext
mecc
;
HpelDSPContext
hdsp
;
AVFrame
*
current_picture
;
AVFrame
*
last_picture
;
...
...
libavcodec/utils.c
View file @
2d604443
...
...
@@ -39,8 +39,8 @@
#include "libavutil/samplefmt.h"
#include "libavutil/dict.h"
#include "avcodec.h"
#include "dsputil.h"
#include "libavutil/opt.h"
#include "me_cmp.h"
#include "mpegvideo.h"
#include "thread.h"
#include "internal.h"
...
...
@@ -100,8 +100,8 @@ static av_cold void avcodec_init(void)
return
;
initialized
=
1
;
if
(
CONFIG_
DSPUTIL
)
ff_
dsputil_static_init
();
if
(
CONFIG_
ME_CMP
)
ff_
me_cmp_init_static
();
}
int
av_codec_is_encoder
(
const
AVCodec
*
codec
)
...
...
libavcodec/x86/Makefile
View file @
2d604443
...
...
@@ -6,7 +6,6 @@ OBJS-$(CONFIG_AUDIODSP) += x86/audiodsp_init.o
OBJS-$(CONFIG_BLOCKDSP)
+=
x86/blockdsp.o
OBJS-$(CONFIG_BSWAPDSP)
+=
x86/bswapdsp_init.o
OBJS-$(CONFIG_DCT)
+=
x86/dct_init.o
OBJS-$(CONFIG_DSPUTIL)
+=
x86/dsputil_init.o
OBJS-$(CONFIG_FDCTDSP)
+=
x86/fdctdsp_init.o
OBJS-$(CONFIG_FFT)
+=
x86/fft_init.o
OBJS-$(CONFIG_H263DSP)
+=
x86/h263dsp_init.o
...
...
@@ -19,6 +18,7 @@ OBJS-$(CONFIG_HUFFYUVDSP) += x86/huffyuvdsp_init.o
OBJS-$(CONFIG_HUFFYUVENCDSP)
+=
x86/huffyuvencdsp_mmx.o
OBJS-$(CONFIG_IDCTDSP)
+=
x86/idctdsp_init.o
OBJS-$(CONFIG_LPC)
+=
x86/lpc.o
OBJS-$(CONFIG_ME_CMP)
+=
x86/me_cmp_init.o
OBJS-$(CONFIG_MPEGAUDIODSP)
+=
x86/mpegaudiodsp.o
OBJS-$(CONFIG_MPEGVIDEO)
+=
x86/mpegvideo.o
\
x86/mpegvideodsp.o
...
...
@@ -70,7 +70,6 @@ YASM-OBJS-$(CONFIG_AUDIODSP) += x86/audiodsp.o
YASM-OBJS-$(CONFIG_BSWAPDSP)
+=
x86/bswapdsp.o
YASM-OBJS-$(CONFIG_DCT)
+=
x86/dct32.o
YASM-OBJS-$(CONFIG_DNXHD_ENCODER)
+=
x86/dnxhdenc.o
YASM-OBJS-$(CONFIG_DSPUTIL)
+=
x86/dsputilenc.o
YASM-OBJS-$(CONFIG_FFT)
+=
x86/fft.o
YASM-OBJS-$(CONFIG_H263DSP)
+=
x86/h263_loopfilter.o
YASM-OBJS-$(CONFIG_H264CHROMA)
+=
x86/h264_chromamc.o
\
...
...
@@ -90,6 +89,7 @@ YASM-OBJS-$(CONFIG_H264QPEL) += x86/h264_qpel_8bit.o \
YASM-OBJS-$(CONFIG_HPELDSP)
+=
x86/fpel.o
\
x86/hpeldsp.o
YASM-OBJS-$(CONFIG_HUFFYUVDSP)
+=
x86/huffyuvdsp.o
YASM-OBJS-$(CONFIG_ME_CMP)
+=
x86/me_cmp.o
YASM-OBJS-$(CONFIG_MPEGAUDIODSP)
+=
x86/imdct36.o
YASM-OBJS-$(CONFIG_MPEGVIDEOENC)
+=
x86/mpegvideoencdsp.o
YASM-OBJS-$(CONFIG_PIXBLOCKDSP)
+=
x86/pixblockdsp.o
...
...
libavcodec/x86/
dsputilenc
.asm
→
libavcodec/x86/
me_cmp
.asm
View file @
2d604443
;*****************************************************************************
;*
MMX optimized DSP utils
;*
SIMD-optimized motion compensation estimation
;*****************************************************************************
;* Copyright (c) 2000, 2001 Fabrice Bellard
;* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
...
...
libavcodec/x86/
dsputil
_init.c
→
libavcodec/x86/
me_cmp
_init.c
View file @
2d604443
/*
*
MMX optimized DSP utils
*
SIMD-optimized motion estimation
* Copyright (c) 2000, 2001 Fabrice Bellard
* Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
*
...
...
@@ -26,7 +26,7 @@
#include "libavutil/cpu.h"
#include "libavutil/x86/asm.h"
#include "libavutil/x86/cpu.h"
#include "libavcodec/
dsputil
.h"
#include "libavcodec/
me_cmp
.h"
#include "libavcodec/mpegvideo.h"
#if HAVE_INLINE_ASM
...
...
@@ -411,7 +411,7 @@ static int nsse16_mmx(MpegEncContext *c, uint8_t *pix1, uint8_t *pix2,
int
score1
,
score2
;
if
(
c
)
score1
=
c
->
dsp
.
sse
[
0
](
c
,
pix1
,
pix2
,
line_size
,
h
);
score1
=
c
->
mecc
.
sse
[
0
](
c
,
pix1
,
pix2
,
line_size
,
h
);
else
score1
=
sse16_mmx
(
c
,
pix1
,
pix2
,
line_size
,
h
);
score2
=
hf_noise16_mmx
(
pix1
,
line_size
,
h
)
-
...
...
@@ -1225,7 +1225,7 @@ hadamard_func(mmxext)
hadamard_func
(
sse2
)
hadamard_func
(
ssse3
)
av_cold
void
ff_
dsputil_init_x86
(
DSP
Context
*
c
,
AVCodecContext
*
avctx
)
av_cold
void
ff_
me_cmp_init_x86
(
MECmp
Context
*
c
,
AVCodecContext
*
avctx
)
{
int
cpu_flags
=
av_get_cpu_flags
();
...
...
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