Browse Source

fix memory ex

DevYK 3 years ago
parent
commit
504fb5d08d

+ 1 - 1
CMakeLists.txt

@@ -185,7 +185,7 @@ if (CMAKE_BUILD_TYPE AND (CMAKE_BUILD_TYPE STREQUAL "Debug"))
             ${UTILS_SRC}
             )
     add_executable(video_similarity_comparison src/video_similarity_comparison.cpp
-            ${Project_SRC}
+            ${OpenCV_SRC}
             ${JSON_ROOT_CPP}
             ${FFMPEG_SRC}
             ${UTILS_SRC}

BIN
java/out/production/java/com/bytesflow/opencv/media/test/OpenCVImageBlurTest.class


+ 3 - 3
java/src/com.bytesflow.opencv.media/test/OpenCVImageBlurTest.java

@@ -14,11 +14,11 @@ public class OpenCVImageBlurTest {
     private static String sIMAGE_PATH = "/Users/devyk/Downloads/IMG_3067.PNG";
     private static String sSO_PATH = "/Users/devyk/Data/Project/sample/github_code/OpenCVSample/output/lib/libpiaoquan_java_opencv.dylib";
 
-    private static String [] sVIS = {"{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/qa/20220314/62678246TdSZ1RWr9CQyL7jDZ.mp4\",\"clips\":[{\"startTimeMs\":6400,\"endTimeMs\":7400},{\"startTimeMs\":12800,\"endTimeMs\":13800},{\"startTimeMs\":19200,\"endTimeMs\":20200},{\"startTimeMs\":25600,\"endTimeMs\":26600},{\"startTimeMs\":32000,\"endTimeMs\":33000},{\"startTimeMs\":38400,\"endTimeMs\":39400},{\"startTimeMs\":44800,\"endTimeMs\":45800},{\"startTimeMs\":51200,\"endTimeMs\":52200}]}",
+    private static String [] sVIS = {"{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/qa/20220314/6267824rwLv7IntDRwKxLG7y6.m3u8\",\"clips\":[{\"startTimeMs\":119900,\"endTimeMs\":120900},{\"startTimeMs\":239800,\"endTimeMs\":240800},{\"startTimeMs\":359700,\"endTimeMs\":360700},{\"startTimeMs\":479600,\"endTimeMs\":480600},{\"startTimeMs\":599500,\"endTimeMs\":600500},{\"startTimeMs\":719400,\"endTimeMs\":720400},{\"startTimeMs\":839300,\"endTimeMs\":840300},{\"startTimeMs\":959200,\"endTimeMs\":960200}]}",
     "{\"videoPath\":\"http://rescdn.yishihui.com/longvideo/transcode/video/qa/20220314/6267824Z0EoT5Pr61RFNcKI07.mp4\",\"clips\":[{\"startTimeMs\":2000,\"endTimeMs\":3000},{\"startTimeMs\":4000,\"endTimeMs\":5000},{\"startTimeMs\":6000,\"endTimeMs\":7000},{\"startTimeMs\":8000,\"endTimeMs\":9000},{\"startTimeMs\":10000,\"endTimeMs\":11000},{\"startTimeMs\":12000,\"endTimeMs\":13000},{\"startTimeMs\":14000,\"endTimeMs\":15000},{\"startTimeMs\":16000,\"endTimeMs\":17000}]}"};
     private static volatile  int vis_index = 0;
     public static void main(String[] args) {
-        int count = 2;
+        int count = 1;
         if (args.length > 0) {
             sIMAGE_PATH = args[0];
             sSO_PATH = args[1];
@@ -31,7 +31,7 @@ public class OpenCVImageBlurTest {
             return;
         }
         ExecutorService executorService = Executors.newFixedThreadPool(count);
-        for (; ; ) {
+        for (int j = 0; j < count; j++)  {
             long startTime = System.currentTimeMillis();
             CountDownLatch countDownLatch = new CountDownLatch(count);
             vis_index = 0;

+ 10 - 2
src/ffmpeg/av_decode.cpp

@@ -89,11 +89,18 @@ static int av_decode(struct DecoderContext *pContext, AVPacket *pPacket, enum AV
         else
             pts = out_frame->pts * (1000 *
                                     (av_q2d(pContext->avformatContext->streams[pContext->st_index[type]]->time_base)));
-        if (pContext->end_time > 0 && pts > pContext->end_time && type == AVMEDIA_TYPE_VIDEO)return -4;
-        if (pContext->end_time > 0 && pts > pContext->end_time && type == AVMEDIA_TYPE_AUDIO)return 0;
+        if (pContext->end_time > 0 && pts > pContext->end_time && type == AVMEDIA_TYPE_VIDEO){
+            av_frame_free(&out_frame);
+            return -4;
+        }
+        if (pContext->end_time > 0 && pts > pContext->end_time && type == AVMEDIA_TYPE_AUDIO){
+            av_frame_free(&out_frame);
+            return 0;
+        }
 
 //        LOGE("decode is video=%d pts=%lld \n",pPacket->stream_index == pContext->st_index[AVMEDIA_TYPE_VIDEO],pts);
         if (pts < pContext->start_time && pContext->start_time >= 0 && pContext->force_Iframe != 1) {
+            av_frame_free(&out_frame);
             continue;
         }
 
@@ -403,6 +410,7 @@ void *av_read_decode_thread(void *pVoid) {
                     } else {
                         ret = av_decode(ctx, pkg, type);
                         if (ret == -4) {
+                            av_packet_free(&pkg);
                             break;
                         }
                     }

+ 43 - 18
src/video_similarity_comparison.cpp

@@ -55,6 +55,48 @@ static int *list_sim_compare(std::vector<ImageHashModel *> a, std::vector<ImageH
     return arr;
 }
 
+static void run(){
+
+    const char *input_json = "{\n"
+                             "  \"videoPath\": \"http://rescdn.yishihui.com/longvideo/transcode/video/qa/20220314/6267824rwLv7IntDRwKxLG7y6.m3u8\",\n"
+                             "  \"clips\": [\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 119900,\n"
+//                             "      \"endTimeMs\": 120900\n"
+//                             "    },\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 239800,\n"
+//                             "      \"endTimeMs\": 240800\n"
+//                             "    },\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 359700,\n"
+//                             "      \"endTimeMs\": 360700\n"
+//                             "    },\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 479600,\n"
+//                             "      \"endTimeMs\": 480600\n"
+//                             "    },\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 599500,\n"
+//                             "      \"endTimeMs\": 600500\n"
+//                             "    },\n"
+//                             "    {\n"
+//                             "      \"startTimeMs\": 719400,\n"
+//                             "      \"endTimeMs\": 720400\n"
+//                             "    },\n"
+                             "    {\n"
+                             "      \"startTimeMs\": 839300,\n"
+                             "      \"endTimeMs\": 840300\n"
+                             "    },\n"
+                             "    {\n"
+                             "      \"startTimeMs\": 959200,\n"
+                             "      \"endTimeMs\": 960200\n"
+                             "    }\n"
+                             "  ]\n"
+                             "}";
+    const char *ret_json = get_video_similarity_list(input_json);
+    printf("ret_json=%s\n",ret_json);
+}
 
 /**
  * 1、判断比对文件的 MD5 是否相等
@@ -67,24 +109,7 @@ static int *list_sim_compare(std::vector<ImageHashModel *> a, std::vector<ImageH
  * @return
  */
 int main(int argc, char *argv[]) {
-
-    const char *input_json = "{\n"
-                             "    \"videoPath\": \"/Users/devyk/Data/Project/sample/github_code/OpenCVSample/temp/19581045gIiFKepxbbplF3XtsG\",\n"
-                             "    \"clips\": [\n"
-                             "        {\n"
-                             "            \"startTimeMs\": 0,\n"
-                             "            \"endTimeMs\": 1000\n"
-                             "        },\n"
-                             "        {\n"
-                             "            \"startTimeMs\": 2000,\n"
-                             "            \"endTimeMs\": 3000\n"
-                             "        },\n"
-                             "        {\n"
-                             "            \"startTimeMs\": 5000,\n"
-                             "            \"endTimeMs\": 5500\n"
-                             "        }\n"
-                             "    ]\n"
-                             "}";
+    run();
 
 //    const char *out_json = "{\n"
 //                           "    \"videoPath\": \"\\\"/root/data/xxx.mp4\\\"\",\n"