[x265] [PATCH] Fix testbench crash with dhdr10 enabled

Bhavna Hariharan bhavna at multicorewareinc.com
Fri Aug 4 11:31:41 CEST 2017


Please ignore this patch.


Regards,

Bhavna Hariharan

On Wed, Aug 2, 2017 at 9:47 PM, <bhavna at multicorewareinc.com> wrote:

> # HG changeset patch
> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
> # Date 1501680985 -19800
> #      Wed Aug 02 19:06:25 2017 +0530
> # Node ID 041fcaf820659d504d887cfaa239a02988812c14
> # Parent  d11482e5fedbcdaf62ee3c6872f43827d99ad181
> Fix testbench crash with dhdr10 enabled
>
> __rdtsc() was being defined multiple times causing failure in testbench.
> This patch renames the function and duplicates the REPORT_SPEEDUP macro
> that
> supports GNU compiler.
>
> Display warning when dhdr10 is enabled with MSVC version that does not
> support c++11.
>
> diff -r d11482e5fedb -r 041fcaf82065 source/CMakeLists.txt
> --- a/source/CMakeLists.txt     Mon Jul 24 11:15:38 2017 +0530
> +++ b/source/CMakeLists.txt     Wed Aug 02 19:06:25 2017 +0530
> @@ -184,6 +184,9 @@
>  endif()
>  # this option is to enable the inclusion of dynamic HDR10 library to the
> libx265 compilation
>  option(ENABLE_HDR10_PLUS "Enable dynamic HDR10 compilation" OFF)
> +if(MSVC AND (MSVC_VERSION LESS 1800) AND ENABLE_HDR10_PLUS)
> +    message(FATAL_ERROR "MSVC version 12.0 or above required to support
> hdr10plus")
> +endif()
>  if(GCC)
>      add_definitions(-Wall -Wextra -Wshadow)
>      add_definitions(-D__STDC_LIMIT_MACROS=1)
> diff -r d11482e5fedb -r 041fcaf82065 source/dynamicHDR10/
> metadataFromJson.cpp
> --- a/source/dynamicHDR10/metadataFromJson.cpp  Mon Jul 24 11:15:38 2017
> +0530
> +++ b/source/dynamicHDR10/metadataFromJson.cpp  Wed Aug 02 19:06:25 2017
> +0530
> @@ -34,8 +34,6 @@
>  #include "BasicStructures.h"
>  #include "SeiMetadataDictionary.h"
>
> -#define M_PI 3.14159265358979323846
> -
>  using namespace SeiMetadataDictionary;
>
>  class metadataFromJson::DynamicMetaIO
> diff -r d11482e5fedb -r 041fcaf82065 source/test/testharness.h
> --- a/source/test/testharness.h Mon Jul 24 11:15:38 2017 +0530
> +++ b/source/test/testharness.h Wed Aug 02 19:06:25 2017 +0530
> @@ -70,7 +70,7 @@
>  #include <intrin.h>
>  #elif defined(__GNUC__)
>  /* fallback for older GCC/MinGW */
> -static inline uint32_t __rdtsc(void)
> +static inline uint32_t rdtsc(void)
>  {
>      uint32_t a = 0;
>
> @@ -92,6 +92,41 @@
>  // Adapted from checkasm.c, runs each optimized primitive four times,
> measures rdtsc
>  // and discards invalid times.  Repeats 1000 times to get a good
> average.  Then measures
>  // the C reference with fewer runs and reports X factor and average
> cycles.
> +
> +// Duplicate macro to avoid conflict with in-built function __rdtsc()
> +#if defined(__GNUC__)
> +#define REPORT_SPEEDUP(RUNOPT, RUNREF, ...) \
> +    { \
> +        uint32_t cycles = 0; int runs = 0; \
> +        RUNOPT(__VA_ARGS__); \
> +        for (int ti = 0; ti < BENCH_RUNS; ti++) { \
> +            uint32_t t0 = (uint32_t)rdtsc(); \
> +            RUNOPT(__VA_ARGS__); \
> +            RUNOPT(__VA_ARGS__); \
> +            RUNOPT(__VA_ARGS__); \
> +            RUNOPT(__VA_ARGS__); \
> +            uint32_t t1 = (uint32_t)rdtsc() - t0; \
> +            if (t1 * runs <= cycles * 4 && ti > 0) { cycles += t1;
> runs++; } \
> +                } \
> +        uint32_t refcycles = 0; int refruns = 0; \
> +        RUNREF(__VA_ARGS__); \
> +        for (int ti = 0; ti < BENCH_RUNS / 4; ti++) { \
> +            uint32_t t0 = (uint32_t)rdtsc(); \
> +            RUNREF(__VA_ARGS__); \
> +            RUNREF(__VA_ARGS__); \
> +            RUNREF(__VA_ARGS__); \
> +            RUNREF(__VA_ARGS__); \
> +            uint32_t t1 = (uint32_t)rdtsc() - t0; \
> +            if (t1 * refruns <= refcycles * 4 && ti > 0) { refcycles +=
> t1; refruns++; } \
> +                } \
> +        x265_emms(); \
> +        float optperf = (10.0f * cycles / runs) / 4; \
> +        float refperf = (10.0f * refcycles / refruns) / 4; \
> +        printf("\t%3.2fx ", refperf / optperf); \
> +        printf("\t %-8.2lf \t %-8.2lf\n", optperf, refperf); \
> +    }
> +
> +#else
>  #define REPORT_SPEEDUP(RUNOPT, RUNREF, ...) \
>      { \
>          uint32_t cycles = 0; int runs = 0; \
> @@ -123,6 +158,7 @@
>          printf("\t %-8.2lf \t %-8.2lf\n", optperf, refperf); \
>      }
>
> +#endif
>  extern "C" {
>  #if X265_ARCH_X86
>  int PFX(stack_pagealign)(int (*func)(), int align);
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20170804/87d8dd30/attachment.html>


More information about the x265-devel mailing list