派生自 libgowrapper/face

zhangmeng
2020-01-15 677aeb36d939c7425e09b72cb20bed701951e5a2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package common
 
import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "strconv"
 
    "basic.com/pubsub/protomsg.git"
    "basic.com/valib/deliver.git"
    "github.com/gogo/protobuf/proto"
)
 
const mode = deliver.PushPull
 
// MsgRS msg recv and snd
type MsgRS struct {
    Msg protomsg.SdkMessage
}
 
// GetIpcAddress get ipc
func GetIpcAddress(shm bool, id string) string {
    if shm {
        return id
    }
    return `ipc:///tmp/` + id + `.ipc`
}
 
// SubConfig sub
type SubConfig struct {
    SoFile string            `json:"so_file_path"`
    Env    string            `json:"runtime"`
    Param  map[string]string `json:"param"`
}
 
// SdkConfig sdk
type SdkConfig struct {
    SoFile string            `json:"so_file_path"`
    Env    string            `json:"runtime"`
    Param  map[string]string `json:"param"`
    Sub    *SubConfig        `json:"sub"`
}
 
// ReadConfig conf
func ReadConfig(file string) (SdkConfig, error) {
    data, err := ioutil.ReadFile(file)
    if err != nil {
        return SdkConfig{}, fmt.Errorf("READ SDK CONFIG FILE %s ERROR", file)
    }
 
    //读取的数据为json格式,需要进行解码
    var v SdkConfig
    err = json.Unmarshal(data, &v)
 
    return v, err
}
 
// Atoi atoi
func Atoi(s string) int {
    i, _ := strconv.Atoi(s)
    return i
}
 
// EjectResult eject
func EjectResult(res []byte, msg MsgRS, out chan<- MsgRS) {
 
    if res == nil {
        out <- msg
        return
    }
    index := int(msg.Msg.Tasklab.Index)
 
    if index >= len(msg.Msg.Tasklab.Sdkinfos) {
        return
    }
 
    msg.Msg.Tasklab.Sdkinfos[index].Sdkdata = res
 
    out <- msg
}
 
/////////////////////////////////////////////////////////////
 
// ValidRemoteMessage valid or not
func ValidRemoteMessage(msg MsgRS, fnName string, fn func(...interface{})) bool {
    if msg.Msg.Tasklab == nil {
        fn(fnName, " recieve msg nil")
        return false
    }
 
    sdkLen := len(msg.Msg.Tasklab.Sdkinfos)
    if sdkLen == 0 {
        fn(fnName, " has no sdk info")
        return false
    }
 
    curIndex := int(msg.Msg.Tasklab.Index)
    if curIndex < 0 || curIndex >= sdkLen {
        fn(fnName, " tasklab index ", curIndex, " error")
        return false
    }
    if msg.Msg.Tasklab.Sdkinfos[curIndex].Sdktype != fnName {
        fn(fnName, " is different from ", msg.Msg.Tasklab.Sdkinfos[curIndex].Sdktype)
        return false
    }
    return true
}
 
// UnpackImage unpack
func UnpackImage(msg MsgRS, fnName string, fn func(...interface{})) *protomsg.Image {
    // 反序列化数据得到sdk入参
    i := &protomsg.Image{}
    err := proto.Unmarshal(msg.Msg.Data, i)
    if err != nil {
        fn(fnName, " protobuf decode CameraImage error: ", err.Error())
        return nil
    }
    if i.Data == nil {
        fn(fnName, " protomsg.Image data null")
        return nil
    }
    return i
}