| Index: source/libvpx/vp8/common/generic/systemdependent.c
|
| ===================================================================
|
| --- source/libvpx/vp8/common/generic/systemdependent.c (revision 96967)
|
| +++ source/libvpx/vp8/common/generic/systemdependent.c (working copy)
|
| @@ -17,9 +17,54 @@
|
| #include "vp8/common/idct.h"
|
| #include "vp8/common/onyxc_int.h"
|
|
|
| +#if CONFIG_MULTITHREAD
|
| +#if HAVE_UNISTD_H
|
| +#include <unistd.h>
|
| +#elif defined(_WIN32)
|
| +#include <windows.h>
|
| +typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
|
| +#endif
|
| +#endif
|
| +
|
| extern void vp8_arch_x86_common_init(VP8_COMMON *ctx);
|
| extern void vp8_arch_arm_common_init(VP8_COMMON *ctx);
|
|
|
| +#if CONFIG_MULTITHREAD
|
| +static int get_cpu_count()
|
| +{
|
| + int core_count = 16;
|
| +
|
| +#if HAVE_UNISTD_H
|
| +#if defined(_SC_NPROCESSORS_ONLN)
|
| + core_count = sysconf(_SC_NPROCESSORS_ONLN);
|
| +#elif defined(_SC_NPROC_ONLN)
|
| + core_count = sysconf(_SC_NPROC_ONLN);
|
| +#endif
|
| +#elif defined(_WIN32)
|
| + {
|
| + PGNSI pGNSI;
|
| + SYSTEM_INFO sysinfo;
|
| +
|
| + /* Call GetNativeSystemInfo if supported or
|
| + * GetSystemInfo otherwise. */
|
| +
|
| + pGNSI = (PGNSI) GetProcAddress(
|
| + GetModuleHandle(TEXT("kernel32.dll")), "GetNativeSystemInfo");
|
| + if (pGNSI != NULL)
|
| + pGNSI(&sysinfo);
|
| + else
|
| + GetSystemInfo(&sysinfo);
|
| +
|
| + core_count = sysinfo.dwNumberOfProcessors;
|
| + }
|
| +#else
|
| + /* other platforms */
|
| +#endif
|
| +
|
| + return core_count > 0 ? core_count : 1;
|
| +}
|
| +#endif
|
| +
|
| void vp8_machine_specific_config(VP8_COMMON *ctx)
|
| {
|
| #if CONFIG_RUNTIME_CPU_DETECT
|
| @@ -43,6 +88,12 @@
|
| vp8_build_intra_predictors_mby;
|
| rtcd->recon.build_intra_predictors_mby_s =
|
| vp8_build_intra_predictors_mby_s;
|
| + rtcd->recon.build_intra_predictors_mbuv =
|
| + vp8_build_intra_predictors_mbuv;
|
| + rtcd->recon.build_intra_predictors_mbuv_s =
|
| + vp8_build_intra_predictors_mbuv_s;
|
| + rtcd->recon.intra4x4_predict =
|
| + vp8_intra4x4_predict;
|
|
|
| rtcd->subpix.sixtap16x16 = vp8_sixtap_predict16x16_c;
|
| rtcd->subpix.sixtap8x8 = vp8_sixtap_predict8x8_c;
|
| @@ -57,12 +108,12 @@
|
| rtcd->loopfilter.normal_b_v = vp8_loop_filter_bv_c;
|
| rtcd->loopfilter.normal_mb_h = vp8_loop_filter_mbh_c;
|
| rtcd->loopfilter.normal_b_h = vp8_loop_filter_bh_c;
|
| - rtcd->loopfilter.simple_mb_v = vp8_loop_filter_mbvs_c;
|
| + rtcd->loopfilter.simple_mb_v = vp8_loop_filter_simple_vertical_edge_c;
|
| rtcd->loopfilter.simple_b_v = vp8_loop_filter_bvs_c;
|
| - rtcd->loopfilter.simple_mb_h = vp8_loop_filter_mbhs_c;
|
| + rtcd->loopfilter.simple_mb_h = vp8_loop_filter_simple_horizontal_edge_c;
|
| rtcd->loopfilter.simple_b_h = vp8_loop_filter_bhs_c;
|
|
|
| -#if CONFIG_POSTPROC || (CONFIG_VP8_ENCODER && CONFIG_PSNR)
|
| +#if CONFIG_POSTPROC || (CONFIG_VP8_ENCODER && CONFIG_INTERNAL_STATS)
|
| rtcd->postproc.down = vp8_mbpost_proc_down_c;
|
| rtcd->postproc.across = vp8_mbpost_proc_across_ip_c;
|
| rtcd->postproc.downacross = vp8_post_proc_down_and_across_c;
|
| @@ -82,4 +133,7 @@
|
| vp8_arch_arm_common_init(ctx);
|
| #endif
|
|
|
| +#if CONFIG_MULTITHREAD
|
| + ctx->processor_core_count = get_cpu_count();
|
| +#endif /* CONFIG_MULTITHREAD */
|
| }
|
|
|