Re: [libav-devel] [PATCH] checkasm: add HEVC test for testing IDCT DC

2016-07-22 Thread Luca Barbato
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

2016-07-21 Thread Alexandra Hájková
---
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

2016-07-21 Thread Alexandra Hájková
>> --- 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

2016-07-21 Thread Martin Storsjö

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

2016-07-21 Thread Diego Biurrun
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

2016-07-21 Thread Alexandra Hájková
---
 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

2016-07-19 Thread Anton Khirnov
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

2016-07-19 Thread Martin Storsjö

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

2016-07-19 Thread Henrik Gramner
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

2016-07-18 Thread Luca Barbato
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

2016-07-18 Thread Alexandra Hájková
---
 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