From c03f08e5c7acbb85637280f5ddc0fbace8ea2de0 Mon Sep 17 00:00:00 2001 From: James Dong Date: Fri, 17 Jun 2011 16:50:13 -0700 Subject: [PATCH] Boost software vp8 decoder performance using multi-threaded decoding if possible Change-Id: I7258c7d0cf91aa7c62444d03ed8bce96fb23d8ef related-to-bug: 4539653 --- .../libstagefright/codecs/on2/dec/SoftVPX.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp index e9ce719469bdc..7e83163c922e5 100644 --- a/media/libstagefright/codecs/on2/dec/SoftVPX.cpp +++ b/media/libstagefright/codecs/on2/dec/SoftVPX.cpp @@ -117,11 +117,27 @@ void SoftVPX::initPorts() { addPort(def); } +static int GetCPUCoreCount() { + int cpuCoreCount = 1; +#if defined(_SC_NPROCESSORS_ONLN) + cpuCoreCount = sysconf(_SC_NPROCESSORS_ONLN); +#else + // _SC_NPROC_ONLN must be defined... + cpuCoreCount = sysconf(_SC_NPROC_ONLN); +#endif + CHECK(cpuCoreCount >= 1); + LOGV("Number of CPU cores: %d", cpuCoreCount); + return cpuCoreCount; +} + status_t SoftVPX::initDecoder() { mCtx = new vpx_codec_ctx_t; vpx_codec_err_t vpx_err; + vpx_codec_dec_cfg_t cfg; + memset(&cfg, 0, sizeof(vpx_codec_dec_cfg_t)); + cfg.threads = GetCPUCoreCount(); if ((vpx_err = vpx_codec_dec_init( - (vpx_codec_ctx_t *)mCtx, &vpx_codec_vp8_dx_algo, NULL, 0))) { + (vpx_codec_ctx_t *)mCtx, &vpx_codec_vp8_dx_algo, &cfg, 0))) { LOGE("on2 decoder failed to initialize. (%d)", vpx_err); return UNKNOWN_ERROR; }