From e3d02acd52ca4604b17b73d0aea3bb9097876f39 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期日, 17 十一月 2019 12:28:53 +0800
Subject: [PATCH] update

---
 csrc/ffmpeg/format/FormatIn.cpp |    2 +-
 csrc/common/gpu/info.cpp        |   31 +++++++++++++++++++++++++++++++
 csrc/common/gpu/info.h          |    1 +
 3 files changed, 33 insertions(+), 1 deletions(-)

diff --git a/csrc/common/gpu/info.cpp b/csrc/common/gpu/info.cpp
index d38a8ae..d19de83 100644
--- a/csrc/common/gpu/info.cpp
+++ b/csrc/common/gpu/info.cpp
@@ -369,6 +369,37 @@
     return suitable_gpu;
 }
 
+int getGPUPrior(const int need, const int reserved, const int lastChoice){
+    nvGpuInfo_t gpu_info;
+
+    int ret = get_gpu_info(&gpu_info);
+    if(!ret){
+        if (gpu_info.device_count == 0) return -1;
+
+        int suitable_gpu = -1;
+        int mem_idle = need;
+        for(int i = 0; i < gpu_info.device_count; i++){
+            if (i != lastChoice){
+                int mem_free = gpu_info.devices[i].memory_free >> 20;
+                if(mem_free > mem_idle){
+                    mem_idle = mem_free;
+                    suitable_gpu = i;
+                }
+            }
+        }
+        if (suitable_gpu != -1){
+            return suitable_gpu;
+        }else{
+            if (gpu_info.device_count <= lastChoice) return -1;
+            int mem_free = (gpu_info.devices[lastChoice].memory_free >> 20) - reserved;
+            if(mem_free > need){
+                return lastChoice;
+            }
+        }
+    }
+    return -1;
+}
+
 int getGPU(const int need){
     nvGpuInfo_t gpu_buf;
 
diff --git a/csrc/common/gpu/info.h b/csrc/common/gpu/info.h
index 73da8ab..614a4cb 100644
--- a/csrc/common/gpu/info.h
+++ b/csrc/common/gpu/info.h
@@ -3,6 +3,7 @@
 
 namespace gpu{
     int getGPU(const int need);
+    int getGPUPrior(const int need, const int reserved, const int lastChoice);
 }
 
 #endif
\ No newline at end of file
diff --git a/csrc/ffmpeg/format/FormatIn.cpp b/csrc/ffmpeg/format/FormatIn.cpp
index 376c9de..6aaefd3 100644
--- a/csrc/ffmpeg/format/FormatIn.cpp
+++ b/csrc/ffmpeg/format/FormatIn.cpp
@@ -194,7 +194,7 @@
 		for (int i = 0; i < 2; ++i)
 		{
 			if(hw_accl_){
-                idle_gpu = gpu::getGPU(100);
+                idle_gpu = gpu::getGPUPrior(300, 1024, 0);
                 if(idle_gpu < 0){
                     logIt("NO GPU RESOURCE TO DECODE");
                     hw_accl_ = false;

--
Gitblit v1.8.0