Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On 21/07/16 16:32, Alexandra Hájková wrote: > --- > remove unused headers, > reorder the remaining ones > order hevc_idct in checkasm.h properly > > tests/checkasm/Makefile| 2 +- > tests/checkasm/checkasm.c | 1 + > tests/checkasm/checkasm.h | 1 + > tests/checkasm/hevc_idct.c | 73 > ++ > 4 files changed, 76 insertions(+), 1 deletion(-) > create mode 100644 tests/checkasm/hevc_idct.c > > diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile > index 7c1d0ec..d339b75 100644 > --- a/tests/checkasm/Makefile > +++ b/tests/checkasm/Makefile > @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o > > # decoders/encoders > AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o > -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o > +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o > AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o > > CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) > diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c > index 739da61..b062197 100644 > --- a/tests/checkasm/checkasm.c > +++ b/tests/checkasm/checkasm.c > @@ -85,6 +85,7 @@ static const struct { > #endif > #if CONFIG_HEVC_DECODER > { "hevc_mc", checkasm_check_hevc_mc }, > +{ "hevc_idct", checkasm_check_hevc_idct }, > #endif > #if CONFIG_V210_ENCODER > { "v210enc", checkasm_check_v210enc }, > diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h > index 7f15b9c..73109c3 100644 > --- a/tests/checkasm/checkasm.h > +++ b/tests/checkasm/checkasm.h > @@ -37,6 +37,7 @@ void checkasm_check_fmtconvert(void); > void checkasm_check_h264dsp(void); > void checkasm_check_h264pred(void); > void checkasm_check_h264qpel(void); > +void checkasm_check_hevc_idct(void); > void checkasm_check_hevc_mc(void); > void checkasm_check_synth_filter(void); > void checkasm_check_v210enc(void); > diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c > new file mode 100644 > index 000..84760b9 > --- /dev/null > +++ b/tests/checkasm/hevc_idct.c > @@ -0,0 +1,73 @@ > +/* > + * Copyright (c) 2016 Alexandra Hájková > + * > + * This file is part of Libav. > + * > + * Libav is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 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 General Public License for more details. > + * > + * You should have received a copy of the GNU 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. > + */ > + > +#include > + > +#include "libavutil/intreadwrite.h" > + > +#include "libavcodec/hevcdsp.h" > + > +#include "checkasm.h" > + > +#define randomize_buffers(buf, size)\ > +do {\ > +int j; \ > +for (j = 0; j < size; j++) {\ > +int16_t r = rnd(); \ > +AV_WN16A(buf + j, r); \ > +} \ > +} while (0) > + > +static void check_idct_dc(HEVCDSPContext h, int bit_depth) > +{ > +int i; > +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); > +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); > + > +for (i = 2; i <= 5; i++) { > +int block_size = 1 << i; > +int size = block_size * block_size; > +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); > + > +randomize_buffers(coeffs0, size); > +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); > + > +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, > block_size, bit_depth)) { > +call_ref(coeffs0); > +call_new(coeffs1); > +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) > +fail(); > +bench_new(coeffs1); > +} > +} > +} > + > +void checkasm_check_hevc_idct(void) > +{ > +int bit_depth; > + > +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { > +HEVCDSPContext h; > + > +ff_hevc_dsp_init(, bit_depth); > +check_idct_dc(h, bit_depth); > +} > +report("idct_dc"); > +} > Seems still OK. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
--- remove unused headers, reorder the remaining ones order hevc_idct in checkasm.h properly tests/checkasm/Makefile| 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_idct.c | 73 ++ 4 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 tests/checkasm/hevc_idct.c diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 7c1d0ec..d339b75 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 739da61..b062197 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -85,6 +85,7 @@ static const struct { #endif #if CONFIG_HEVC_DECODER { "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_idct", checkasm_check_hevc_idct }, #endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 7f15b9c..73109c3 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -37,6 +37,7 @@ void checkasm_check_fmtconvert(void); void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); +void checkasm_check_hevc_idct(void); void checkasm_check_hevc_mc(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c new file mode 100644 index 000..84760b9 --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ + +#include + +#include "libavutil/intreadwrite.h" + +#include "libavcodec/hevcdsp.h" + +#include "checkasm.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) + +static void check_idct_dc(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); + +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0); +call_new(coeffs1); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) +fail(); +bench_new(coeffs1); +} +} +} + +void checkasm_check_hevc_idct(void) +{ +int bit_depth; + +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { +HEVCDSPContext h; + +ff_hevc_dsp_init(, bit_depth); +check_idct_dc(h, bit_depth); +} +report("idct_dc"); +} -- 2.1.4 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
>> --- a/tests/checkasm/checkasm.h >> +++ b/tests/checkasm/checkasm.h >> @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); >> void checkasm_check_h264qpel(void); >> void checkasm_check_hevc_mc(void); >> +void checkasm_check_hevc_idct(void); >> void checkasm_check_synth_filter(void); >> void checkasm_check_v210enc(void); > > Order all of these. I'll place hevc_idct before hevc_mc > >> --- /dev/null >> +++ b/tests/checkasm/hevc_idct.c >> @@ -0,0 +1,75 @@ >> + >> +#include >> + >> +#include "checkasm.h" >> + >> +#include "libavcodec/avcodec.h" >> +#include "libavcodec/hevcdsp.h" >> + >> +#include "libavutil/common.h" >> +#include "libavutil/intreadwrite.h" > > The order of the include blocks is reserved. > > I only see hevcdsp.h being required. intreadwrite.h is needed for AV_WN, but common.h and avcodec.h should be skipped ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On Thu, 21 Jul 2016, Diego Biurrun wrote: On Thu, Jul 21, 2016 at 12:57:36PM +0200, Alexandra Hájková wrote: --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,75 @@ + +#include + +#include "checkasm.h" + +#include "libavcodec/avcodec.h" +#include "libavcodec/hevcdsp.h" + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" The order of the include blocks is reserved. Reversed, not reserved +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) + +static void check_idct_dc(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); + +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0); +call_new(coeffs1); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) +fail(); +bench_new(coeffs1); +} +} +} The macro is only used in one place. It's also unclear to me why you made it a macro and not a function. This is the common style for all checkasm tests. So don't enforce a different style here now, rather take it up for discussion (with others who have written and read lots of checkasm tests) for the existing code first. // Martin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On Thu, Jul 21, 2016 at 12:57:36PM +0200, Alexandra Hájková wrote: > --- a/tests/checkasm/Makefile > +++ b/tests/checkasm/Makefile > @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o > > # decoders/encoders > AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o > -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o > +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o > AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o > > --- a/tests/checkasm/checkasm.c > +++ b/tests/checkasm/checkasm.c > @@ -85,6 +85,7 @@ static const struct { > #endif > #if CONFIG_HEVC_DECODER > { "hevc_mc", checkasm_check_hevc_mc }, > +{ "hevc_idct", checkasm_check_hevc_idct }, > #endif > #if CONFIG_V210_ENCODER > { "v210enc", checkasm_check_v210enc }, > --- a/tests/checkasm/checkasm.h > +++ b/tests/checkasm/checkasm.h > @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); > void checkasm_check_h264qpel(void); > void checkasm_check_hevc_mc(void); > +void checkasm_check_hevc_idct(void); > void checkasm_check_synth_filter(void); > void checkasm_check_v210enc(void); Order all of these. > --- /dev/null > +++ b/tests/checkasm/hevc_idct.c > @@ -0,0 +1,75 @@ > + > +#include > + > +#include "checkasm.h" > + > +#include "libavcodec/avcodec.h" > +#include "libavcodec/hevcdsp.h" > + > +#include "libavutil/common.h" > +#include "libavutil/intreadwrite.h" The order of the include blocks is reserved. I only see hevcdsp.h being required. > +#define randomize_buffers(buf, size)\ > +do {\ > +int j; \ > +for (j = 0; j < size; j++) {\ > +int16_t r = rnd(); \ > +AV_WN16A(buf + j, r); \ > +} \ > +} while (0) > + > +static void check_idct_dc(HEVCDSPContext h, int bit_depth) > +{ > +int i; > +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); > +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); > + > +for (i = 2; i <= 5; i++) { > +int block_size = 1 << i; > +int size = block_size * block_size; > +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); > + > +randomize_buffers(coeffs0, size); > +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); > + > +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, > block_size, bit_depth)) { > +call_ref(coeffs0); > +call_new(coeffs1); > +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) > +fail(); > +bench_new(coeffs1); > +} > +} > +} The macro is only used in one place. It's also unclear to me why you made it a macro and not a function. Diego ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
--- tests/checkasm/Makefile| 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_idct.c | 75 ++ 4 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 tests/checkasm/hevc_idct.c diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 7c1d0ec..d339b75 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 739da61..b062197 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -85,6 +85,7 @@ static const struct { #endif #if CONFIG_HEVC_DECODER { "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_idct", checkasm_check_hevc_idct }, #endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 7f15b9c..fb914f2 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); void checkasm_check_hevc_mc(void); +void checkasm_check_hevc_idct(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); void checkasm_check_vp8dsp(void); diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c new file mode 100644 index 000..a808de3 --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ + +#include + +#include "checkasm.h" + +#include "libavcodec/avcodec.h" +#include "libavcodec/hevcdsp.h" + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) + +static void check_idct_dc(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); + +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0); +call_new(coeffs1); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) +fail(); +bench_new(coeffs1); +} +} +} + +void checkasm_check_hevc_idct(void) +{ +int bit_depth; + +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { +HEVCDSPContext h; + +ff_hevc_dsp_init(, bit_depth); +check_idct_dc(h, bit_depth); +} +report("idct_dc"); +} -- 2.1.4 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
Quoting Martin Storsjö (2016-07-19 10:07:56) > On Mon, 18 Jul 2016, Alexandra Hájková wrote: > > > --- > > tests/checkasm/Makefile| 2 +- > > tests/checkasm/checkasm.c | 1 + > > tests/checkasm/checkasm.h | 1 + > > tests/checkasm/hevc_idct.c | 76 > > ++ > > 4 files changed, 79 insertions(+), 1 deletion(-) > > create mode 100644 tests/checkasm/hevc_idct.c > > > > diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile > > index 7c1d0ec..d339b75 100644 > > --- a/tests/checkasm/Makefile > > +++ b/tests/checkasm/Makefile > > @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o > > > > # decoders/encoders > > AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o > > -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o > > +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o > > AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o > > > > CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) > > diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c > > index 739da61..b062197 100644 > > --- a/tests/checkasm/checkasm.c > > +++ b/tests/checkasm/checkasm.c > > @@ -85,6 +85,7 @@ static const struct { > > #endif > > #if CONFIG_HEVC_DECODER > > { "hevc_mc", checkasm_check_hevc_mc }, > > +{ "hevc_idct", checkasm_check_hevc_idct }, > > #endif > > #if CONFIG_V210_ENCODER > > { "v210enc", checkasm_check_v210enc }, > > diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h > > index 7f15b9c..fb914f2 100644 > > --- a/tests/checkasm/checkasm.h > > +++ b/tests/checkasm/checkasm.h > > @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); > > void checkasm_check_h264pred(void); > > void checkasm_check_h264qpel(void); > > void checkasm_check_hevc_mc(void); > > +void checkasm_check_hevc_idct(void); > > void checkasm_check_synth_filter(void); > > void checkasm_check_v210enc(void); > > void checkasm_check_vp8dsp(void); > > diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c > > new file mode 100644 > > index 000..20fda7e > > --- /dev/null > > +++ b/tests/checkasm/hevc_idct.c > > @@ -0,0 +1,76 @@ > > +/* > > + * Copyright (c) 2016 Alexandra Hájková > > + * > > + * This file is part of Libav. > > + * > > + * Libav is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License as published by > > + * the Free Software Foundation; either version 2 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 General Public License for more details. > > + * > > + * You should have received a copy of the GNU 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. > > + */ > > + > > +#include > > + > > +#include "checkasm.h" > > + > > +#include "libavcodec/avcodec.h" > > +#include "libavcodec/hevcdsp.h" > > + > > +#include "libavutil/common.h" > > +#include "libavutil/intreadwrite.h" > > + > > +#define randomize_buffers(buf, size)\ > > +do {\ > > +int j; \ > > +for (j = 0; j < size; j++) {\ > > +int16_t r = rnd(); \ > > +AV_WN16A(buf + j, r); \ > > +} \ > > +} while (0) > > For h264 and vp8, we don't use plain random numbers as input, but instead > do a forward transform of random pixels. Should that be done here as well, > to make sure the tested coefficients actually are within the range of > values that actually appear in HEVC bitstreams? As discussed on IRC, the only obvious constraint in the spec is the full int16 range. So unless someone can see a reason for further constrains, we'll have to assume arbitrary int16 numbers. -- Anton Khirnov ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On Mon, 18 Jul 2016, Alexandra Hájková wrote: --- tests/checkasm/Makefile| 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_idct.c | 76 ++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 tests/checkasm/hevc_idct.c diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 7c1d0ec..d339b75 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 739da61..b062197 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -85,6 +85,7 @@ static const struct { #endif #if CONFIG_HEVC_DECODER { "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_idct", checkasm_check_hevc_idct }, #endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 7f15b9c..fb914f2 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); void checkasm_check_hevc_mc(void); +void checkasm_check_hevc_idct(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); void checkasm_check_vp8dsp(void); diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c new file mode 100644 index 000..20fda7e --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ + +#include + +#include "checkasm.h" + +#include "libavcodec/avcodec.h" +#include "libavcodec/hevcdsp.h" + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) For h264 and vp8, we don't use plain random numbers as input, but instead do a forward transform of random pixels. Should that be done here as well, to make sure the tested coefficients actually are within the range of values that actually appear in HEVC bitstreams? // Martin ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On Mon, Jul 18, 2016 at 8:11 PM, Alexandra Hájkováwrote: > +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, > block_size, bit_depth)) { > +call_ref(coeffs0); > +call_new(coeffs1); > +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) { > +printf("fail: i %d, block_size %d, bit_depth %d\n", i, > block_size, bit_depth); > +fail(); > +} > +} bench_new() as well - otherwise there wont be any performance numbers. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
On 18/07/16 20:11, Alexandra Hájková wrote: > --- > tests/checkasm/Makefile| 2 +- > tests/checkasm/checkasm.c | 1 + > tests/checkasm/checkasm.h | 1 + > tests/checkasm/hevc_idct.c | 76 > ++ > 4 files changed, 79 insertions(+), 1 deletion(-) > create mode 100644 tests/checkasm/hevc_idct.c > Looks fine. ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel
[libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC
--- tests/checkasm/Makefile| 2 +- tests/checkasm/checkasm.c | 1 + tests/checkasm/checkasm.h | 1 + tests/checkasm/hevc_idct.c | 76 ++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 tests/checkasm/hevc_idct.c diff --git a/tests/checkasm/Makefile b/tests/checkasm/Makefile index 7c1d0ec..d339b75 100644 --- a/tests/checkasm/Makefile +++ b/tests/checkasm/Makefile @@ -9,7 +9,7 @@ AVCODECOBJS-$(CONFIG_VP8DSP)+= vp8dsp.o # decoders/encoders AVCODECOBJS-$(CONFIG_DCA_DECODER) += dcadsp.o synth_filter.o -AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o +AVCODECOBJS-$(CONFIG_HEVC_DECODER) += hevc_mc.o hevc_idct.o AVCODECOBJS-$(CONFIG_V210_ENCODER) += v210enc.o CHECKASMOBJS-$(CONFIG_AVCODEC) += $(AVCODECOBJS-yes) diff --git a/tests/checkasm/checkasm.c b/tests/checkasm/checkasm.c index 739da61..b062197 100644 --- a/tests/checkasm/checkasm.c +++ b/tests/checkasm/checkasm.c @@ -85,6 +85,7 @@ static const struct { #endif #if CONFIG_HEVC_DECODER { "hevc_mc", checkasm_check_hevc_mc }, +{ "hevc_idct", checkasm_check_hevc_idct }, #endif #if CONFIG_V210_ENCODER { "v210enc", checkasm_check_v210enc }, diff --git a/tests/checkasm/checkasm.h b/tests/checkasm/checkasm.h index 7f15b9c..fb914f2 100644 --- a/tests/checkasm/checkasm.h +++ b/tests/checkasm/checkasm.h @@ -38,6 +38,7 @@ void checkasm_check_h264dsp(void); void checkasm_check_h264pred(void); void checkasm_check_h264qpel(void); void checkasm_check_hevc_mc(void); +void checkasm_check_hevc_idct(void); void checkasm_check_synth_filter(void); void checkasm_check_v210enc(void); void checkasm_check_vp8dsp(void); diff --git a/tests/checkasm/hevc_idct.c b/tests/checkasm/hevc_idct.c new file mode 100644 index 000..20fda7e --- /dev/null +++ b/tests/checkasm/hevc_idct.c @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2016 Alexandra Hájková + * + * This file is part of Libav. + * + * Libav is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 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 General Public License for more details. + * + * You should have received a copy of the GNU 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. + */ + +#include + +#include "checkasm.h" + +#include "libavcodec/avcodec.h" +#include "libavcodec/hevcdsp.h" + +#include "libavutil/common.h" +#include "libavutil/intreadwrite.h" + +#define randomize_buffers(buf, size)\ +do {\ +int j; \ +for (j = 0; j < size; j++) {\ +int16_t r = rnd(); \ +AV_WN16A(buf + j, r); \ +} \ +} while (0) + +static void check_idct_dc(HEVCDSPContext h, int bit_depth) +{ +int i; +LOCAL_ALIGNED(32, int16_t, coeffs0, [32 * 32]); +LOCAL_ALIGNED(32, int16_t, coeffs1, [32 * 32]); + +for (i = 2; i <= 5; i++) { +int block_size = 1 << i; +int size = block_size * block_size; +declare_func_emms(AV_CPU_FLAG_MMXEXT, void, int16_t *coeffs); + +randomize_buffers(coeffs0, size); +memcpy(coeffs1, coeffs0, sizeof(*coeffs0) * size); + +if (check_func(h.idct_dc[i - 2], "idct_%dx%d_dc_%d", block_size, block_size, bit_depth)) { +call_ref(coeffs0); +call_new(coeffs1); +if (memcmp(coeffs0, coeffs1, sizeof(*coeffs0) * size)) { +printf("fail: i %d, block_size %d, bit_depth %d\n", i, block_size, bit_depth); +fail(); +} +} +} +} + +void checkasm_check_hevc_idct(void) +{ +int bit_depth; + +for (bit_depth = 8; bit_depth <= 10; bit_depth++) { +HEVCDSPContext h; + +ff_hevc_dsp_init(, bit_depth); +check_idct_dc(h, bit_depth); +} +report("idct_dc"); +} -- 2.1.4 ___ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel