From: Guillaume Pellerin Date: Wed, 12 Nov 2014 12:24:11 +0000 (+0100) Subject: goto RGB, add C920 OSC controller for TouchOSC X-Git-Tag: 1.0~2^2~12 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=b8be14e5293c01f740ce7979ca43836e5da1ab53;p=telecaster-server.git goto RGB, add C920 OSC controller for TouchOSC --- diff --git a/tests/control_zoom_exp_osc.py b/tests/control_zoom_exp_osc.py new file mode 100644 index 0000000..5ba35f5 --- /dev/null +++ b/tests/control_zoom_exp_osc.py @@ -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 index 0000000..04ab5dc --- /dev/null +++ b/tests/gst_h264_jack_webm.sh @@ -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 index 0000000..6e774fb --- /dev/null +++ b/tests/gst_h264_src.sh @@ -0,0 +1,3 @@ +gst-launch-1.0 -v tcpclientsrc host=$1 port=$2 \ + ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert \ + ! autovideosink sync=false diff --git a/tests/tc_video_only_simple_webm.sh b/tests/tc_video_only_simple_webm.sh index 7c92b88..236ec87 100755 --- a/tests/tc_video_only_simple_webm.sh +++ b/tests/tc_video_only_simple_webm.sh @@ -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 diff --git a/tests/tc_video_simple_webm_stream.sh b/tests/tc_video_simple_webm_stream.sh index d41d76f..c2a2587 100755 --- a/tests/tc_video_simple_webm_stream.sh +++ b/tests/tc_video_simple_webm_stream.sh @@ -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 index 0000000..67fdcf7 --- /dev/null +++ b/tests/webcam.sh @@ -0,0 +1,2 @@ +gst-launch-0.10 v4l2src device=/dev/video1 ! video/x-raw-rgb, width=864, height=480 \ + ! queue ! ffmpegcolorspace ! ximagesink