Generate frameId from timestamp and add creation date field
This commit is contained in:
		@@ -1,9 +1,11 @@
 | 
			
		||||
package camera
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"github.com/cyrilix/robocar-protobuf/go/events"
 | 
			
		||||
	mqtt "github.com/eclipse/paho.mqtt.golang"
 | 
			
		||||
	"github.com/golang/protobuf/proto"
 | 
			
		||||
	"github.com/golang/protobuf/ptypes/timestamp"
 | 
			
		||||
	log "github.com/sirupsen/logrus"
 | 
			
		||||
	"gocv.io/x/gocv"
 | 
			
		||||
	"io"
 | 
			
		||||
@@ -57,8 +59,8 @@ func (o *OpencvCameraPart) Start() error {
 | 
			
		||||
	for {
 | 
			
		||||
		select {
 | 
			
		||||
 | 
			
		||||
		case <-ticker.C:
 | 
			
		||||
			o.publishFrame()
 | 
			
		||||
		case tickerTime := <-ticker.C:
 | 
			
		||||
			o.publishFrame(tickerTime)
 | 
			
		||||
		case <-o.cancel:
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
@@ -77,11 +79,12 @@ func (o *OpencvCameraPart) Stop() {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (o *OpencvCameraPart) publishFrame() {
 | 
			
		||||
func (o *OpencvCameraPart) publishFrame(tickerTime time.Time) {
 | 
			
		||||
	o.muImgBuffered.Lock()
 | 
			
		||||
	defer o.muImgBuffered.Unlock()
 | 
			
		||||
 | 
			
		||||
	o.vc.Read(o.imgBuffered)
 | 
			
		||||
 | 
			
		||||
	img, err := gocv.IMEncode(gocv.JPEGFileExt, *o.imgBuffered)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("unable to convert image to jpeg: %v", err)
 | 
			
		||||
@@ -91,7 +94,11 @@ func (o *OpencvCameraPart) publishFrame() {
 | 
			
		||||
	msg := &events.FrameMessage{
 | 
			
		||||
		Id: &events.FrameRef{
 | 
			
		||||
			Name: "camera",
 | 
			
		||||
			Id:   "XX",
 | 
			
		||||
			Id:   fmt.Sprintf("%d%000d", tickerTime.Unix(), tickerTime.Nanosecond() / 1000 / 1000),
 | 
			
		||||
			CreatedAt: ×tamp.Timestamp{
 | 
			
		||||
				Seconds:              tickerTime.Unix(),
 | 
			
		||||
				Nanos:                int32(tickerTime.Nanosecond()),
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		Frame: img,
 | 
			
		||||
	}
 | 
			
		||||
@@ -105,5 +112,9 @@ func (o *OpencvCameraPart) publishFrame() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var publish = func(client mqtt.Client, topic string, payload *[]byte) {
 | 
			
		||||
	client.Publish(topic, 0, false, *payload)
 | 
			
		||||
	token := client.Publish(topic, 0, false, *payload)
 | 
			
		||||
	token.WaitTimeout(10 * time.Millisecond)
 | 
			
		||||
	if err := token.Error(); err != nil {
 | 
			
		||||
		log.Errorf("unable to publish frame: %v", err)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -69,8 +69,12 @@ func TestOpencvCameraPart(t *testing.T) {
 | 
			
		||||
	if frameMsg.GetId().GetName() != "camera" {
 | 
			
		||||
		t.Errorf("bad name frame: %v, wants %v", frameMsg.GetId().GetName(), "camera")
 | 
			
		||||
	}
 | 
			
		||||
	if frameMsg.GetId().GetId() != "XX" {
 | 
			
		||||
		t.Errorf("bad name frame: %v, wants %v", frameMsg.GetId().GetId(), "XX")
 | 
			
		||||
	if len(frameMsg.GetId().GetId()) != 13 {
 | 
			
		||||
		t.Errorf("bad id length: %v, wants %v", len(frameMsg.GetId().GetId()), 13)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if frameMsg.GetId().GetCreatedAt() == nil {
 | 
			
		||||
		t.Errorf("missin CreatedAt field")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	_, err = jpeg.Decode(bytes.NewReader(frameMsg.GetFrame()))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user