]> git.parisson.com Git - telecaster-server.git/commitdiff
goto RGB, add C920 OSC controller for TouchOSC
authorGuillaume Pellerin <yomguy@parisson.com>
Wed, 12 Nov 2014 12:24:11 +0000 (13:24 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Wed, 12 Nov 2014 12:24:11 +0000 (13:24 +0100)
tests/control_zoom_exp_osc.py [new file with mode: 0644]
tests/gst_h264_jack_webm.sh [new file with mode: 0644]
tests/gst_h264_src.sh [new file with mode: 0755]
tests/tc_video_only_simple_webm.sh
tests/tc_video_simple_webm_stream.sh
tests/webcam.sh [new file with mode: 0755]

diff --git a/tests/control_zoom_exp_osc.py b/tests/control_zoom_exp_osc.py
new file mode 100644 (file)
index 0000000..5ba35f5
--- /dev/null
@@ -0,0 +1,100 @@
+#!/usr/bin/python
+import gobject; gobject.threads_init()
+import pygst; pygst.require("0.10")
+import os, gst
+from threading import Thread
+
+
+class OSCController(Thread):
+
+    def __init__(self, port):
+        Thread.__init__(self)
+        import liblo
+        self.port = port
+        try:
+            self.server = liblo.Server(self.port)
+        except liblo.ServerError, err:
+            print str(err)
+        # self.server.add_method(None, None, self.fallback)
+
+    def fallback(self, path, args, types, src):
+        print "got unknown message '%s' from '%s'" % (path, src.get_url())
+        for a, t in zip(args, types):
+            print "argument of type '%s': %s" % (t, a)
+
+    def add_method(self, path, type, method):
+        self.server.add_method(path, type, method)
+
+    def run(self):
+        while True:
+            self.server.recv(100)
+
+
+class V4L2Controller(object):
+
+    def __init__(self, video_id=0, osc_port=12345):
+        self.osc_port = osc_port
+        self.osc = OSCController(self.osc_port)
+        self.video_id = video_id
+
+        self.zoom_param = 'zoom_absolute'
+        self.zoom_range = [100, 250]
+        self.zoom_path = '/1/fader1'
+        self.zoom_toggle = '/1/toggle1'
+        self.osc.add_method(self.zoom_toggle, 'f', self.zoom_toggle_callback)
+        self.osc.add_method(self.zoom_path, 'f', self.zoom_callback)
+        self.zoom = False
+
+        self.exposure_param = 'exposure_absolute'
+        self.exposure_range = [0, 250]
+        self.exposure_path = '/1/fader2'
+        self.exposure_toggle = '/1/toggle2'
+        self.osc.add_method(self.exposure_toggle, 'f', self.exposure_toggle_callback)
+        self.osc.add_method(self.exposure_path, 'f', self.exposure_callback)
+        self.exposure = False
+
+    def set_param(self, param, value):
+        command = 'v4l2-ctl -d ' + str(self.video_id) + ' -c ' + param + '=' + value
+        print command
+        os.system(command)
+
+    def zoom_toggle_callback(self, path, args, types, src):
+        for a, t in zip(args, types):
+            value = a
+        if not value:
+            self.zoom = False
+        else:
+            self.zoom = True
+
+    def zoom_callback(self, path, args, types, src):
+        for a, t in zip(args, types):
+            value = a
+        if self.zoom:
+            zoom_value = self.zoom_range[0] + (self.zoom_range[1] - self.zoom_range[0]) * value
+            self.set_param(self.zoom_param, str(int(zoom_value)))
+
+    def exposure_toggle_callback(self, path, args, types, src):
+        for a, t in zip(args, types):
+            value = a
+        if not value:
+            self.set_param('exposure_auto', str(3))
+            self.exposure = False
+        else:
+            self.set_param('exposure_auto', str(1))
+            self.exposure = True
+
+    def exposure_callback(self, path, args, types, src):
+        for a, t in zip(args, types):
+            value = a
+        if self.exposure:
+            exposure_value = self.exposure_range[0] + (self.exposure_range[1] - self.exposure_range[0]) * value
+            self.set_param(self.exposure_param, str(int(exposure_value)))
+
+    def run(self):
+        self.osc.start()
+
+
+if __name__ == '__main__':
+    controller = V4L2Controller(video_id=1)
+    controller.run()
+
diff --git a/tests/gst_h264_jack_webm.sh b/tests/gst_h264_jack_webm.sh
new file mode 100644 (file)
index 0000000..04ab5dc
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+# Start TeleCaster video channel
+
+#WIDTH=640
+#HEIGHT=360
+WIDTH=864
+HEIGHT=480
+#WIDTH=1280
+#HEIGHT=720
+
+# gst-launch-1.0 tcpclientsrc host=$1 port=$2  \
+#      ! gdpdepay ! rtph264depay ! avdec_h264 \
+#      ! videoconvert \
+#         ! queue ! vp8enc threads=4 ! queue ! muxout. \
+#         jackaudiosrc connect=2 ! audio/x-raw, format=F32LE, channels=2 \
+#         ! audioconvert ! audioresample ! audio/x-raw, rate=48000 ! vorbisenc quality=0.3 ! queue ! muxout.  \
+#         webmmux streamable=true name=muxout \
+#         ! tcpserversink host=127.0.0.1 port=10001
+
+
+# gst-launch-1.0 tcpclientsrc host=$1 port=$2  \
+#      ! queue ! gdpdepay ! rtph264depay ! avdec_h264 \
+#         ! vp8enc threads=4 target-bitrate=1000000 auto-alt-ref=true \
+#         ! webmmux streamable=true name=muxout \
+#         ! tcpserversink host=127.0.0.1 port=10001
+
+
+gst-launch-0.10 tcpclientsrc host=$1 port=$2  \
+       ! queue ! gdpdepay ! rtph264depay ! ffdec_h264 \
+        ! queue ! vp8enc speed=2 threads=4 quality=5.0 \
+        ! queue ! webmmux streamable=true name=muxout \
+        ! tcpserversink host=127.0.0.1 port=10001 sync-method=1
+
+
diff --git a/tests/gst_h264_src.sh b/tests/gst_h264_src.sh
new file mode 100755 (executable)
index 0000000..6e774fb
--- /dev/null
@@ -0,0 +1,3 @@
+gst-launch-1.0 -v tcpclientsrc host=$1 port=$2  \
+    ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert \
+    ! autovideosink sync=false
index 7c92b88d97b37cc2525707d8d436861ba998af7d..236ec87cf4c348ae3656d6310d8782c656cee004 100755 (executable)
@@ -2,14 +2,14 @@
 
 # Start TeleCaster video channel
 
-WIDTH=640
-HEIGHT=480
+WIDTH=320
+HEIGHT=240
 #WIDTH=1024
 #HEIGHT=576
 
-gst-launch v4l2src device=/dev/video0 ! video/x-raw-yuv, width=$WIDTH, height=$HEIGHT  \
+gst-launch v4l2src device=/dev/video0 ! video/x-raw-rgb, width=$WIDTH, height=$HEIGHT  \
        ! queue ! ffmpegcolorspace \
        ! queue ! vp8enc speed=2 threads=4 quality=5.0 ! queue ! muxout. \
        webmmux streamable=true name=muxout \
-       ! queue ! tcpserversink host=127.0.0.1 port=9000 protocol=none 
+       ! queue ! tcpserversink host=127.0.0.1 port=9000 protocol=none
 
index d41d76fc2b7ebb6f2343d4d4c6f953ac5b537813..c2a2587c554c9f34902c11890a90f82db2bd9eaa 100755 (executable)
@@ -2,14 +2,23 @@
 
 # Start TeleCaster video channel
 
-WIDTH=640
+#WIDTH=640
+#HEIGHT=360
+WIDTH=864
 HEIGHT=480
+#WIDTH=1280
+#HEIGHT=720
 
-gst-launch v4l2src device=/dev/video0 ! video/x-raw-yuv, width=$WIDTH, height=$HEIGHT, framerate={30/1}  \
-       ! queue ! ffmpegcolorspace \
-       ! queue ! vp8enc speed=2 threads=4 quality=7.0 max-latency=2 max-keyframe-distance=3 auto-alt-ref-frames=true  ! queue ! muxout. \
-       jackaudiosrc connect=2 client-name=webmenc ! audio/x-raw-float, channels=2 \
-       ! queue ! audioconvert ! queue ! vorbisenc quality=0.3 ! queue ! muxout.  \
-       webmmux streamable=true name=muxout \
-       ! queue ! tcpserversink host=127.0.0.1 port=9000 protocol=none blocksize=65536 sync-method=1
+v4l2-ctl -d $1 -c power_line_frequency=1 -c zoom_absolute=$2
+v4l2-ctl -d $1 -c focus_auto=0
+v4l2-ctl -d $1 -c focus_absolute=1
 
+gst-launch v4l2src device=/dev/video$1 ! video/x-raw-rgb, width=$WIDTH, height=$HEIGHT, framerate={30/1}  \
+        ! queue ! videoflip method=rotate-180 \
+        ! queue ! ffmpegcolorspace \
+        ! queue ! vp8enc speed=2 threads=4 quality=10.0 max-latency=25 max-keyframe-distance=30 auto-alt-ref-frames=true  ! queue ! muxout. \
+        jackaudiosrc connect=2 ! audio/x-raw-float, channels=2 \
+        ! queue ! audioconvert ! queue ! vorbisenc quality=0.3 ! queue ! muxout.  \
+        webmmux streamable=true name=muxout \
+        ! queue ! tcpserversink host=127.0.0.1 port=9000 sync-method=1 \
+        > /dev/null
diff --git a/tests/webcam.sh b/tests/webcam.sh
new file mode 100755 (executable)
index 0000000..67fdcf7
--- /dev/null
@@ -0,0 +1,2 @@
+gst-launch-0.10 v4l2src device=/dev/video1 ! video/x-raw-rgb, width=864, height=480 \
+       ! queue ! ffmpegcolorspace ! ximagesink