diff options
Diffstat (limited to 'voctocore')
-rw-r--r-- | voctocore/default-config.ini | 6 | ||||
-rw-r--r-- | voctocore/lib/avpreviewoutput.py | 29 |
2 files changed, 32 insertions, 3 deletions
diff --git a/voctocore/default-config.ini b/voctocore/default-config.ini index 31a49ff..4c85abb 100644 --- a/voctocore/default-config.ini +++ b/voctocore/default-config.ini @@ -62,9 +62,13 @@ mix_out=10000 enabled=false deinterlace=false +; use vaapi to encode the previews, can be h264, mpeg2 or jpeg (BUT ONLY h264 IS TESTED) +; not all encoders are available on all CPUs +;vaapi=h264 + ; default to mix-videocaps, only applicable if enabled=true ; you can change the framerate and the width/height, but nothing else -videocaps=video/x-raw,width=1024,height=576,framerate=25/1 +;videocaps=video/x-raw,width=1024,height=576,framerate=25/1 [stream-blanker] enabled=true diff --git a/voctocore/lib/avpreviewoutput.py b/voctocore/lib/avpreviewoutput.py index 749249b..4d4f70e 100644 --- a/voctocore/lib/avpreviewoutput.py +++ b/voctocore/lib/avpreviewoutput.py @@ -23,6 +23,30 @@ class AVPreviewOutput(TCPMultiConnection): if Config.getboolean('previews', 'deinterlace'): deinterlace = "deinterlace mode=interlaced !" + venc = 'jpegenc quality=90' + if Config.has_option('previews', 'vaapi'): + try: + encoder = Config.get('previews', 'vaapi') + if Gst.version() < (1, 8): + encoders = { + 'h264': 'vaapiencode_h264 rate-control=cqp init-qp=10 ' + 'max-bframes=0 keyframe-period=60', + 'jpeg': 'vaapiencode_jpeg quality=90' + 'keyframe-period=0', + 'mpeg2': 'vaapiencode_mpeg2 keyframe-period=60', + } + else: + encoders = { + 'h264': 'vaapih264enc rate-control=cqp init-qp=10 ' + 'max-bframes=0 keyframe-period=60', + 'jpeg': 'vaapijpegenc quality=90' + 'keyframe-period=0', + 'mpeg2': 'vaapimpeg2enc keyframe-period=60', + } + venc = encoders[encoder] + except Exception as e: + self.log.error(e) + pipeline = """ intervideosrc channel=video_{channel} ! {vcaps_in} ! @@ -30,7 +54,7 @@ class AVPreviewOutput(TCPMultiConnection): videoscale ! videorate ! {vcaps_out} ! - jpegenc quality=90 ! + {venc} ! queue ! mux. @@ -54,7 +78,8 @@ class AVPreviewOutput(TCPMultiConnection): acaps=Config.get('mix', 'audiocaps'), vcaps_in=Config.get('mix', 'videocaps'), vcaps_out=vcaps_out, - deinterlace=deinterlace + deinterlace=deinterlace, + venc=venc ) self.log.debug('Creating Output-Pipeline:\n%s', pipeline) |