diff --git a/ingest.py b/ingest.py index d0a026c..089f004 100755 --- a/ingest.py +++ b/ingest.py @@ -59,15 +59,25 @@ def mk_video_src(args, videocaps): decodebin ! """ - elif args.video_source == 'hdmi2usb': - # https://hdmi2usb.tv - # Note: this code works with 720p + elif args.video_source in ('hdmi2usb', 'uvc-mjpeg'): video_src = """ v4l2src {attribs} name=videosrc ! + """ + video_src += """ queue max-size-time=4000000000 ! - image/jpeg,width=1280,height=720 ! + image/jpeg,{caps} ! jpegdec ! - """ + """.format(caps=extract_caps(videocaps)) + + elif args.video_source == 'uvc-raw': + + video_src = """ + v4l2src {attribs} name=videosrc ! + """ + video_src += """ + video/x-raw,{caps} ! + """.format( + caps=extract_caps(videocaps)) elif args.video_source == 'ximage': # startx=0 starty=0 endx=1919 endy=1079 ! @@ -210,6 +220,13 @@ def mk_audio_src(args, audiocaps): return audio_src +def extract_caps(videocaps, caps=("width", "height")): + """Filter out caps (list of keys) from a videocaps strings""" + parts = videocaps.split(',') + filtered = [cap for cap in parts if cap.split('=')[0] in caps] + return ','.join(filtered) + + def mk_client(core_ip, port): client = "tcpclientsink host={host} port={port}".format( @@ -387,8 +404,8 @@ def get_args(): parser.add_argument( '--video-source', action='store', choices=[ - 'dv', 'hdv', 'udp_h264', 'hdmi2usb', 'blackmagic', - 'ximage', 'png', 'file', 'rtmp', 'test', 'spacescope'], + 'dv', 'hdv', 'udp_h264', 'hdmi2usb', 'uvc-mjpeg', 'uvc-raw', + 'blackmagic', 'ximage', 'png', 'file', 'rtmp', 'test', 'spacescope'], default='test', help="Where to get video from")