From f533c05644559cf05556e65a0dd28a775f376580 Mon Sep 17 00:00:00 2001 From: Alexey Ershov Date: Thu, 10 Sep 2015 15:41:04 +0300 Subject: [PATCH] sample changed to execute only one mode (interop on/off) per run --- samples/va_intel/va_intel_interop.cpp | 66 +++++++++++++++++++++++---- 1 file changed, 56 insertions(+), 10 deletions(-) diff --git a/samples/va_intel/va_intel_interop.cpp b/samples/va_intel/va_intel_interop.cpp index 4c6ffb0f4d..1175a14aab 100644 --- a/samples/va_intel/va_intel_interop.cpp +++ b/samples/va_intel/va_intel_interop.cpp @@ -203,7 +203,7 @@ static void dumpSurface(VADisplay display, VASurfaceID surface_id, const char* f printf("image.pitches[0..2] = 0x%08x 0x%08x 0x%08x\n", image.pitches[0], image.pitches[1], image.pitches[2]); printf("image.offsets[0..2] = 0x%08x 0x%08x 0x%08x\n", image.offsets[0], image.offsets[1], image.offsets[2]); */ - std::string fn = std::string(fileName) + std::string(doInterop ? ".gpu" : ".cpu"); + std::string fn = std::string(fileName) + std::string(doInterop ? ".on" : ".off"); FILE* out = fopen(fn.c_str(), "wb"); if (!out) { @@ -232,7 +232,6 @@ static float run(const char* fn1, const char* fn2, bool doInterop) VAStatus va_status; Timer t; - fprintf(stderr, "Run on %s\n", doInterop ? "GPU" : "CPU"); cv::va_intel::ocl::initializeContextFromVA(va::display, doInterop); va_status = vaQueryConfigEntrypoints(va::display, VAProfileMPEG2Main, entrypoints, @@ -352,13 +351,58 @@ static float run(const char* fn1, const char* fn2, bool doInterop) return t.time(Timer::MSEC); } -int main(int argc,char **argv) +class CmdlineParser { - if (argc < 3) +public: + CmdlineParser(int argc, char** argv): + m_argc(argc), m_argv(argv) + {} + // true => go, false => usage/exit; extra args/unknown options are ignored for simplicity + bool run() + { + int n = 0; + m_files[0] = m_files[1] = 0; + m_interop = true; + for (int i = 1; i < m_argc; ++i) + { + const char *arg = m_argv[i]; + if (arg[0] == '-') // option + { + if (!strcmp(arg, "-f")) + m_interop = false; + } + else // parameter + { + if (n < 2) + m_files[n++] = arg; + } + } + return bool(n >= 2); + } + bool isInterop() const + { + return m_interop; + } + const char* getFile(int n) const + { + return ((n >= 0) && (n < 2)) ? m_files[n] : 0; + } +private: + int m_argc; + char** m_argv; + const char* m_files[2]; + bool m_interop; +}; + +int main(int argc, char** argv) +{ + CmdlineParser cmd(argc, argv); + if (!cmd.run()) { fprintf(stderr, - "Usage: va_intel_interop file1 file2\n\n" - "where: file1 is to be created, contains original surface data (NV12)\n" + "Usage: va_intel_interop [-f] file1 file2\n\n" + "where: -f option indicates interop is off (fallback mode); interop is on by default\n" + " file1 is to be created, contains original surface data (NV12)\n" " file2 is to be created, contains processed surface data (NV12)\n"); exit(0); } @@ -370,11 +414,13 @@ int main(int argc,char **argv) } fprintf(stderr, "VA display opened successfully\n"); - float gpuTime = run(argv[1], argv[2], true); - float cpuTime = run(argv[1], argv[2], false); + const char* file0 = cmd.getFile(0); + const char* file1 = cmd.getFile(1); + bool doInterop = cmd.isInterop(); + + float time = run(file0, file1, doInterop); - fprintf(stderr, "GPU processing time, msec: %7.3f\n", gpuTime); - fprintf(stderr, "CPU processing time, msec: %7.3f\n", cpuTime); + fprintf(stderr, "Interop %s: processing time, msec: %7.3f\n", (doInterop ? "ON " : "OFF"), time); va::closeDisplay(); return 0;