From 7e98d8c98b3c6aed09da67e1652e2b78bc4a964f Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 24 九月 2019 14:17:18 +0800
Subject: [PATCH] use decode only

---
 capture.go |   36 +++++++++++++++---------------------
 1 files changed, 15 insertions(+), 21 deletions(-)

diff --git a/capture.go b/capture.go
index 936c4fe..050d85c 100644
--- a/capture.go
+++ b/capture.go
@@ -34,41 +34,36 @@
 	InvalidFileExt PicExt = PicExt("")
 )
 
-const (
-	soFileRtsp = "./runtime/libcffmpeg.so"
-	soFileGB   = "./runtime/libcffmpeg_gb28181.so"
-)
-
 // Capture pic
-func Capture(m StreamMode, url string, ext PicExt, w, h, maxTry int) ([]byte, error) {
+func Capture(soFile string, m StreamMode, url string, ext PicExt, w, h, maxTry int) ([]byte, error) {
+	if m != GB28181 && m != Rtsp {
+		return nil, errors.New("there is no this mode, try capture.Rtsp/capture.GB28181")
+	}
+
 	if ext == InvalidFileExt {
 		ext = JPEGFileExt
 	}
 	var ret []byte
 	var err error
 
-	if m == Rtsp {
-		err = goffmpeg.InitFFmpeg(soFileRtsp)
-	} else if m == GB28181 {
-		err = goffmpeg.InitFFmpeg(soFileGB)
-	} else {
-		err = errors.New("there is no this mode, try capture.Rtsp/capture.GB28181")
-	}
+	err = goffmpeg.InitFFmpeg(soFile)
 	if err != nil {
 		return nil, err
 	}
 
-	ret, err = capt2Data(url, gocv.FileExt(ext), w, h, maxTry)
+	ret, err = capt2Data(url, m, gocv.FileExt(ext), w, h, maxTry)
+
 	goffmpeg.FreeFFmpeg()
 
 	return ret, err
 }
 
-func capt2Data(url string, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) {
+func capt2Data(url string, m StreamMode, ext gocv.FileExt, w, h, maxTry int) ([]byte, error) {
 
-	gf := goffmpeg.New()
-	gf.Run(url)
-	gf.BuildDecoder()
+	gb := false
+	if m == GB28181 {
+		gb = true
+	}
 
 	tryTime := 0
 
@@ -76,7 +71,7 @@
 	var err2 error
 	for {
 
-		data, wid, hei := gf.GetPicDecoder()
+		data, wid, hei := goffmpeg.Decode(url, gb)
 		if wid > 0 && hei > 0 {
 			img, err := gocv.NewMatFromBytes(hei, wid, gocv.MatTypeCV8UC3, data)
 			if err != nil {
@@ -100,9 +95,8 @@
 			time.Sleep(time.Second)
 		}
 	}
-	gf.Free()
 
-	if tryTime > maxTry {
+	if tryTime >= maxTry {
 		err := fmt.Sprintf("try %d times to capture image, is url correct?\n", tryTime)
 		return nil, errors.New(err)
 	}

--
Gitblit v1.8.0