Browse Source

* yet a bit more extended

* fixed busy loop test bug on mmx-only machine

Originally committed as revision 613 to svn://svn.ffmpeg.org/ffmpeg/trunk
tags/v0.5
Zdenek Kabelac 24 years ago
parent
commit
6fea8454ac
2 changed files with 49 additions and 23 deletions
  1. +11
    -4
      tests/Makefile
  2. +38
    -19
      tests/dsptest.c

+ 11
- 4
tests/Makefile View File

@@ -19,7 +19,7 @@ test mpeg4 mpeg: vsynth1/0.pgm asynth1.sw
libavtest: vsynth1/0.pgm asynth1.sw libavtest: vsynth1/0.pgm asynth1.sw
@$(SRC_PATH)/tests/regression.sh $@ $(LIBAV_REFFILE) @$(SRC_PATH)/tests/regression.sh $@ $(LIBAV_REFFILE)


# video generation
# video generation


vsynth1/0.pgm: videogen vsynth1/0.pgm: videogen
@mkdir -p vsynth1 @mkdir -p vsynth1
@@ -37,12 +37,19 @@ audiogen: audiogen.c
$(CC) $(LDFLAGS) $(CFLAGS) -o $@ $< $(CC) $(LDFLAGS) $(CFLAGS) -o $@ $<


DSPDEPS = $(SRC_PATH)/libavcodec/i386/dsputil_mmx.c \ DSPDEPS = $(SRC_PATH)/libavcodec/i386/dsputil_mmx.c \
$(SRC_PATH)/libavcodec/i386/dsputil_mmx_avg.h
$(SRC_PATH)/libavcodec/i386/dsputil_mmx_avg.h \
$(SRC_PATH)/libavcodec/i386/fdct_mmx.c \
$(SRC_PATH)/libavcodec/i386/idct_mmx.c \
$(SRC_PATH)/libavcodec/i386/motion_est_mmx.c \
$(SRC_PATH)/libavcodec/i386/simple_idct_mmx.c \
$(SRC_PATH)/libavcodec/dsputil.c \
$(SRC_PATH)/libavcodec/dsputil.h \
$(SRC_PATH)/libavcodec/simple_idct.c


dsptestpic: dsptest.c $(DSPDEPS) dsptestpic: dsptest.c $(DSPDEPS)
$(CC) -fPIC -DPIC -O4 -fomit-frame-pointer -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavcodec/i386 -I$(SRC_PATH)/libavcodec/ -o $@ $<
$(CC) -fPIC -DPIC -O4 -fomit-frame-pointer -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavcodec/i386 -I$(SRC_PATH)/libavcodec/ -o $@ $< -lm
dsptest: dsptest.c $(DSPDEPS) dsptest: dsptest.c $(DSPDEPS)
$(CC) -O4 -fomit-frame-pointer -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavcodec/i386 -I$(SRC_PATH)/libavcodec/ -o $@ $<
$(CC) -O4 -fomit-frame-pointer -DHAVE_AV_CONFIG_H -I.. -I$(SRC_PATH)/libavcodec/i386 -I$(SRC_PATH)/libavcodec/ -o $@ $< -lm


clean: clean:
rm -rf vsynth1 rm -rf vsynth1


+ 38
- 19
tests/dsptest.c View File

@@ -17,10 +17,22 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#define TESTCPU_MAIN #define TESTCPU_MAIN
#include "avcodec.h"
#include "dsputil.h" #include "dsputil.h"
//#include "../libavcodec/dsputil.c"
#include "mpegvideo.h"
#include "mpeg12data.h"
#include "mpeg4data.h"
#include "../libavcodec/i386/cputest.c" #include "../libavcodec/i386/cputest.c"
#include "../libavcodec/i386/dsputil_mmx.c" #include "../libavcodec/i386/dsputil_mmx.c"

#include "../libavcodec/i386/fdct_mmx.c"
#include "../libavcodec/i386/idct_mmx.c"
#include "../libavcodec/i386/motion_est_mmx.c"
#include "../libavcodec/i386/simple_idct_mmx.c"
#include "../libavcodec/dsputil.c"
#include "../libavcodec/simple_idct.c"
#include "../libavcodec/jfdctfst.c"

#undef TESTCPU_MAIN #undef TESTCPU_MAIN


#define PAD 0x10000 #define PAD 0x10000
@@ -62,6 +74,8 @@ static const struct pix_func {
} pix_func[] = { } pix_func[] = {


PIX_FUNC_MMX(put_pixels), PIX_FUNC_MMX(put_pixels),
//PIX_FUNC_MMX(get_pixels),
//PIX_FUNC_MMX(put_pixels_clamped),
#if 1 #if 1
PIX_FUNC(put_pixels_x2), PIX_FUNC(put_pixels_x2),
PIX_FUNC(put_pixels_y2), PIX_FUNC(put_pixels_y2),
@@ -75,6 +89,11 @@ static const struct pix_func {
PIX_FUNC(avg_pixels_x2), PIX_FUNC(avg_pixels_x2),
PIX_FUNC(avg_pixels_y2), PIX_FUNC(avg_pixels_y2),
PIX_FUNC(avg_pixels_xy2), PIX_FUNC(avg_pixels_xy2),

PIX_FUNC_MMX(avg_no_rnd_pixels),
PIX_FUNC_MMX(avg_no_rnd_pixels_x2),
PIX_FUNC_MMX(avg_no_rnd_pixels_y2),
PIX_FUNC_MMX(avg_no_rnd_pixels_xy2),
#endif #endif
{ 0, 0 } { 0, 0 }
}; };
@@ -104,25 +123,25 @@ static test_speed(int step)
op_pixels_func func = pix->func; op_pixels_func func = pix->func;
char* im = bu; char* im = bu;


if (!(pix->mm_flags & mm_flags))
continue;

printf("%30s... ", pix->name);
fflush(stdout);
ts = rdtsc();
for(i=0; i<100000; i++){
func(im, im + 1000, linesize, 16);
im += step;
if (im > bu + 20000)
im = bu;
if (pix->mm_flags & mm_flags)
{
printf("%30s... ", pix->name);
fflush(stdout);
ts = rdtsc();
for(i=0; i<100000; i++){
func(im, im + 1000, linesize, 16);
im += step;
if (im > bu + 20000)
im = bu;
}
te = rdtsc();
emms();
printf("% 9d\n", (int)(te - ts));
sum += (te - ts) / 100000;
if (pix->mm_flags & PAD)
puts("");
} }
te = rdtsc();
emms();
printf("% 9d\n", (int)(te - ts));
sum += (te - ts) / 100000;
if (pix->mm_flags & PAD)
puts("");
pix++;
pix++;
} }


printf("Total sum: %d\n", sum); printf("Total sum: %d\n", sum);


Loading…
Cancel
Save