* qatar/master: build: avcodec: order cosmetics intrax8dsp: Add missing #include to make header standalone Delete motion-test tool; it is of doubtful utility. Conflicts: libavcodec/Makefile libavcodec/motion-test.c Merged-by: Michael Niedermayer <michaelni@gmx.at>tags/n1.0
@@ -37,10 +37,10 @@ OBJS = allcodecs.o \ | |||||
OBJS-$(CONFIG_AANDCTTABLES) += aandcttab.o | OBJS-$(CONFIG_AANDCTTABLES) += aandcttab.o | ||||
OBJS-$(CONFIG_AC3DSP) += ac3dsp.o | OBJS-$(CONFIG_AC3DSP) += ac3dsp.o | ||||
OBJS-$(CONFIG_CRYSTALHD) += crystalhd.o | OBJS-$(CONFIG_CRYSTALHD) += crystalhd.o | ||||
OBJS-$(CONFIG_ENCODERS) += faandct.o jfdctfst.o jfdctint.o | |||||
OBJS-$(CONFIG_DCT) += dct.o dct32_fixed.o dct32_float.o | OBJS-$(CONFIG_DCT) += dct.o dct32_fixed.o dct32_float.o | ||||
OBJS-$(CONFIG_DWT) += dwt.o snow.o | OBJS-$(CONFIG_DWT) += dwt.o snow.o | ||||
OBJS-$(CONFIG_DXVA2) += dxva2.o | OBJS-$(CONFIG_DXVA2) += dxva2.o | ||||
OBJS-$(CONFIG_ENCODERS) += faandct.o jfdctfst.o jfdctint.o | |||||
OBJS-$(CONFIG_ERROR_RESILIENCE) += error_resilience.o | OBJS-$(CONFIG_ERROR_RESILIENCE) += error_resilience.o | ||||
FFT-OBJS-$(CONFIG_HARDCODED_TABLES) += cos_tables.o cos_fixed_tables.o | FFT-OBJS-$(CONFIG_HARDCODED_TABLES) += cos_tables.o cos_fixed_tables.o | ||||
OBJS-$(CONFIG_FFT) += avfft.o fft_fixed.o fft_float.o \ | OBJS-$(CONFIG_FFT) += avfft.o fft_fixed.o fft_float.o \ | ||||
@@ -682,6 +682,7 @@ OBJS-$(CONFIG_LIBXVID_ENCODER) += libxvid.o | |||||
# parsers | # parsers | ||||
OBJS-$(CONFIG_AAC_PARSER) += aac_parser.o aac_ac3_parser.o \ | OBJS-$(CONFIG_AAC_PARSER) += aac_parser.o aac_ac3_parser.o \ | ||||
aacadtsdec.o mpeg4audio.o | aacadtsdec.o mpeg4audio.o | ||||
OBJS-$(CONFIG_AAC_LATM_PARSER) += latm_parser.o | |||||
OBJS-$(CONFIG_AC3_PARSER) += ac3_parser.o ac3tab.o \ | OBJS-$(CONFIG_AC3_PARSER) += ac3_parser.o ac3tab.o \ | ||||
aac_ac3_parser.o | aac_ac3_parser.o | ||||
OBJS-$(CONFIG_ADX_PARSER) += adx_parser.o adx.o | OBJS-$(CONFIG_ADX_PARSER) += adx_parser.o adx.o | ||||
@@ -703,7 +704,6 @@ OBJS-$(CONFIG_H264_PARSER) += h264_parser.o h264.o \ | |||||
h264_refs.o h264_sei.o h264_direct.o \ | h264_refs.o h264_sei.o h264_direct.o \ | ||||
h264_loopfilter.o h264_cabac.o \ | h264_loopfilter.o h264_cabac.o \ | ||||
h264_cavlc.o h264_ps.o | h264_cavlc.o h264_ps.o | ||||
OBJS-$(CONFIG_AAC_LATM_PARSER) += latm_parser.o | |||||
OBJS-$(CONFIG_MJPEG_PARSER) += mjpeg_parser.o | OBJS-$(CONFIG_MJPEG_PARSER) += mjpeg_parser.o | ||||
OBJS-$(CONFIG_MLP_PARSER) += mlp_parser.o mlp.o | OBJS-$(CONFIG_MLP_PARSER) += mlp_parser.o mlp.o | ||||
OBJS-$(CONFIG_MPEG4VIDEO_PARSER) += mpeg4video_parser.o h263.o \ | OBJS-$(CONFIG_MPEG4VIDEO_PARSER) += mpeg4video_parser.o h263.o \ | ||||
@@ -780,7 +780,6 @@ TESTPROGS = cabac \ | |||||
raw \ | raw \ | ||||
snowenc \ | snowenc \ | ||||
TESTPROGS-$(HAVE_MMX) += motion | |||||
TESTOBJS = dctref.o | TESTOBJS = dctref.o | ||||
HOSTPROGS = aac_tablegen \ | HOSTPROGS = aac_tablegen \ | ||||
@@ -19,6 +19,8 @@ | |||||
#ifndef AVCODEC_INTRAX8DSP_H | #ifndef AVCODEC_INTRAX8DSP_H | ||||
#define AVCODEC_INTRAX8DSP_H | #define AVCODEC_INTRAX8DSP_H | ||||
#include <stdint.h> | |||||
typedef struct IntraX8DSPContext { | typedef struct IntraX8DSPContext { | ||||
void (*v_loop_filter)(uint8_t *src, int stride, int qscale); | void (*v_loop_filter)(uint8_t *src, int stride, int qscale); | ||||
void (*h_loop_filter)(uint8_t *src, int stride, int qscale); | void (*h_loop_filter)(uint8_t *src, int stride, int qscale); | ||||
@@ -1,149 +0,0 @@ | |||||
/* | |||||
* (c) 2001 Fabrice Bellard | |||||
* | |||||
* This file is part of FFmpeg. | |||||
* | |||||
* FFmpeg 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. | |||||
* | |||||
* FFmpeg 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 FFmpeg; if not, write to the Free Software | |||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||||
*/ | |||||
/** | |||||
* @file | |||||
* motion test. | |||||
*/ | |||||
#include <stdlib.h> | |||||
#include <stdio.h> | |||||
#include <string.h> | |||||
#include "config.h" | |||||
#include "dsputil.h" | |||||
#include "libavutil/internal.h" | |||||
#include "libavutil/lfg.h" | |||||
#include "libavutil/mem.h" | |||||
#include "libavutil/time.h" | |||||
#undef printf | |||||
#define WIDTH 64 | |||||
#define HEIGHT 64 | |||||
static uint8_t img1[WIDTH * HEIGHT]; | |||||
static uint8_t img2[WIDTH * HEIGHT]; | |||||
static void fill_random(uint8_t *tab, int size) | |||||
{ | |||||
int i; | |||||
AVLFG prng; | |||||
av_lfg_init(&prng, 1); | |||||
for(i=0;i<size;i++) { | |||||
tab[i] = av_lfg_get(&prng) % 256; | |||||
} | |||||
} | |||||
static void help(void) | |||||
{ | |||||
printf("motion-test [-h]\n" | |||||
"test motion implementations\n"); | |||||
} | |||||
#define NB_ITS 500 | |||||
int dummy; | |||||
static void test_motion(const char *name, | |||||
me_cmp_func test_func, me_cmp_func ref_func) | |||||
{ | |||||
int x, y, d1, d2, it; | |||||
uint8_t *ptr; | |||||
int64_t ti; | |||||
printf("testing '%s'\n", name); | |||||
/* test correctness */ | |||||
for(it=0;it<20;it++) { | |||||
fill_random(img1, WIDTH * HEIGHT); | |||||
fill_random(img2, WIDTH * HEIGHT); | |||||
for(y=0;y<HEIGHT-17;y++) { | |||||
for(x=0;x<WIDTH-17;x++) { | |||||
ptr = img2 + y * WIDTH + x; | |||||
d1 = test_func(NULL, img1, ptr, WIDTH, 1); | |||||
d2 = ref_func(NULL, img1, ptr, WIDTH, 1); | |||||
if (d1 != d2) { | |||||
printf("error: mmx=%d c=%d\n", d1, d2); | |||||
} | |||||
} | |||||
} | |||||
} | |||||
emms_c(); | |||||
/* speed test */ | |||||
ti = av_gettime(); | |||||
d1 = 0; | |||||
for(it=0;it<NB_ITS;it++) { | |||||
for(y=0;y<HEIGHT-17;y++) { | |||||
for(x=0;x<WIDTH-17;x++) { | |||||
ptr = img2 + y * WIDTH + x; | |||||
d1 += test_func(NULL, img1, ptr, WIDTH, 1); | |||||
} | |||||
} | |||||
} | |||||
emms_c(); | |||||
dummy = d1; /* avoid optimization */ | |||||
ti = av_gettime() - ti; | |||||
printf(" %0.0f kop/s\n", | |||||
(double)NB_ITS * (WIDTH - 16) * (HEIGHT - 16) / | |||||
(double)(ti / 1000.0)); | |||||
} | |||||
int main(int argc, char **argv) | |||||
{ | |||||
AVCodecContext *ctx; | |||||
int c; | |||||
DSPContext cctx, mmxctx; | |||||
int flags[2] = { AV_CPU_FLAG_MMX, AV_CPU_FLAG_MMXEXT }; | |||||
int flags_size = HAVE_MMXEXT ? 2 : 1; | |||||
if (argc > 1) { | |||||
help(); | |||||
return 1; | |||||
} | |||||
printf("ffmpeg motion test\n"); | |||||
ctx = avcodec_alloc_context3(NULL); | |||||
ctx->dsp_mask = AV_CPU_FLAG_FORCE; | |||||
ff_dsputil_init(&cctx, ctx); | |||||
for (c = 0; c < flags_size; c++) { | |||||
int x; | |||||
ctx->dsp_mask = AV_CPU_FLAG_FORCE | flags[c]; | |||||
ff_dsputil_init(&mmxctx, ctx); | |||||
for (x = 0; x < 2; x++) { | |||||
printf("%s for %dx%d pixels\n", c ? "mmx2" : "mmx", | |||||
x ? 8 : 16, x ? 8 : 16); | |||||
test_motion("mmx", mmxctx.pix_abs[x][0], cctx.pix_abs[x][0]); | |||||
test_motion("mmx_x2", mmxctx.pix_abs[x][1], cctx.pix_abs[x][1]); | |||||
test_motion("mmx_y2", mmxctx.pix_abs[x][2], cctx.pix_abs[x][2]); | |||||
test_motion("mmx_xy2", mmxctx.pix_abs[x][3], cctx.pix_abs[x][3]); | |||||
} | |||||
} | |||||
av_free(ctx); | |||||
return 0; | |||||
} |